
Intégration profonde du décompilateur Ghidra et du désassembleur Sleigh pour rizin
Ceci est une intégration du décompilateur Ghidra et du désassembleur Sleigh pour Rizin. Il est basé uniquement sur la partie décompilateur de Ghidra, qui est écrite entièrement en C++, donc Ghidra lui-même n'est pas du tout nécessaire et le plugin peut être construit de manière autonome. Ce projet a été présenté, initialement pour radare2, à la r2con 2019 dans le cadre de la conférence sur 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
Les variables de configuration suivantes (pour la commande e) peuvent être utilisées pour ajuster le comportement 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
Ici, ghidra.sleighhome doit pointer vers un répertoire contenant les fichiers *.sla, *.lspec, ... pour les architectures qui devraient être supportées par le décompilateur. Ceci est cependant configuré automatiquement lors de l'utilisation du paquet rz-pm ou de l'installation comme indiqué ci-dessous.
Tout d'abord, assurez-vous que le sous-module contenu dans ce dépôt est récupéré et à jour :
git submodule init
git submodule update
Ensuite, le plugin Rizin peut être construit et installé comme suit :
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Ici, définissez CMAKE_INSTALL_PREFIX sur un emplacement d'où Rizin peut charger le plugin. L'étape d'installation est nécessaire pour le fonctionnement du plugin car elle inclut l'installation des fichiers Sleigh nécessaires. Si vous utilisez Rizin depuis git, définissez également CMAKE_PREFIX_PATH sur le répertoire d'installation de Rizin.
Pour construire également le plugin Cutter, vous devez avoir Cutter installé depuis les sources sous un certain préfixe, qui peut être spécifié optionnellement avec -DCMAKE_PREFIX_PATH=<path>, puis passez -DBUILD_CUTTER_PLUGIN=ON à cmake pour activer le 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
Par défaut, le plugin Cutter est installé dans un chemin choisi automatiquement dans le répertoire personnel de l'utilisateur courant. Ce chemin peut être remplacé avec -DCUTTER_INSTALL_PLUGDIR.
Rizin a une API C en évolution rapide, il est donc nécessaire d'être explicite sur les versions de rz-ghidra compatibles avec les versions de Rizin :
Lors de l'utilisation de Rizin et rz-ghidra depuis git :
dev de rz-ghidra suit la branche dev de Rizin.stable de rz-ghidra suit la branche stable de Rizin.Concernant les versions, rz-ghidra est généralement publié simultanément avec Rizin et utilise souvent les mêmes numéros de version (mais ce n'est pas garanti, ne vous fiez pas à ces numéros !). De plus, à chaque version de Rizin, un tag comme rz-0.1.2 est créé sur rz-ghidra, qui pointe exactement sur une version de rz-ghidra et indique que cette version est compatible avec la version spécifiée de Rizin. Ces tags peuvent être utilisés par les mainteneurs de distributions pour savoir comment configurer les dépendances.
Veuillez noter que ce plugin est disponible sous LGPLv3, ce qui est plus strict que la licence de Ghidra !
Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la GNU Lesser General Public License telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, soit (à votre choix) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la GNU Lesser General Public License pour plus de détails.
Vous devriez avoir reçu une copie de la GNU Lesser General Public License avec ce programme. Sinon, consultez https://www.gnu.org/licenses/.