• Nenhum resultado encontrado

Depurando Programas. Prof. Alexandre Beletti Ferreira. Depurador. Programa que se conecta a outros programas de software e os controla, permitindo:

N/A
N/A
Protected

Academic year: 2021

Share "Depurando Programas. Prof. Alexandre Beletti Ferreira. Depurador. Programa que se conecta a outros programas de software e os controla, permitindo:"

Copied!
12
0
0

Texto

(1)

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

(2)

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

(3)

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)

(4)

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

(5)

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);

}

(6)

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

(7)

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"

Shit + Seta = Alterna as “janelas”

Tela do Hack (Janela e Ctrl +V)

(8)

Teste de Caixa Branca

● Temos um arquivo binário

● Conhecemos o comportamento do programa

● Se a variável “var” tiver o valor decimal 105 ele mostra a palavra “ola”

● Senão ele mostra a palavra “mundo”

● Sabe-se que o valor 105 em decimal pode ser representado em hexadecimal por 69

● Será feita uma busca por esse valor, digitando Ctrl + S e colocando o valor 69

Buscando o valor 69 (hexa)

(9)

Buscando o valor

● Foi encontrado o primeiro valor 69, mas observa-se que é em um MOV, o que não indica uma comparação

● Pressionando Ctrl + C vamos para o próximo valor 69 encontrado

● O próximo valor está em uma instrução de comparação (CMP), o que pode indicar o que desejamos

● Vamos adicionar um breakpoint (F2) nessa linha e executar o programa com F9

Executando passo a passo

● Vamos executar passo à passo (F3) e observar a tela do usuário com (F5)

● Até o endereço de memória 1692:02AA, onde encontra-se a instrução PUSH AX, a tela do usuário não retornou nada

● Já após o endereço de memória 1692:02AB, onde encontra-se a instrução CALL 1720, a tela do usuário retornou “ola”

● Encontramos o que desejávamos...

(10)

Entendendo o IF em Opcode

● Compara-se “algo” com 0069 (CMP)

● Se não for igual (JNE) ir para 02A7 → MOV AH,00AE

● Se for igual → MOV AH,00AA e JMP 02AA

Quebrando o Código

(11)

Quebrando o Código

● Sabe-se que o valor da variável “var” é 69 (hexa)

● Se não for igual (JNE) é sempre falso, nunca irá executar

● Vamos substituir o JNE ou JE (uma das possibilidades)

Quebrando o Código

● Vamos alternar até a janela de baixo e ir para o endereço (Ctrl + G) 02A0

● Alterar o opcode 75 (JNE) para 74 (JE)

● Alterne a janela e coloque um breakpoint (F2) nesse ponto

● Executar o programa (F9)

● Depois do breakpoint executar passo à passo (F3) e observar (F5)

● Obs: no hack não é possível salvar as

alterações

(12)

Quebrando o Código

Bibliografia

● Hoglund, G., McGraw G., Exploiting software:

how to break code. Pearson: 2006.

Referências

Documentos relacionados

1º- O presente Regulamento integra, como anexo, o Projeto Pedagógico do Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas do Instituto Federal

Áreas com indícios de degradação ambiental solo exposto no Assentamento Fazenda Cajueiro A e no Assentamento Nossa Senhora do Carmo B, localizados, respectivamente, no Município de

A curva em azul é referente ao ajuste fornecido pelo modelo de von Bertalany, a curva em vermelho refere-se ao ajuste fornecido pelos valores calculados Lt, dados pela equação

Os estudos sobre diferenciais de salários são explicados por alguns fatores que revelam a existência da relação entre as características pessoais produtivas educação,

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

lhante; linhas vasculares bem v1S1veis, cheias de conteúdo amarelo-pardo, em geral retas; pa- rênquima axial moderadamente abundante, pa- ratraqueal em faixas; raios