Ghidra
Ghidra é um decompilador open source elaborado pela NSA. Um compilador pega um código qualquer, como C, e converte isso para códígo de maquina. Um decompilador tenta fazer o oposto. Ele pega código de máquina e gera código que se aproxima do código-fonte original. Porém, esse processo de decompilação não é como uma função 1:1, e o código dado nem sempre é 100% correto. Mesmo assim, é muito eficiente e realmente reduz muito o tempo gasto em desafios de engenharia reversa.
Além do Ghidra, temos opções como IDA, porém o Ghidra é de graça e open-source.
Requer: Java Development Kit (JDK) e Python3.
Baixando (Linux)
- Baixe o JDK de acordo com a arquitetura do seu PC (x64 ou x82)
- Descomprima o arquivo com
tar -xyf file.tar.gz - Baixe o zip do GHIDRA e dê
unzip file - Digite o comando
vi ~/.bashrc- No fim do arquivo, adicione o diretório bin de JDK para a variável PATH:export PATH=<path_JDK>/bin:$PATH. Ache o caminho com para JDK com o comandopwd. - Digite
java --versionpara testar. - Na pasta do ghidra, rode o arquivo ghidraRun
Baixando (Windows)
- Baixe o JDK de acordo com a arquitetura do seu PC (x64 ou x82)
- Execute o instalador
- Baixe o zip do GHIDRA e descomprima
- Crie um atalho para o arquivo ghidraRun na sua área de trabalho
Usando
- Crie um projeto em New Project
- File > Import File (ou drag and drop file)
- Importe o binário que você quer analisar. Ao importar, clicar em Ok
- Em Tool Chest, drag and drop file. Ou apenas dê um double-click no seu arquivo.
- Se pedir para analisar, clique em Yes. Selecione opções desejadas e clique em analyze (Se desejar, apenas clique em analyze, pois as opções padrão já são de bom tamanho)
Interface
- Em cima à esquerda, há a Program Tree. Mostra a estrutura de programas (que foram separados de acordo com os blocos do arquivo compilado original).
- À esquerda, há a symbol tree. Permite encontrar símbolos na navegação.
- Embaixo à esquerda, há o Data Type Manager. Permite achar, aplicar e criar tipos de dados.
- Aperte 'G' para navegar para um endereço ou palavra.
- No meio, mostra a visualização em assembly do programa. Selecione linhas, e elas serão mostradas à direita, no C decompiller. Em qualquer lugar do Assembly que você clique, irá ser mostrado o mesmo código em C à direita (próximo do código original).
Utilidades gerais
- Clique em uma variável e aperte L para renomeá-la (as variáveis do código fonte, ao serem compiladas, perdem seus nomes. Mas você pode dar nome às variáveis que está analisando no código)
- Clique em uma variável e aperte Ctrl+L para renomear seu tipo (o decompilador pode interpretar um
charcomo umint, o que é até bem comum)