
A extensão open-source da equipe FLARE para adicionar scripting em Python 3 ao Ghidra.
O Ghidrathon é uma extensão do Ghidra que adiciona recursos de script em Python 3 ao Ghidra. Por quê? O Ghidra oferece suporte nativo a scripts em Java e Jython. Infelizmente, muitas ferramentas de análise de código aberto, como capa, Unicorn Engine, angr, etc., são escritas em Python 3, o que dificulta e, em alguns casos, impossibilita o uso dessas ferramentas no Ghidra. Além disso, a comunidade de segurança lançou vários plugins excelentes para outros frameworks de SRE, como IDA Pro e Binary Ninja, mas, novamente, como muitos desses plugins usam Python 3, é difícil portá-los para o Ghidra. O Ghidrathon ajuda você a usar ferramentas Python 3 existentes e desenvolver novas no Ghidra, além de permitir criar scripts no Ghidra usando Python moderno, de forma integrada à interface do Ghidra. Ele substitui a extensão Python 2.7 existente, implementada via Jython. Isso inclui a janela do interpretador interativo, a integração com o Ghidra Script Manager e a execução de scripts no modo headless do Ghidra.

Consulte nosso exemplo de script Python 3 para o Ghidra aqui para ver mais de perto como escrever scripts Python 3 para o Ghidra.
Confira:
Use as seguintes etapas para instalar o Ghidrathon no seu ambiente Ghidra:
$ python -m pip install -r requirements.txt
$ python ghidrathon_configure.py <absolute_path_to_ghidra_install_dir>
Nota: por padrão, o ghidrathon_configure.py tenta gravar um arquivo chamado ghidrathon.save em <absolute_path_to_ghidra_install_dir>. Você pode especificar o caminho onde esse arquivo será gravado definindo a variável de ambiente GHIDRATHON_SAVE_PATH antes de executar o ghidrathon_configure.py e o Ghidra:
$ export GHIDRATHON_SAVE_PATH="/path/to/custom/dir" # Linux/MacOS
$ set GHIDRATHON_SAVE_PATH="C:\path\to\custom\dir" # Windows
Nota: você pode ser solicitado a definir uma variável de ambiente chamada JAVA_HOME. Ela deve referenciar o caminho absoluto do JDK que você configurou para a sua instalação do Ghidra.
.zip) no Ghidra:
File > Install Extensions...+.zip)OkInstall Anyway se a janela Extension Version Mismatch for exibida.zip) para <absolute_path_to_ghidra_install_dir>\Ghidra\ExtensionsVocê pode alternar o Ghidrathon para usar um interpretador Python diferente executando a etapa 2 usando o novo interpretador Python.
Você pode usar um ambiente virtual Python com o Ghidrathon executando a etapa 2 a partir do ambiente virtual. Para alternar para um ambiente virtual diferente, basta executar a etapa 2 a partir do novo ambiente virtual.
A janela do interpretador fornece acesso interativo ao seu interpretador Python 3. Clique em "Window" e selecione "Ghidrathon" para abrir a janela do interpretador.

O Ghidrathon integra-se diretamente ao Ghidra Script Manager, permitindo criar, editar e executar scripts Python 3 no Ghidra. Clique em "Create New Script" e selecione "Python 3" para criar um novo script Python 3. Clique em "Run Script" ou "Run Editors's Script" para executar seu script Python 3 e verifique a janela do Ghidra Console para ver a saída do script.

O Ghidrathon ajuda você a executar scripts Python 3 no modo headless do Ghidra. Execute o script analyzeHeadless localizado na pasta de instalação do seu Ghidra, especifique seu script Python 3 e verifique a janela do console para ver a saída do script.
$ analyzeHeadless C:\Users\wampus example -process example.o -postScript ghidrathon_example.py
[...]
INFO SCRIPT: C:\Users\wampus\.ghidra\.ghidra_10.0.3_PUBLIC\Extensions\Ghidrathon-master\ghidra_scripts\ghidrathon_example.py (HeadlessAnalyzer)
Function _init @ 0x101000: 3 blocks, 8 instructions
Function FUN_00101020 @ 0x101020: 1 blocks, 2 instructions
Function __cxa_finalize @ 0x101040: 1 blocks, 2 instructions
Function printf @ 0x101050: 1 blocks, 2 instructions
Function _start @ 0x101060: 1 blocks, 13 instructions
Function deregister_tm_clones @ 0x101090: 4 blocks, 9 instructions
Function register_tm_clones @ 0x1010c0: 4 blocks, 14 instructions
Function __do_global_dtors_aux @ 0x101100: 5 blocks, 14 instructions
[...]
INFO REPORT: Post-analysis succeeded for file: /example.o (HeadlessAnalyzer)
INFO REPORT: Save succeeded for processed file: /example.o (HeadlessAnalyzer)
Para obter mais informações sobre como executar o Ghidra no modo headless, consulte <absolute_path_to_ghidra_install_dir>/support/analyzeHeadlessREADME.html.
Uma das nossas maiores motivações ao desenvolver o Ghidrathon foi permitir o uso de módulos Python 3 de terceiros no Ghidra. Você pode instalar um módulo e começar a usá-lo dentro do Ghidra exatamente como faria em uma configuração Python típica. Isso também se aplica a módulos que você já instalou anteriormente. Por exemplo, podemos instalar e usar o Unicorn para emular código ARM dentro do Ghidra.

O Ghidrathon oferece uma experiência de script que espelha de perto as extensões Java e Jython do Ghidra, incluindo a disponibilização das variáveis de instância de estado do GhidraScript, ex. currentProgram, e dos métodos FlatProgramAPI, ex. findBytes
no escopo builtins do Python. Isso significa que todos os módulos Python importados pelo seu código têm acesso a essas variáveis e métodos. O Ghidrathon diverge ligeiramente das extensões Java e Jython do Ghidra ao expor as variáveis de estado do GhidraScript
como chamadas de função Python em vez de acessos diretos, ex. seu código Python 3 deve acessar currentProgram usando a chamada de função currentProgram(). Essa pequena mudança garante que seu código Python 3 receba as variáveis de estado corretas do GhidraScript durante a execução. Consulte nosso exemplo de script Python 3 para o Ghidra aqui para ver mais de perto como escrever scripts Python 3 para o Ghidra.
O Ghidrathon conecta sua instalação Python local ao Ghidra usando o projeto de código aberto Jep. Essencialmente, seu interpretador Python local é executado dentro do Ghidra com acesso a todos os seus pacotes Python e à API de script padrão do Ghidra. O Ghidrathon também funciona com ambientes virtuais Python, ajudando você a criar, isolar e gerenciar pacotes que talvez queira instalar apenas para uso no Ghidra. Como o Ghidrathon usa sua instalação Python local, você tem controle sobre a versão do Python e o ambiente executados dentro do Ghidra.
Para obter mais informações sobre como o Jep incorpora Python em Java, consulte a documentação aqui.
O Ghidrathon usa a biblioteca de código aberto Jep, que usa a Java Native Interface (JNI) para incorporar Python na JVM. Os desenvolvedores do Ghidra desaconselham o uso de JNI no Ghidra por motivos discutidos aqui.
| Ferramenta | Versão | Fonte |
|---|
| Ghidrathon | >= 4.0.0 | https://github.com/mandiant/Ghidrathon/releases |
| Python | >= 3.8.0 | https://www.python.org/downloads |
| Jep | == 4.2.0 | https://pypi.org/project/jep |
| Ghidra | >= 10.3.2 | https://github.com/NationalSecurityAgency/ghidra/releases |
| Java | >= 17.0.0 | https://adoptium.net/temurin/releases |