Vários módulos para Ghidra auxiliam na engenharia reversa do firmware do PC. Isso foi aceito como um projeto Coreboot para o GSOC 2019.
JDK 11 (ou mais recente) e Ghidra 10.1 (ou mais recentes) são necessários.
É usado o sistema de construção gradle padrão de Ghidra. Defina a variável de ambiente GHIDRA_INSTALL_DIR antes de construir ou defina -a como uma propriedade Gradle (útil para construir em um IDE):
$ export GHIDRA_INSTALL_DIR= " /path/to/ghidra "
$ ./gradlew echo GHIDRA_INSTALL_DIR=/path/to/ghidra > gradle.properties O zip do módulo será emitido para dist/ . Use Arquivo> Instale extensões e selecione o Green Plus para navegar na extensão. Reinicie Ghidra quando solicitado.
Para funcionalidade adequada, o plug -in deve ser construído com o mesmo JRE usado pela sua instalação Ghidra. Se você tiver vários ambientes de tempo de execução Java instalados, selecione o JRE correto configurando a variável de ambiente JAVA_HOME antes de criar.
Adicione uma opção PCI ROM a um projeto Ghidra. As ROMs de opções x86 legadas podem ser carregadas diretamente para análise. Certifique -se de que o formato binário esteja definido como ROM da opção x86 PCI e importe o binário.
ROMs da opção UEFI ou ROMs de opções que contêm mais de uma imagem devem ser importadas usando o carregador do sistema de arquivos. Quando solicitado a selecionar um modo de importação, selecione o sistema de arquivos . As imagens contidas na ROM da opção serão exibidas e podem ser importadas para análise. As imagens Legacy X86 serão tratadas com o carregador de ROM da opção X86 PCI e as imagens UEFI serão tratadas pelo carregador PE32 (a compactação é suportada). As informações para cada imagem podem ser exibidas selecionando informações GET no menu Clique com o botão direito do mouse.
Adicione uma imagem de firmware suportada a um projeto Ghidra. O carregador de imagem do firmware suporta imagens Intel com um descritor flash, imagens de coreboot com um layout FMAP/CBFS e volumes de firmware UEFI. O modo de importação do sistema de arquivos pode ser usado para visualizar arquivos incorporados na imagem de firmware especificada.
Observe que algumas imagens de firmware da UEFI podem armazenar volumes de firmware aninhados em arquivos Freeform/Raw (ou seções de Freeform/Raw FFS). Esses arquivos podem ser importados como volumes de firmware selecionando o sistema de arquivos aberto no menu Clique com o botão direito do mouse para o arquivo Freeform/Raw 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 script em Ghidra.
Execute o script auxiliar da UEFI selecionando uefihelper.java na janela do gerenciador de scripts (acessado na janela -> gerenciador de script ).
Para modificar a biblioteca do tipo de dados UEFI, modifique o modelo PRF em data/gen_prf.sh conforme necessário e gerar novos arquivos PRF. Abra o arquivo PRF gerado no arquivo -> Parse C Fonte . Crie a biblioteca de tipos de dados atualizada selecionando o Parse para arquivar .... Substituir as bibliotecas originais do tipo de dados em data e reconstruir o plug -in.
Estes são alguns projetos interessantes relacionados à reversão da UEFI:
Apache 2.0, com algumas exceções:
src/efidecompress/c/efidecompress.c : bsd src/efidecompress/c/efidecompress.c é uma versão levemente modificada do descompressor.c do uefi-firmware-parser (que por si só é derivado do original no BasEtools EDK2).
lib/xz-1.8.jar é retirado do projeto XZ para Java.
O carregador IFD FS em src/main/java/firmware/ifd usou o analisador da Uefitool como referência.
O banco de dados GUID em data/guids.csv é retirado do UEFITOOL.
As bibliotecas de tipo de dados da 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 puxar ghidra da wrffrz. Essas bibliotecas de tipo de dados usam cabeçalhos do EDK2 MDEPKG.
Ghidravitaloader por Xerpi foi usado como referência para algumas partes do script auxiliar da UEFI.