Aí vai mais um pedaço 
INTERFACE DO OLLY DEBUGGER
Após uma boa parte teórica, chegou a hora de por em prática aquilo que acabamos de estudar. Neste capítulo vou apresentar um pouco da interface do OllyDbg, que apesar de intuitiva, merece esclarecimentos.
Para o nosso estudo, eu criei um simples aplicativo que iremos depurar mais a frente. Ele é necessário neste já neste capítulo (não para depuração, mas para a apresentação dos itens do Olly). Você pode baixar o arquivo executável juntamente com o seu código fonte (programado em assembly na sintaxe MASM32 utilizando o WinAsm Studio como IDE) no link abaixo:
http://www.fergonez.net/files/adivinhe.rar
O OllyDbg pode ser baixado gratuitamente através do site http://www.ollydbg.de. É bem pequeno e não necessita instalação, basta extrair o conteúdo para uma pasta qualquer.
Após extraído, abra o Olly, vá em “File->Open” e abra o nosso arquivo de estudo (adivinhe.exe). Rapidamente o Olly vai interpretar o arquivo e mostrar o disassembly na janela principal. Vamos deixar essa parte mais frente, já que o objetivo deste capítulo é apenas mostrar a interface, sem depurar o aplicativo por enquanto. A tela deve ser semelhante a essa:

A interface do aplicativo é composta por poucos botões. O segredo do Olly é o botão direito do mouse. A maioria das funções existentes no aplicativo pode ser acessada através do botão direito do mouse, sendo que os itens exibido no menu de popup variam de acordo com o local onde foi dado o clique (dependendo da coluna e da região).
Eu numerei as principais regiões da tela de 1 a 4.
Região 1
Esta é a tela principal do programa, onde é apresentado o disassembly do aplicativo. Ela é dividida em quatro colunas:
Essa área mostra todos os registradores e flags que nós vimos anteriormente (juntamente com diversos outros valores). A cada instrução essa tela é atualizada, mostrando o estado atual de cada um dos itens. Caso algum desses itens tenha sido modificado de uma instrução para outra, o Olly as colore com outra cor (nesse caso é o vermelho). As flags são mostradas logo abaixo dos registradores, abreviadas com a letra C (Carry Flag), Z (Zero Flag) e S (Signal Flag)
Região 3
Essa região nos mostra a memória física (RAM) destinada ao aplicativo. É possível observar o valor de cada byte de memória dentro do espaço reservado ao aplicativo. É composta por três colunas:
Mostra o estado atual da pilha (stack). Como visto anteriormente, a pilha é amplamente utilizada durante as chamadas de função. O VisualBasic é uma linguagem que faz um uso muito grande da pilha, principalmente pela quantidade de funções que são utilizadas pelo aplicativo. Também é dividida em 3 colunas :

Abaixo uma descrição de cada botão, da esquerda para a direita.
No rodapé do Olly fica uma pequena barra de status, que além de mostrar o estado atual do alvo (finalizado, pausado ou em execução), serve como um informativo.
No próximo capítulo pretendo colocar alguns conceitos importantes de depuração.
Abraços,
INTERFACE DO OLLY DEBUGGER
Após uma boa parte teórica, chegou a hora de por em prática aquilo que acabamos de estudar. Neste capítulo vou apresentar um pouco da interface do OllyDbg, que apesar de intuitiva, merece esclarecimentos.
Para o nosso estudo, eu criei um simples aplicativo que iremos depurar mais a frente. Ele é necessário neste já neste capítulo (não para depuração, mas para a apresentação dos itens do Olly). Você pode baixar o arquivo executável juntamente com o seu código fonte (programado em assembly na sintaxe MASM32 utilizando o WinAsm Studio como IDE) no link abaixo:
http://www.fergonez.net/files/adivinhe.rar
O OllyDbg pode ser baixado gratuitamente através do site http://www.ollydbg.de. É bem pequeno e não necessita instalação, basta extrair o conteúdo para uma pasta qualquer.
Após extraído, abra o Olly, vá em “File->Open” e abra o nosso arquivo de estudo (adivinhe.exe). Rapidamente o Olly vai interpretar o arquivo e mostrar o disassembly na janela principal. Vamos deixar essa parte mais frente, já que o objetivo deste capítulo é apenas mostrar a interface, sem depurar o aplicativo por enquanto. A tela deve ser semelhante a essa:
A interface do aplicativo é composta por poucos botões. O segredo do Olly é o botão direito do mouse. A maioria das funções existentes no aplicativo pode ser acessada através do botão direito do mouse, sendo que os itens exibido no menu de popup variam de acordo com o local onde foi dado o clique (dependendo da coluna e da região).
Eu numerei as principais regiões da tela de 1 a 4.
Região 1
Esta é a tela principal do programa, onde é apresentado o disassembly do aplicativo. Ela é dividida em quatro colunas:
- Coluna 1 – Address. Ela nos mostra o endereço virtual das instruções (para saber mais sobre esse endereçamento, veja meu artigo sobre o funcionamento dos executáveis). Você pode reparar que os endereços não são em intervalos iguais para cada instrução. Isso ocorre devido ao fato de que o tamanho das instruções ser variável, como podemos observar na segunda coluna.
- Coluna 2 – Hex Dump. Aqui temos o código da instrução no seu formato hexadecimal (a cada 2 caracteres, temos 1 byte). São esses valores que ficam armazenados dentro do arquivo executável e que são passados para o processador. Como mencionado no parágrafo anterior, as instruções variam de tamanho, sendo que o endereço da próxima instrução é dado pelo endereço da instrução atual mais a soma dos bytes da instrução. Veja o exemplo do nosso aplicativo de exemplo. Ele começa no endereço 00401000 (padrão do Windows) e a sua primeira instrução é composta por 2 bytes (6A 00). O endereço da próxima instrução (na linha de baixo) vai ser o endereço atual somado com o tamanho da instrução (00401000+2) = 00401002.
- Coluna 3 – Disassembly. Essa coluna nada mais é do que a interpretação e a tradução para assembly das instruções presentes na segunda coluna. A análise do aplicativo é feita quase que inteiramente nela.
- Coluna 4 – Comments. Essa coluna não influencia no aplicativo, ela é utilizada apenas para comentários e informações. O Olly a utiliza para identificar as chamadas de função juntamente com os seus argumentos (você pode ver que ele identifica as chamadas da API do Windows em vermelho e lhe mostra os argumentos, facilitando e muito a interpretação).
Essa área mostra todos os registradores e flags que nós vimos anteriormente (juntamente com diversos outros valores). A cada instrução essa tela é atualizada, mostrando o estado atual de cada um dos itens. Caso algum desses itens tenha sido modificado de uma instrução para outra, o Olly as colore com outra cor (nesse caso é o vermelho). As flags são mostradas logo abaixo dos registradores, abreviadas com a letra C (Carry Flag), Z (Zero Flag) e S (Signal Flag)
Região 3
Essa região nos mostra a memória física (RAM) destinada ao aplicativo. É possível observar o valor de cada byte de memória dentro do espaço reservado ao aplicativo. É composta por três colunas:
- Coluna 1 – Address. Mostra os endereços virtuais de memória.
- Coluna 2 – Hex Dump. Este espaço contém o valor de cada byte da memória. Por padrão o Olly coloca 8 bytes por linha e por essa razão a coluna de endereços cresce de 8 em 8 bytes.
- Coluna 3 – ASCII. Essa coluna pode ser utilizada para exibir de formas diferentes os valores contidos na memória. Por padrão o Olly opta por exibir a representação ASCII desses valores. O modo de representação pode ser alterado utilizando o botão direito do mouse.
Mostra o estado atual da pilha (stack). Como visto anteriormente, a pilha é amplamente utilizada durante as chamadas de função. O VisualBasic é uma linguagem que faz um uso muito grande da pilha, principalmente pela quantidade de funções que são utilizadas pelo aplicativo. Também é dividida em 3 colunas :
- Coluna 1 – Address. Cumpre o mesmo papel das outras colunas de endereço. Nota-se que o endereço cresce de quatro em quatro bytes, pois cada posição da pilha é ocupada por um tipo DWORD (4 bytes)
- Coluna 2 – Value. Valor armazenado naquele endereço da pilha
- Coluna 3 – Comment. Utilizado para comentários e mostrar informações relevantes sobre aquele endereço. O Olly identifica diversos itens da pilha (como endereços de retorno) e adiciona essas informações na coluna de comentários.
Abaixo uma descrição de cada botão, da esquerda para a direita.
- Open - Abre o executável para depuração
- Restart – Recarrega o aplicativo atual
- Close – Fecha a aplicação carregada
- Play – Inicia a execução e depuração do aplicativo. Caso nenhum breakpoint tenha sido posicionado (veremos adiante), o programa será executado normalmente.
- Pause – Pausa o aplicativo em andamento
- Step Into – Caso um breakpoint tenha sido colocado em uma chamada de função, esse botão lhe permite fazer a depuração do conteúdo dessa função.
- Step Over – O contrário do item anterior. Ele simplesmente não “entra” dentro da chamada (mas ainda assim a executa), continuando a depuração na próxima instrução.
- Trace Into – Utilizado apenas quando está se faz backtracing. Ele registra as ações e endereços em um log, registrando também o conteúdo das funções chamadas.
- Trace Over – Semelhante ao item acima, mas não faz o registro do conteúdo das chamadas.
- Execute Till Return – Executa as instruções até encontrar o primeiro comando de retorno (RETN).
- Go to Address – Permite ao usuário especificar um endereço do código para visualizar.
- L – Show Log Window: exibe um log, no qual o Olly registra algumas ações como carregamento de plugins, etc.
- E – Show Modules Window: exibe todos os módulos e funções externas utilizados pelo programa (DLLs). Com o menu direito é possível acessar uma gama de opções dentro dessa janela (o mesmo vale para todas as outras janelas que forem mencionadas). Essa janela de módulos é muito importante para configurar breakpoints nas APIs do Windows, facilitando a aproximação em determinada região do código.
- M – Show Memory Window: mostra o estado da memória que está sendo utilizado pelo aplicativo, incluindo as seções do executável e tabelas de importação/exportação. Para um detalhamento byte a byte da memória, deve se utilizar a região de memória física mostrada na janela principal do aplicativo.
- T – Show Threads: exibe o estado de cada thread contida no aplicativo. Em aplicações multi-threading é possível, através dessa janela, ter um controle sobre cada uma das threads.
- W – Show Windows: mostra a estrutura e configuração das janelas carregadas pelo aplicativo (definida pelo WinProc). Os dados só são mostrados com o programa em execução e precisa ser atualizada manualmente pelo usuário (através do botão direito do mouse).
- H – Show Handles: exibe uma informação detalhada sobre os handles (referência a um objeto) que estão sendo utilizados pelo aplicativo. Quando o aplicativo abre um arquivo, é retornado um handle, que é utilizado para fazer a leitura e escrita, por exemplo.
- C – Show CPU: janela padrão do aplicativo, que é aberta automaticamente na hora de carregar o alvo. O seu conteúdo já foi explicado nos itens anteriores (onde as regiões foram numeradas de 1 a 4).
- / - Show Patches: as modificações feitas no executável ficam registradas nessa janela, facilitando a modificação ou o retorno à instrução original.
- K – Show Call Stack: mostra uma pilha de todas as chamadas de função até então feitas pelo aplicativo.
- B – Show Breakpoints Window: exibe todos os breakpoints setados no programa alvo.
- R – Show references: exibe todas as referências encontradas durante uma busca (seja ela uma constante, instrução, string). Veremos mais sobre elas adiante.
- ... – Run Trace: nessa janela é mostrado o resultado da operação de tracing (mencionada quando falamos de Trace Into/Over). Tracing é um processo um pouco complicado, por isso a sua explicação detalhada será apresentada mais a frente (é possível encontrar uma boa explicação na própria ajuda do Olly).
- S – Show Source: quando o aplicativo alvo é compilado com as informações de debug, normalmente o código assembly resultante também é armazenado. Nesse caso essa janela exibe esse código e mostra em tempo real o local no código fonte original que está sendo executado no momento. Muito útil para comparar o código assembly escrito e o compilado.
- Debugging Options – Exibe a janela de configuração do Olly. A princípio não é necessário alterar nada para fazer a depuração, a não ser que você tenha noção de onde está mexendo.
- Appearence – Permite configurar o esquema de cores. Recomendo alterar essas configurações para algo que lhe agrade, fazendo um “syntax highlighting” do código, facilitando a leitura.
- Help – Mostra a janela de ajuda do Olly. A ajuda está em Inglês.
No rodapé do Olly fica uma pequena barra de status, que além de mostrar o estado atual do alvo (finalizado, pausado ou em execução), serve como um informativo.
No próximo capítulo pretendo colocar alguns conceitos importantes de depuração.
Abraços,
0 comentários:
Postar um comentário