
Extensión de Ghidra para ingeniería inversa de firmware de PC, que proporciona cargadores para ROMs de opción PCI, Intel Flash Descriptor, coreboot CBFS y volúmenes de firmware UEFI, además de scripts auxiliares UEFI para recuperación de tipos e identificación de GUID.
Vários módulos para Ghidra para auxiliar na engenharia reversa de firmware de PC. Este projeto foi aceito como um projeto coreboot para o GSoC 2019.
JDK 21 (ou mais recente) e Ghidra 12.0 (ou mais recente) são necessários.
O sistema de compilação padrão Gradle do Ghidra é usado. Defina a variável de ambiente
GHIDRA_INSTALL_DIR antes de compilar, ou defina-a como uma propriedade do Gradle (útil
para compilar em uma IDE):
$ export GHIDRA_INSTALL_DIR="/caminho/para/ghidra"
$ ./gradlew
echo GHIDRA_INSTALL_DIR=/caminho/para/ghidra > gradle.properties
[!NOTE]
GHIDRA_INSTALL_DIRdeve apontar para o diretório que contémsupport/buildExtension.gradle. Por exemplo, usuários do pacote Flathub devem usar/var/lib/flatpak/app/org.ghidra_sre.Ghidra/current/active/files/lib/ghidra.
O ZIP do módulo será gerado em dist/. Use File > Install Extensions e
selecione o sinal de mais verde para navegar até a extensão. Reinicie o Ghidra quando solicitado.
Para funcionamento adequado, o plugin deve ser compilado com o mesmo JRE usado
pela sua instalação do Ghidra. Se você tiver vários ambientes de execução Java
instalados, selecione o JRE correto definindo a variável de ambiente JAVA_HOME
antes de compilar.
Adicione uma ROM de opção PCI a um projeto Ghidra. ROMs de opção x86 legado podem ser carregadas diretamente para análise. Certifique-se de que o formato binário esteja definido como x86 PCI Option ROM e importe o binário.
ROMs de opção UEFI ou ROMs de opção que contenham mais de uma imagem devem ser importadas usando o carregador de sistema de arquivos. Quando solicitado a selecionar um modo de importação, selecione File system. As imagens contidas na ROM de opção serão exibidas e podem ser importadas para análise. Imagens x86 legado serão tratadas pelo carregador x86 PCI Option ROM, e imagens UEFI serão tratadas pelo carregador PE32 (compactação é suportada). Informações para cada imagem podem ser exibidas selecionando Get Info no menu de clique direito.
Adicione uma imagem de firmware suportada a um projeto Ghidra. O carregador de imagem de firmware suporta imagens Intel com um Flash Descriptor, imagens coreboot com um layout FMAP/CBFS e volumes de firmware UEFI. O modo de importação File system pode ser usado para visualizar arquivos incorporados dentro da imagem de firmware especificada.
Observe que algumas imagens de firmware UEFI podem armazenar volumes de firmware aninhados dentro de
arquivos freeform/raw (ou seções FFS freeform/raw). Tais arquivos podem ser importados
como volumes de firmware selecionando Open File System no menu de clique direito
para o arquivo freeform/raw especificado. Se nenhum volume de firmware aninhado for encontrado, uma
mensagem de erro será exibida (No file system provider for...).
O script auxiliar está incluído no diretório ghidra_scripts do plugin, que deve ser adicionado automaticamente à lista de diretórios de scripts no Ghidra.
Execute o script auxiliar UEFI selecionando UEFIHelper.java na janela Script Manager (acessada em Window -> Script Manager).
Para modificar a biblioteca de tipos de dados UEFI, modifique o modelo PRF em
data/gen_prf.sh conforme necessário e gere novos arquivos PRF. Abra o arquivo PRF
gerado em File -> Parse C Source. Compile a biblioteca de tipos de dados atualizada
selecionando Parse to File.... Sobrescreva as bibliotecas de tipos de dados originais
em data e recompile o plugin.
Estes são alguns projetos interessantes relacionados à engenharia reversa de UEFI:
Apache 2.0, com algumas exceções:
src/efidecompress/c/efidecompress.c: BSDsrc/efidecompress/c/efidecompress.c é uma versão levemente modificada de
Decompress.c do uefi-firmware-parser (que por sua vez é derivado de
o original no EDK2 BaseTools).
O carregador de FS IFD em src/main/java/firmware/ifd usou o analisador de
UEFITool como referência.
O banco de dados de GUIDs em data/guids.csv é retirado de UEFITool.
As bibliotecas de tipos de dados UEFI em data/uefi_*.gdt foram geradas com
data/gen_prf.sh, que é parcialmente baseado na definição do analisador UEFI
de uma solicitação de pull do Ghidra por wrffrz. Essas bibliotecas de tipos de dados usam
cabeçalhos do EDK2 MdePkg.
GhidraVitaLoader por xerpi foi usado como referência para algumas partes do script auxiliar UEFI.