1 pontos por GN⁺ 2024-08-24 | Ainda não há comentários. | Compartilhar no WhatsApp

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_DIR para 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 RelocationTableSynthesizedPlugin em File > Configure

Como usar

  1. selecionar um conjunto de endereços na visualização Listing
  2. executar o analisador Relocation table synthesizer (pode ser usado no modo one-shot)
  3. chamar o exportador de arquivos-objeto relocáveis em File > Export Program…
  4. 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.

Ainda não há comentários.