Cursos de Informática Grátis www.megainforcursos.com

20 de maio de 2012

INTERFACE DO OLLY DEBUGGER

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:

  • 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).
Região 2

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.
Região 4

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.
Além das regiões nós temos a barra de ferramentas:



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.
Após os comandos básicos de depuração, temos os botões das janelas:
  • 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.
Por último temos os botões de configuração e ajuda.
  • 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.
Estas foram as opções contidas na barra de ferramentas. O Olly também conta com um menu tradicional, que contém basicamente as mesmas funções da barra de ferramentas. Um dos itens do menu que vale a pena mencionar é o de plugins. O Olly suporta a criação de plugins, sendo alguns deles muito úteis. Por padrão ele vêm apenas com dois plugins, um de bookmarks e outro de comandos, que adiciona uma caixa de texto no rodapé do programa onde você pode entrar com ações e comandos de forma semelhante ao SoftICE.

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

 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes