HN Open: extensão do Ghidra para exportar partes de um programa como arquivo-objeto
(github.com/boricj)Extensão exportadora de arquivos-objeto para Ghidra
Esta extensão do Ghidra permite exportar partes de um programa como arquivos-objeto. Esses arquivos-objeto contêm metadados válidos (símbolos, tabelas de relocação etc.) e podem ser reutilizados diretamente por uma toolchain.
Casos de uso
- Patching binário avançado: combinar o original e as partes modificadas usando o linker em vez de fazer isso manualmente
- Portabilidade de software: separar do programa o código independente de sistema e substituir o restante
- Conversão de formato de arquivo: converter um programa ou arquivo-objeto para outro formato de arquivo
- Criação de bibliotecas: extrair partes de um programa para reutilização em outro contexto
- Projetos de decompilação: dividir um programa em vários arquivos-objeto e reimplementá-lo
Arquiteturas de conjunto de instruções e formatos de arquivo-objeto compatíveis
- x86: COFF (compatível), ELF (compatível)
- MIPS: COFF (não compatível), ELF (compatível)
Build (CLI)
- clonar este repositório
- definir a variável de ambiente
GHIDRA_INSTALL_DIRpara o diretório de instalação do Ghidra - executar o comando
gradle buildExtension - o arquivo da extensão do Ghidra será gerado no diretório
dist/
Instalação
- baixar a extensão na página de releases ou fazer o build localmente
- instalar a extensão em uma instância do Ghidra via
File > Install Extensions… - na janela CodeBrowser, ativar o plugin
RelocationTableSynthesizedPluginemFile > Configure
Como usar
- selecionar um conjunto de endereços na visualização Listing
- executar o analisador
Relocation table synthesizer(pode ser usado no modo one-shot) - chamar o exportador de arquivos-objeto relocáveis em
File > Export Program… - verificar a tabela de relocação reconstruída em
Window > Relocation table(synthesized)
- ⚠️ O analisador Relocation table synthesizer exige um banco de dados do Ghidra completamente preenchido (símbolos, tipos de dados e referências declarados com precisão). Informações incorretas ou ausentes podem causar relocação incorreta ou não detectada durante a análise
- ⚠️ O exportador de arquivos-objeto depende dos resultados do analisador Relocation table synthesizer. Antes de exportar um arquivo-objeto, execute esse analisador para garantir que o conteúdo da tabela de relocação esteja atualizado
Como funciona
Um arquivo-objeto é composto por três partes:
- bytes de seções relocáveis
- tabela de símbolos
- tabela de relocação
Quando o linker gera um executável a partir de vários arquivos-objeto:
- posiciona as seções na memória
- calcula os endereços dos símbolos no espaço de endereçamento virtual
- aplica as relocações aos bytes das seções com base nos endereços finais dos símbolos
Normalmente, após esse processo, a tabela de relocação é descartada e, a menos que os símbolos de depuração sejam mantidos, a tabela de símbolos também é descartada. No entanto, com uma análise cuidadosa, esses dados podem ser recriados, permitindo delink do programa de volta para arquivos-objeto.
Resumo do GN⁺
- Esta extensão do Ghidra permite exportar partes de um programa como arquivos-objeto.
- Há vários casos de uso, como patching binário avançado, portabilidade de software e conversão de formato de arquivo.
- É necessário um banco de dados preciso, e é importante exportar o arquivo-objeto após executar o analisador.
- Um projeto com funcionalidade semelhante inclui decompiladores como o IDA Pro.
Ainda não há comentários.