Logo Hardware.com.br
Felipe_Ribas
Felipe_Ribas Novo Membro Registrado
6 Mensagens 0 Curtidas

Utilizando um debugger - OllyDbg

#1 Por Felipe_Ribas 23/09/2007 - 02:03
Fergo disse:
Na região da memória ele pode exibir diversas informações, que podem se escolhidas através do botão direito. Por padrão ele exibe apenas as seções de dados utilizada no executável, onde ficam os locais para leitura e escrita de dados.
A busca por strings só funciona realmente bem quando o executável utiliza um arquivo .res para armazenar as strings. O Olly possui a capacidade de indetificar qualquer string dentro do .exe, mas nem sempre ele encontra todas ou as detecta corretamente. Você pode tentar usar o plugin "Ultra String" do Olly, que é mais eficaz:
http://www.tuts4you.com/download.php?view.107

Quanto a outra dúvida, não entendi ao certo o que você quis dizer. Que endereço é esse que você está falando?

Abraços,
Fergo


saquei, valeu...
a outra duvida seria o seguinte: vc abre teu programa ok no olly, aí dá um Run direto, blz? daí fecha o programa quando ele abrir em seguida. O que teremos? Teremos de volta a tela do olly, com o marcador em alguma função RETN do executavel, correto? O problema é que se olhar na esquerda, o ADRESS desse RETN não vai ser um 004xxxxx de endereço comum igual quando vc acabou de carregar o programa no olly, e sim vai ser um endereço normalmente iniciado por 77xxxxx, sacou? aí queria saber pq e da onde vem isso...

e aproveitando o topico, fergo, podes me tirar mais uma duvidazinha?
estou tentando crackear um programa pra testar o que li nos seus tutos, mas ele tem proteção contra debug. Eu vi que ele tem a função IsDebuggerPresent mas vi tb que quando eu rodo o programa pelo Olly, não passa por essa função antes de dar o erro de exception pelo olly. Daí eu dei um trace over e achei a função no exec.exe que é chamada antes da exception. O problema é que qnd eu dou breakpoint nessa função, e chamo um Trace In, eu vejo que tem bilhoes de funções ainda... e pior, ele entra numas dlls de funções 3D (pra rodar o jogo) porem pelo que vi no trace ele retorna ainda pro meu executavel antes de dar o erro... o problema é que se eu dou trace over lá no começo ele para por ali. Se eu dou trace In, demora milenios e nunca chega. Daí eu queria saber se tem como eu saber, quando meu exec chama uma função de outro modulo, quando que ele volta pras funções do proprio exec novamente? Tem como saber isso? Eu achei que simplesmente ele voltaria pra linha abaixo do Call, mas vejo não necessariamente, correto? Se puder me dar umas dicas... espero não ter sido muito confuso, eu acabo me expressando mal..
valeu, abraços
Felipe_Ribas
Felipe_Ribas Novo Membro Registrado
6 Mensagens 0 Curtidas
#31 Por Felipe_Ribas
16/01/2008 - 02:47
Fergo disse:
Na região da memória ele pode exibir diversas informações, que podem se escolhidas através do botão direito. Por padrão ele exibe apenas as seções de dados utilizada no executável, onde ficam os locais para leitura e escrita de dados.
A busca por strings só funciona realmente bem quando o executável utiliza um arquivo .res para armazenar as strings. O Olly possui a capacidade de indetificar qualquer string dentro do .exe, mas nem sempre ele encontra todas ou as detecta corretamente. Você pode tentar usar o plugin "Ultra String" do Olly, que é mais eficaz:
http://www.tuts4you.com/download.php?view.107

Quanto a outra dúvida, não entendi ao certo o que você quis dizer. Que endereço é esse que você está falando?

Abraços,
Fergo


saquei, valeu...
a outra duvida seria o seguinte: vc abre teu programa ok no olly, aí dá um Run direto, blz? daí fecha o programa quando ele abrir em seguida. O que teremos? Teremos de volta a tela do olly, com o marcador em alguma função RETN do executavel, correto? O problema é que se olhar na esquerda, o ADRESS desse RETN não vai ser um 004xxxxx de endereço comum igual quando vc acabou de carregar o programa no olly, e sim vai ser um endereço normalmente iniciado por 77xxxxx, sacou? aí queria saber pq e da onde vem isso...

e aproveitando o topico, fergo, podes me tirar mais uma duvidazinha?
estou tentando crackear um programa pra testar o que li nos seus tutos, mas ele tem proteção contra debug. Eu vi que ele tem a função IsDebuggerPresent mas vi tb que quando eu rodo o programa pelo Olly, não passa por essa função antes de dar o erro de exception pelo olly. Daí eu dei um trace over e achei a função no exec.exe que é chamada antes da exception. O problema é que qnd eu dou breakpoint nessa função, e chamo um Trace In, eu vejo que tem bilhoes de funções ainda... e pior, ele entra numas dlls de funções 3D (pra rodar o jogo) porem pelo que vi no trace ele retorna ainda pro meu executavel antes de dar o erro... o problema é que se eu dou trace over lá no começo ele para por ali. Se eu dou trace In, demora milenios e nunca chega. Daí eu queria saber se tem como eu saber, quando meu exec chama uma função de outro modulo, quando que ele volta pras funções do proprio exec novamente? Tem como saber isso? Eu achei que simplesmente ele voltaria pra linha abaixo do Call, mas vejo não necessariamente, correto? Se puder me dar umas dicas... espero não ter sido muito confuso, eu acabo me expressando mal..
valeu, abraços
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#32 Por Fergo
16/01/2008 - 04:00
Acho que entendi. Esse endereço de return diferente é referente ao retorno da execução do programa para o sistema operacional, encerrando a execução do programa em questão. Como ele está retornando para o SO, o endereço não vai ser próximo ou na mesma base (muito provavelmente) dos endereços virtuais do aplicativo em si, aqueles mostrados pelo Olly, mas sim um endereço relativo ao Windows. Acho que era essa a sua pergunta, perdoe-me se respondi outra coisa novamente.

Quanto a segunda, prefiro sinceramente não tratar sobre essa questão de crackear programas aqui no GdH, pois pode se encaixar bem em apologia a pirataria e fere as regras do fórum. Prefiro manter esse tópico mais específico ao uso do debugger em si e em discussão sobre assembly, caso necessário. Espero que entenda.

Abraços,
Fergo
skysbsb
skysbsb Novo Membro Registrado
4 Mensagens 0 Curtidas
#33 Por skysbsb
23/02/2008 - 05:52
só queria comentar a excelente qualidade q este tutorial possui.. aprendi muita coisa com ele, mesmo ele apresentando somente alguns detalhes de todas as funcionalidades do ollydbg..

queria q o autor desse tutorial se proponha a escrever + artigos sobre o ollydbg.. inclusive mostrando alguns plugins q podem nos ajudar a decodificar programas...

vlw, abraço!
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#34 Por Fergo
23/02/2008 - 11:21
Obrigado skysbsb! Fico feliz que tenha gostado.
Ultimamente tenho estado meio sem tempo, mas tenho muita vontade de continuar escrevendo alguns capítulos. Assim que sobrar um tempinho eu atualizo ele. A sua sugestão de plugins foi muito boa, obrigado.
Estava pensando também em dar apenas uma visão geral sobre os outros debuggers que tem por aí (WinDbg, bom e velho SoftICE, IDA, WDasm, etc), mas ficando apenas nisso, já que não pretendo desviar do OllyDbg.

[]s
Fergo
skysbsb
skysbsb Novo Membro Registrado
4 Mensagens 0 Curtidas
#35 Por skysbsb
25/02/2008 - 00:46
fergo, tem como eu entrar em contato com vc por msn ou irc, algo + runtime(hehe)? tava querendo tirar umas duvidas.. bem, vou tentar escrever algumas aki:

1- nao consegui entender muito bem essas funcoes Hit Trace e Run trace do ollydbg.. como eu posso utiliza-las..

2- essa funcao animate into e animate over roda o programa só q com um clock bem reduzido? nao tem como diminuir a velocidade dele nao?

3- eu desenvolvi um soft pago pra um jogo, que para um usuario utiliza-lo, necessita de uma autenticação numa página.. porem com o ollydbg eu sei que da pra crackia-lo numa boa soh mudando um JNZ pra um JMP.. dai eu adicionei uma funcao isdebugpresent() da api do windows pra tentar dar trabalho pra pessoa que tentar crackea-lo.. mas mesmo assim me sinto inseguro e queria desenvolver uma função que checava se uma area do .code section foi modificada verificando um checksum entre uma area delimitada.. porem n sei exatamente como limitar essa regiao.. vc tem alguma ideia?

ah, só pra saber, vc é formado em alguma area ou só é fuçador mesmo? hehe
vlw
scarvenger
scarvenger Membro Senior Registrado
306 Mensagens 4 Curtidas
#36 Por scarvenger
25/02/2008 - 02:57
completando a escolinha aqui, fergo, cara, eu, usando os teus tutoriais e fuçando um pouco consegui fazer um hack para warcraft 3 (pra aumentar gold de minas de ouro e aumentar o gold do player hehe), eu queria postar um tutorial sobre, tu sabe as implicações legais de fazer isso (acho que seria legal pois aborda aspectos sobre como descobrir endereços de memória alocados dinamicamente)?

obrigado.
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#37 Por Fergo
25/02/2008 - 10:38
skysbsb disse:
fergo, tem como eu entrar em contato com vc por msn ou irc, algo + runtime(hehe)? tava querendo tirar umas duvidas.. bem, vou tentar escrever algumas aki:

1- nao consegui entender muito bem essas funcoes Hit Trace e Run trace do ollydbg.. como eu posso utiliza-las..

2- essa funcao animate into e animate over roda o programa só q com um clock bem reduzido? nao tem como diminuir a velocidade dele nao?

3- eu desenvolvi um soft pago pra um jogo, que para um usuario utiliza-lo, necessita de uma autenticação numa página.. porem com o ollydbg eu sei que da pra crackia-lo numa boa soh mudando um JNZ pra um JMP.. dai eu adicionei uma funcao isdebugpresent() da api do windows pra tentar dar trabalho pra pessoa que tentar crackea-lo.. mas mesmo assim me sinto inseguro e queria desenvolver uma função que checava se uma area do .code section foi modificada verificando um checksum entre uma area delimitada.. porem n sei exatamente como limitar essa regiao.. vc tem alguma ideia?

ah, só pra saber, vc é formado em alguma area ou só é fuçador mesmo? hehe
vlw


1) O run trace é bem semelhante ao trace comum, com a diferença de que ele faz o logging de endereços, registradores, mensagens, etc. Ela não é tão simples de usar quanto parece. Seria muito longo explicar aqui (talvez mais pra frente eu faça outro capítulo falando disso), mas por enquanto eu recomendo dar uma olhada no Help do OllyDbg, pois lá tem uma explicação detalhada do Run Trace. O Hit Trace basicamente consiste em identificar quais comandos foram executados e quais não foram. Ele faz isso setando um breakpoint INT3 virtualmente em cada instrução. Se o breakpoint for atingido, ele marca a instrução como "executada".

2) O Animation nada mais é do que um Step Into/Over automatizado. É como se o olly ficasse "apertando" F7/F8 repetidamente. Até onde eu saiba não há como controlar a velocidade com que isso é feito.

3) O uso da IsDebugPresent já é um bom começo, mas como é uma função, é facilmente eliminada também. Para dificultar um pouco eu recomendo sim, como você disse, colocar um algoritmo de checksum (MD5 ou CRC, que são eficientes) que verifica pela integridade do aplicativo.
Se você quiser algo realmente complicado (tanto de implementar quando de quebrar), recomendaria implementar uma máquina virtual para cuidar da rotina de autenticação (como ocorre com a proteção StarForce), usaria um MD5 para criptografar todo o aplicativo (na inicialização ele seria descriptografado) e obrigar o registro do programa de ser feito via internet, e não localmente (como ocorre no Steam, por exemplo). Existem alguns packers que conseguem proteger bem o software através de criptografia, como é o caso do Armadillo.
Tem também um artigo do Fravia, falando como proteger melhor seu software:
http://www.searchlores.org/protec/protec.htm

Quanto a ultima pergunta: sou autodidata mesmo (fuçador big_green.png)

scarvenger disse:
completando a escolinha aqui, fergo, cara, eu, usando os teus tutoriais e fuçando um pouco consegui fazer um hack para warcraft 3 (pra aumentar gold de minas de ouro e aumentar o gold do player hehe), eu queria postar um tutorial sobre, tu sabe as implicações legais de fazer isso (acho que seria legal pois aborda aspectos sobre como descobrir endereços de memória alocados dinamicamente)?

obrigado.


Creio que hacks não implicam em problemas legais, pois tem grandes portais que disponibilizam hacks e cheats sem problemas. O ilegal seria um crack, para burlar a proteção contra cópia por exemplo, prejudicando a empresa. Mas por via das dúvidas é melhor sempre ler o EULA do jogo para ver o que pode e o que não pode.

Fergo
skysbsb
skysbsb Novo Membro Registrado
4 Mensagens 0 Curtidas
#38 Por skysbsb
26/02/2008 - 04:49
scarvenger disse:
completando a escolinha aqui, fergo, cara, eu, usando os teus tutoriais e fuçando um pouco consegui fazer um hack para warcraft 3 (pra aumentar gold de minas de ouro e aumentar o gold do player hehe), eu queria postar um tutorial sobre, tu sabe as implicações legais de fazer isso (acho que seria legal pois aborda aspectos sobre como descobrir endereços de memória alocados dinamicamente)?

obrigado.


aheuhaeu entao somos 2.. eu desenvolvo cheats pra jogos tb..
pro ultima online eu criei o UOBot, e no warcraft3 eu fiz meu próprio MH.. :P
hm, queria saber + sobre como descobrir enderecos alocados dinamicamente.. pq eu lembro uma vez, tentei usar o cheat o'matic pra mudar o valor do meu gold no warcraft e nao funfava :P... seria interessante vc fazer um tutorial...


anyway, voltando ao ollydbg.. fergo, eu n queria uma coisa assim tao complicado de ser implementado tb nao.. queria algo simples.. eu vi por ai um esquema de criar 2 funcoes naked entre uma funcao pra delimitar onde comeca e onde termina ela.. dai era soh criar uma constante com o CRC dessa area de memoria.. o problema é q toda vez q recompila o programa corro risco dessa area de memoria mudar de lugar, ou mudar alguma variavel interna? n sei.. pensei desse jeito.. qq vc acha?
scarvenger
scarvenger Membro Senior Registrado
306 Mensagens 4 Curtidas
#39 Por scarvenger
26/02/2008 - 12:53
hmm ja criou um MH? acho que seria interessante saber como fazer ele, tipo um MH que le todo o mapa e printa na tela do jogo? se quiser fazer um tutorial sobre isso eu ficaria agradecido, quanto ao hack do warcraft 3, eu acho que e ilegal por justamente na licenca eles comentarem que e proibido fazer engenharia reversa em cima do executavel do jogo, entao eu acho que posto no meu blog sem fazer referencias ao nome do programa, so para se aprender como descobrir a memoria alocada dinamicamente, acham uma boa?
skysbsb
skysbsb Novo Membro Registrado
4 Mensagens 0 Curtidas
#40 Por skysbsb
26/02/2008 - 19:00
tipo assim, qdo eu fui criar o MH, eu ainda n sabia usar o ollydbd e eu tinha +/- ideia de como um mh deveria funcionar.. eu tinha certeza que ele apenas dava um monte de WriteProcessMemory em cima do warcraft3 em posições de memoria fixa.. dai eu baixei o Deteours Express(um sdk desenvolvido pela Microsoft Research que hookeia todos as APIs do windows de um determinado programa) pra saber exatamente em quais endereços o maphack do shadowfrench escrevia... dai eu somente tive o trabalho de pegar esses dados e criar o programa em C que escrevia na memoria do warcraft...

coisa bem simples mesmo.. ^^

agora sobre o tutorial de memoria alocada dinamicamente.. eu gostaria de ve-lo sim :P
ALOPRADO_XP
ALOPRADO_XP Novo Membro Registrado
2 Mensagens 0 Curtidas
#41 Por ALOPRADO_XP
20/04/2008 - 11:49
Ola Fergo.
Antes de mais nada queria te parabenizar pelo exelente tutorial.
A minha duvida é:
1-) Quando eu tento abrir o arquivo aparece uma mensegem assim
"File 'c:\xxxxxxx.exe' is probably not a 32-bit portable executable. try load at anyway?" Oque seria isso, ja que no google não consegui descobrir.
2-) Se eu clicar em sim o programa é aberto mas quando eu clico no (play) pra rodar o programa ele não abre, fica 'paused'
obs;para o programa abrir no windows ele tem que estar junto com outros arquivos.
Desculpe se postei alguma besteira, sou novo nisso.
eyamamoto
eyamamoto Super Participante Registrado
865 Mensagens 13 Curtidas
#42 Por eyamamoto
20/04/2008 - 23:17
ALOPRADO_XP disse:
Ola Fergo.
Antes de mais nada queria te parabenizar pelo exelente tutorial.
A minha duvida é:
1-) Quando eu tento abrir o arquivo aparece uma mensegem assim
"File 'c:\xxxxxxx.exe' is probably not a 32-bit portable executable. try load at anyway?" Oque seria isso, ja que no google não consegui descobrir.
2-) Se eu clicar em sim o programa é aberto mas quando eu clico no (play) pra rodar o programa ele não abre, fica 'paused'
obs;para o programa abrir no windows ele tem que estar junto com outros arquivos.
Desculpe se postei alguma besteira, sou novo nisso.


A tradução (em sofrível inglês confuso.png) é :

Arquivo 'c:\XXX.exe' provavelmente não é portável a execução de 32 bits. Tente carregar outro.

caso vc não encontre ou não saiba a tradução, use o melhor amigo do homem que não é um poliglota .... daa.png
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#45 Por Fergo
22/05/2008 - 22:32
Após um tempo sem updates, resolvi criar uma lista com os plugins que considero indispensáveis para o Olly.

PLUGINS

IDAFicator

Autor: AT4RE
Versão: 1.2.12
Download: http://www.at4re.com/tools/Releases/Zool@nder/IDAFicator/IDAFicator_1.2.12.zip

Um dos melhores plugins já criados para o Olly. Ele traz para o OllyDbg muitas das facilidades e funcionalidades disponíveis no IDA (Interactive Disassembler)

OllyDump

Autor:
Gigapede
Versão: 2.21
Download: http://www.openrce.org/downloads/download_file/108

Plugin extremamente útil quando está se trabalhando com descompressão de executáveis, em que é necessário realizar um dump do processo na memória (buscar os dados da memória e jogar para o disco, simplificadamente). Funciona muito bem juntamente com o ImpRec (Import Reconstructor), que re-alinha todo o executável novamente.

OllyScript

Autor: SHaG
Versão: 0.94
Download: http://www.openrce.org/downloads/download_file/106

Indispensável. Com esse plugin você pode rodar scripts dentro do debugger, automatizando diversos processos e lhe salvando tempo. É fácil encontrar sites contendo centenas de scripts, mas recomendo este aqui: http://www.tuts4you.com/download.php?list.53

OllyPerl


Autor:
Joe Stewart
Versão: 0.1
Download: http://www.openrce.org/downloads/download_file/220

Outra forma de automatizar o Olly, escrevendo scripts na linguagem Perl. Para utilizar o plugin é preciso ter o ActivePerl instalado.

CommandBar


Autor: Gigapede
Versão: 3.00.108
Download: http://www.openrce.org/downloads/download_file/105

Quem já utilizou o bom e velho (e infelizmente extinto =() SoftICE certamente vai gostar desse plugin. Trata-se de uma caixa de texto na qual você pode praticamente controlar o Olly através de comandos que seguem a mesma sintaxe utilizada no SoftICE (bpx, bd, cpu, etc).

Olly ToolBar Manager

Autor: arjuns
Versão: 0.3
Download: http://tuts4you.com/request.php?84

Com esse plugin você pode adicionar itens na barra de ferramentas do OllyDbg. Muito bom para colocar atalhos para Notepad, Calculadora, editor Hexadecimal, editor de recursos. Dessa forma você não precisa ficar perdendo tempo e navegar até a pasta (ou menu iniciar) onde estão os aplicativos. Recomendo muito.

OllyFlow

Autor: henryouly
Versão: 0.1
Download: http://www.openrce.org/downloads/download_file/178

Talvez um dos plugins mais interessantes. O OllyFlow gera gráficos e fluxogramas do disassembly para facilitar a identificação e a interpretação do fluxo do aplicativo (funcionalidade presente no IDA).

Por enquanto são esses. Mais para frente eu adiciono eventuais plugins e deixo um aviso aqui neste tópico, notificando da atualização.

Vou aproveitar esse tópico para colocar o meu scheme de cores que criei e utilizo no Olly. Para utilizar, modifique o arquivo ollydbg.ini adicionando as seguintes entradas (verifique pela seção correta e altere o asterisco para o índice desejado):

[Colours]
Scheme
<li>=0,12,8,18,7,8,7,13</li>
Scheme name
<li>=Fergo</li>

[Syntax]
Commands
<li>=15,4,10,10,9,10,112,13,111,8,12,0,0,0</li>
Operands
<li>=1,11,11,11,2,2,4,4,0,0,0,0,0,0</li>
Scheme name
<li>=Fergo


Esse scheme corresponde a essa aparência (clique para ampliar):
Imagem

Abraços!
Fergo
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal