
Integrazione profonda del decompilatore ghidra e del disassembler sleigh per rizin
Questa è un'integrazione del decompilatore Ghidra e del disassemblatore Sleigh per Rizin. Si basa esclusivamente sulla parte del decompilatore di Ghidra, che è scritta interamente in C++, quindi Ghidra stesso non è affatto necessario e il plugin può essere compilato autonomamente. Questo progetto è stato presentato, inizialmente per radare2, alla r2con 2019 come parte del talk su 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
Le seguenti variabili di configurazione (per il comando e) possono essere utilizzate per regolare il comportamento di 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
Qui, ghidra.sleighhome deve puntare a una directory contenente i file *.sla, *.lspec, ... per le architetture che devono essere supportate dal decompilatore. Questo viene comunque configurato automaticamente quando si utilizza il pacchetto rz-pm o installando come mostrato di seguito.
Per prima cosa, assicurati che il sottomodulo contenuto in questo repository sia stato recuperato e sia aggiornato:
git submodule init
git submodule update
Quindi, il plugin per Rizin può essere compilato e installato come segue:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Qui, imposta CMAKE_INSTALL_PREFIX su una posizione da cui Rizin possa caricare il plugin. Il passaggio di installazione è necessario affinché il plugin funzioni perché include l'installazione dei file Sleigh necessari. Se stai usando Rizin da git, imposta anche CMAKE_PREFIX_PATH sulla directory di installazione di Rizin.
Per compilare anche il plugin per Cutter, devi avere Cutter installato da sorgente sotto un qualche prefisso, che può essere opzionalmente specificato con -DCMAKE_PREFIX_PATH=<path>, quindi passa -DBUILD_CUTTER_PLUGIN=ON a cmake per abilitare il 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
Per impostazione predefinita, il plugin per Cutter viene installato in un percorso scelto automaticamente nella home directory dell'utente corrente. Questo percorso può essere sovrascritto con -DCUTTER_INSTALL_PLUGDIR.
Rizin ha un'API C in rapida evoluzione, quindi è necessario essere espliciti su quali versioni di rz-ghidra siano compatibili con quali versioni di Rizin:
dev di rz-ghidra segue il branch dev di Rizin.stable di rz-ghidra segue il branch stable di Rizin.Per quanto riguarda i rilasci, rz-ghidra viene generalmente rilasciato contemporaneamente a Rizin e spesso utilizza gli stessi numeri di versione (ma non è garantito, non dipendere da questi numeri!). Inoltre, insieme a ogni rilascio di Rizin, su rz-ghidra viene creato un tag come rz-0.1.2, che punta esattamente a un rilascio di rz-ghidra e indica che quel rilascio è compatibile con la specifica versione di Rizin. Questi tag possono essere utilizzati dai manutentori delle distribuzioni per cercare come impostare le dipendenze.
Nota che questo plugin è disponibile sotto LGPLv3, che è più restrittiva della licenza di Ghidra!
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program. If not, see https://www.gnu.org/licenses/.