
Integração profunda do decompilador Ghidra e do desmontador Sleigh para o rizin
Esta é uma integração do descompilador Ghidra e do desmontador Sleigh para Rizin. Baseia-se exclusivamente na parte do descompilador do Ghidra, que é escrita inteiramente em C++, portanto o próprio Ghidra não é necessário e o plugin pode ser compilado de forma autossuficiente. Este projeto foi apresentado, inicialmente para radare2, no r2con 2019 como parte da palestra do Cutter: https://youtu.be/eHtMiezr7l8?t=950
Usage: pdg # Native Ghidra decompiler plugin
| pdg # Decompile current function with the Ghidra decompiler
| pdgd # Dump the debug XML Dump
| pdgx # Dump the XML of the current decompiled function
| pdgj # Dump the current decompiled function as JSON
| pdgo # Decompile current function side by side with offsets
| pdgs # Display loaded Sleigh Languages
| pdg* # Decompiled code is returned to rizin as comment
As seguintes variáveis de configuração (para o comando e) podem ser usadas para ajustar o comportamento do rz-ghidra:
ghidra.cmt.cpp: Estilo de comentário C++
ghidra.cmt.indent: Indentação de comentário
ghidra.indent: Incremento de indentação
ghidra.lang: ID Sleigh personalizado para substituir a deteção automática (ex.: x86:LE:32:default)
ghidra.linelen: Comprimento máximo da linha
ghidra.nl.brace: Nova linha antes de abrir '{'
ghidra.nl.else: Nova linha antes de else
ghidra.sleighhome: SLEIGHHOME
Aqui, ghidra.sleighhome deve apontar para um diretório contendo os arquivos *.sla, *.lspec, ... para as arquiteturas que devem ser suportadas pelo descompilador. No entanto, isso é configurado automaticamente ao usar o pacote rz-pm ou ao instalar conforme mostrado abaixo.
Primeiro, certifique-se de que o submódulo contido neste repositório foi obtido e está atualizado:
git submodule init
git submodule update
Em seguida, o plugin do Rizin pode ser compilado e instalado da seguinte forma:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Aqui, defina CMAKE_INSTALL_PREFIX para um local de onde o Rizin possa carregar o plugin. A etapa de instalação é necessária para que o plugin funcione, pois inclui a instalação dos arquivos Sleigh necessários. Se você estiver usando o Rizin do git, defina também CMAKE_PREFIX_PATH para o diretório de instalação do Rizin.
Para também compilar o plugin do Cutter, você deve ter o Cutter instalado a partir do código fonte sob algum prefixo, que pode ser opcionalmente especificado com -DCMAKE_PREFIX_PATH=<caminho>, e então passar -DBUILD_CUTTER_PLUGIN=ON para o cmake para ativar o plugin:
/my/path/rz-ghidra> mkdir build && cd build
/my/path/rz-ghidra/build> cmake -DBUILD_CUTTER_PLUGIN=ON -DCMAKE_PREFIX_PATH=/path/to/cutter/prefix -DCMAKE_INSTALL_PREFIX=~/.local ..
/my/path/rz-ghidra/build> make && make install
Por padrão, o plugin do Cutter é instalado em um caminho escolhido automaticamente no diretório home do usuário atual. Esse caminho pode ser substituído com -DCUTTER_INSTALL_PLUGDIR.
O Rizin possui uma API C que evolui rapidamente, por isso é necessário ser explícito sobre quais versões do rz-ghidra são compatíveis com quais versões do Rizin:
Ao usar Rizin e rz-ghidra do git:
dev do rz-ghidra acompanha o branch dev do Rizin.stable do rz-ghidra acompanha o branch stable do Rizin.Em relação aos lançamentos, o rz-ghidra geralmente é lançado simultaneamente com o Rizin e muitas vezes usa os mesmos números de versão (mas não é garantido, não dependa desses números!). Além disso, junto com cada lançamento do Rizin, uma tag como rz-0.1.2 é criada no rz-ghidra, que aponta exatamente para um lançamento do rz-ghidra e indica que esse lançamento é compatível com a versão especificada do Rizin. Essas tags podem ser usadas por mantenedores de distribuições para consultar como configurar dependências.
Por favor, note que este plugin está disponível sob a LGPLv3, que é mais restritiva que a licença do Ghidra!
Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da GNU Lesser General Public License conforme publicada pela Free Software Foundation, seja a versão 3 da Licença, ou (a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a GNU Lesser General Public License para mais detalhes.
Você deve ter recebido uma cópia da GNU Lesser General Public License junto com este programa. Se não, veja https://www.gnu.org/licenses/.