Descompilação de programas Flashcards
O que é engenharia reversa?
É uma técnica que permite destrinchar o funcionamento de um sistema, objeto ou dispositivo através da análise de sua operação, estrutura e função.
Engenharia reversa de arquivos maliciosos
Permite uma investigação minuciosa do código-fonte, protocolos de comunicação e outros componentes do sistema. Com isso, é possível identificar pontos fracos que podem ser explorados para executar código malicioso, ganhar acesso não autorizado ou comprometer a integridade dos dados.
Descompilação
Produzir, a partir de um executável, um programa fonte em linguagém de alto-nível que, quando compilado, tem a mesma funcionalidade do executável original. Operação inversa de um compilador.
Usos da engenharia reversa em segurança
Software malicioso;
Reversão de algoritmos criptográficos;
Direitos autorais;
Auditoria de código binário (objetiva descobrir se o software apresenta risco).
Usos da engenharia reversa em desenvolvimento de software
Adquirir interoperabilidade com software proprietário;
Desenvolver softwares competitivos;
Avaliar qualidade e robustez de softwares.
Métodos de análise em engenharia reversa
Análise offline e análise online.
Análise offline em engenharia reversa
Essa análise não leva em consideração a execução do código, bastante utilizada para descobrir pedaços específicos do código. Observa-se apenas o código, não o fluxo de dados.
Análise online em engenharia reversa
Alguns casos quando o código sofre um tratamento para não ser visível através de engenharia reversa, a análise offline não produz resultados, sendo necessário a observação do código em execução. Descobre o comportamento do programa e seu fluxo de dados.
Ferramentas de descompilação
Disassemblers (IDA-PRO, ILDasm) e debuggers (User mode: OnlyDbg, WinDbg, IDA PRO, PEBrowse Professional Interative. Kernel Mode: WinDbg, Numega SoftIce, Syser Debugger).
Disassemblers
Muito importante na análise offline;
Decodificam o binário em assembly;
Em assembly cada comando equivale a uma instrução de computador;
Montador é o programa responsável em transformar o assembly em código de máquina;
Disassembler faz o trabalho inverso do montador.
Assembly
Não é apenas uma linguagem, é um conjunto de linguagens, aonde cada plataforma possui um conjunto específico de instruções Assembly que é um pouco diferente dos demais.
Ferramenta Interative Disassembler - IDA PRO
Principal ferramenta da engenharia reversa, interface se assemelha a uma IDE, suporta uma variedade de arquitetura de processadores (IA-32, IA-64, Itanium, AMD64), implementa todo o fluxograma de execução baseado nas condições de desvio.
PAGA
Produz gráficos mostrando quais funções chamam API’s ou funções internas.
Ferramenta ILDasm
Disassembler para a Microsoft Intermediate Language, que é uma linguagem de baixo nível utilizada em linguagens .NET;
Fundamental para reverter aplicações .NET.
Ferramentas debuggers
Utilizadas para localizar e corrigir erros no programa em tempo de execução;
Possibilita a verificação do comportamento em tempo de execução, como os dados na memória, registradores e pilha de execução;
Utilizada em análise Online;
Se dividem em USER-MODE ou KERNEL-MODE.
Funcionalidade dos debuggers
Poderosa ferramenta disassembler;
Breakpoints de software e hardware;
Visualização de registro e memória;
Informações sobre processos.
Modo de operação debuggers User-Mode
Operam com restrição dentro do SO;
Só podem analisar um processo por vez;
Não executam e não acessam componentes do sistema operacional, tarefas administrativas ou dispositivos que utilizam drivers.
Vantagem: fácil configuração e utilização.
Ferramenta debugger user-mode
OllyDbg, o mair conhecido;
Permite reescrever o código Assembly e remontá-lo com um clique;
Permite identificar blocos de instruções, loops, desvios, jumps e estruturas de códigos;
Gratuito e atua em modo usuário;
Funciona como debugger e disassembler.
Ferramenta debugger WinDbg
Distribuído pela Microsoft, grande integração com Windows;
Opera nos dois modos (user-mode e kernel-mode);
Não permite alteração online do código.
Modo de operação debugger Kernel-Mode
Utilizado em programas que possuem chamadas ao sistema operacional ou bibliotecas dinâmicas ou dispositivos de hardware;
Permite controle ilimitado sobre o binário analisado, permitindo controle sobre todo o comportamento do SO;
Risco de desestabilizar o SO.
Ferramenta debugger SoftICE
Atua no Kernel Mode;
Recomendado para desenvolvedores de Drivers Windows;
Diferente das outras ferramentas que atuam em modo kernel, possibilita fazer inspeção no SO local.
Virtualização para debuggers
Debuggers de kernel mode possibilitam a interrupção do SO de forma simples, a virtualização é recomendade para manter o sistema isolado, permitir simulações de hardwares diversos e permitir recuperação em caso de falha.
Decompiladores
Objetivam produzir um código tão alto nível quanto o cód. fonte original;
Processo de compilação vai depender da tecnologia e da arquitetura utilizada.
Exemplo de decompiladores
IA-32:
Boomerang
Andromeda
DCC.
Java:
JAD.