Depurando Programas Prof. Alexandre Beletti Ferreira
Depurador
● Programa que se conecta a outros programas de software e os controla, permitindo:
●
Executar passa à passo um código (single stepping)
●
Rastrear a depuração
●
Configurar pontos de interrupção (breakpoints)
●
Visualizar variáveis
●
Estado da memória no programa alvo conforme ele
é executado
Depurador
● Importantíssimo para determinar o fluxo lógico do programa
● Dividem-se em duas categorias:
●
Depurador de Modo de Usuário
●
Depurador de Modo Kernel
Depurador de Modo de Usuário
● Funcionam como programas normais sob o SO
● Estão sujeitos às mesmas regras que os programas normais
● Conseguem depurar somente outros processos de nível de usuário
● Exemplo: Debug, Hack, IDA
Depurador de Modo Kernel
● Parte do Sistema Operacional
● Consegue depurar drivers de dispositivos e até o próprio Sistema Operacional
● Exemplo: SoftIce (Compuware)
Análise da Caixa Branca
● Análise e compreensão do código fonte
● Quando possui somente o binário, ele é descompilado para obter o código fonte
● Muito eficiente para localizar erros de
programação e erros de implementação de software
● Exemplos: SourceScope (requer o código
fonte) e IDA-Pro (não requer o código fonte)
Análise da Caixa Preta
● Análise de um programa em execução sondando-o com várias entradas
● Requer um programa em execução e não faz análise do código fonte
● “Entradas maliciosas para quebrar o programa”
● É possível sem ter acesso ao código binário, testando o programa remotamente na rede
Análise da Caixa Preta
● Não é tão eficiente quanto o caixa branca para conhecer o comportamento do programa
● Fácil de fazer e requer menos habilidade
● Avaliar os caminhos internos quer podem ser influenciados e observados de fora do sistema
● Um exemplo disso é DoS (Denial of Service)
● Exemplo: Hailstorm
Análise da Caixa Cinza
● Combina técnicas de caixa branca e teste de entradas de caixa preta
● Utilização de várias ferramentas em conjunto
● Um exemplo seria executar um programa alvo dentro de um depurador e em seguida fornecer determinadas entradas ao programa
● Exemplo: Purify, Valgrind
Exemplo 1: IF em linguagem C
#include <stdio.h>
void main() {
int var=105; // equivale a 69h if (var == 105)
{
printf("ola");
} else {
printf("mundo");
}
scanf("%i",&var);
}
Compilar e Linkar
● Acesse o menu “Compile” depois a opção
“Build All”
Copiar e Executar o Hack
● Copiar o seguinte arquivo:
http://www.higuita.com.br/fatecbs/ao/hack_com.txt
● Abrindo o Prompt de Comandos (COMMAND ou CMD) e acessando o diretório (pasta) onde o download foi copiado, renomear o arquivo REN hack_com.txt hack.com
● Executar o programa da seguinte maneira:
hack programa.exe (ou .com)
● Obs: Executar em tela cheia e pressionar Ctrl + V
Principais comandos do HACK
●
Ctrl + G = Salta para um determinado endereço
●
Ctrl + V = Mostra o código em HEXA e em ASCII
●
Ctrl + R = Define um valor para um registrador
●
Ctrl + S = Busca
●
Ctrl + C = Continua a busca
●
F2 = Marca um "breakpoint"
●
F3 = Executa a próxima instrução
●
F5 = Mostra a tela do usuário
●
F8 = Pula uma instrução
●
F9 = Executa o programa até um "breakpoint"
●