Esta é uma integração do decompilador de Ghidra e desmontador de trenó para Rizin. Ele é baseado exclusivamente na parte do decompilador de Ghidra, que é escrita inteiramente em C ++, portanto, a própria Ghidra não é necessária e o plug-in pode ser construído independente. Este projeto foi apresentado, inicialmente para Radue2, no R2Con 2019 como parte do Cutter Talk: 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
Os seguintes vars de configuração (para o comando e ) podem ser usados para ajustar o comportamento de RZ-Ghidra:
ghidra.cmt.cpp: C++ comment style
ghidra.cmt.indent: Comment indent
ghidra.indent: Indent increment
ghidra.lang: Custom Sleigh ID to override auto-detection (e.g. x86:LE:32:default)
ghidra.linelen: Max line length
ghidra.nl.brace: Newline before opening '{'
ghidra.nl.else: Newline before else
ghidra.sleighhome: SLEIGHHOME
Aqui, ghidra.sleighhome deve apontar para um diretório que contém os arquivos *.sla , *.lspec , ... No entanto, isso é configurado automaticamente ao usar o pacote RZ-PM ou instalar como mostrado abaixo.
Primeiro, verifique se o submódulo contido nesse repositório está buscado e atualizado:
git submodule init
git submodule update
Em seguida, o plug -in Rizin pode ser construído e instalado da seguinte forma:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Aqui, defina o CMAKE_INSTALL_PREFIX como um local de onde o Rizin pode carregar o plug -in. A etapa de instalação é necessária para que o plug -in funcione porque inclui a instalação dos arquivos de trenó necessários. Se você estiver usando o Rizin do Git, defina também CMAKE_PREFIX_PATH no diretório de instalação do Rizin.
Para construir também o plug -in Cutter, você deve ter o Cutter instalado a partir da fonte sob algum prefixo, que pode ser especificado opcionalmente com -DCMAKE_PREFIX_PATH=<path> , depois passa -DBUILD_CUTTER_PLUGIN=ON para clake 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 plug -in Cutter é instalado em um caminho escolhido automaticamente no diretório inicial do usuário atual. Esse caminho pode ser superestimado com -DCUTTER_INSTALL_PLUGDIR .
Rizin tem uma API C em evolução, por isso é necessário ser explícito sobre quais versões de RZ-Ghidra são compatíveis com as versões de Rizin:
Ao usar Rizin e RZ-Ghidra do Git:
dev segue o rizin ramo dev .stable de RZ-Ghidra segue o estábulo de Rizin Branch stable . Em relação aos lançamentos, o RZ-Ghidra é geralmente lançado simultaneamente com Rizin e geralmente usa os mesmos números de versão (mas não garantidos, não depende desses números!). Além disso, junto com cada liberação de Rizin, uma tag como rz-0.1.2 é criada no RZ-Ghidra, que aponta exatamente para uma versão RZ-Ghidra e indica que essa versão é compatível com a versão Rizin especificada. Essas tags podem ser usadas pelos mantenedores de distribuição para procurar como configurar dependências.
Observe que este plugin está disponível no LGPLV3 , que é mais rigoroso que a licença de Ghidra!
Este programa é um software livre: você pode redistribuí -lo e/ou modificá -lo nos termos da licença pública geral GNU Lesser, conforme publicado pela Free Software Foundation, versão 3 da licença ou (por sua opção) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas sem garantia; sem a garantia implícita de comercialização ou aptidão para uma finalidade específica. Veja a licença pública geral menor da GNU para obter mais detalhes.
Você deveria ter recebido uma cópia da licença pública geral da GNU, juntamente com este programa. Caso contrário, consulte https://www.gnu.org/license/.