这是将 Ghidra 反编译器和 Sleigh 反汇编器集成到 Rizin 的项目。 它完全基于 Ghidra 的反编译器部分,该部分完全用 C++ 编写,因此完全不需要 Ghidra 本身,该插件可以独立构建。 该项目最初是为 radare2 开发的,在 r2con 2019 的 Cutter 演讲中展示:https://youtu.be/eHtMiezr7l8?t=950
用法: pdg # 原生 Ghidra 反编译器插件
| pdg # 使用 Ghidra 反编译器反编译当前函数
| pdgd # 转储调试 XML
| pdgx # 转储当前反编译函数的 XML
| pdgj # 以 JSON 格式转储当前反编译函数
| pdgo # 并排显示偏移量反编译当前函数
| pdgs # 显示已加载的 Sleigh 语言
| pdg* # 将反编译后的代码作为注释返回给 rizin
以下配置变量(用于 e 命令)可用于调整 rz-ghidra 的行为:
ghidra.cmt.cpp: C++ 注释风格
ghidra.cmt.indent: 注释缩进
ghidra.indent: 缩进增量
ghidra.lang: 自定义 Sleigh ID 以覆盖自动检测(例如 x86:LE:32:default)
ghidra.linelen: 最大行长度
ghidra.nl.brace: 在 '{' 之前换行
ghidra.nl.else: 在 else 之前换行
ghidra.sleighhome: SLEIGHHOME
这里,ghidra.sleighhome 必须指向一个包含反编译器应支持的体系结构的 *.sla、*.lspec 等文件的目录。但是,当使用 rz-pm 包或按如下所示安装时,会自动设置。
首先,确保已获取此仓库中包含的子模块且为最新:
git submodule init
git submodule update
然后,可以按如下方式构建和安装 Rizin 插件:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
这里,将 CMAKE_INSTALL_PREFIX 设置为 Rizin 可以加载插件的位置。安装步骤对于插件工作是必要的,因为它包括安装必要的 Sleigh 文件。如果您从 git 使用 Rizin,还要将 CMAKE_PREFIX_PATH 设置为 Rizin 安装目录。
要同时构建 Cutter 插件,您必须从源代码安装 Cutter 到某个前缀下,可以通过 -DCMAKE_PREFIX_PATH=<path> 可选地指定该前缀,然后传递 -DBUILD_CUTTER_PLUGIN=ON 给 cmake 以启用插件:
/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
默认情况下,Cutter 插件安装在当前用户主目录中自动选择的路径中。此路径可以通过 -DCUTTER_INSTALL_PLUGDIR 覆盖。
Rizin 的 C API 发展迅速,因此有必要明确哪些版本的 rz-ghidra 与哪些版本的 Rizin 兼容:
当从 git 使用 Rizin 和 rz-ghidra 时:
dev 跟随 Rizin 分支 dev。stable 跟随 Rizin 分支 stable。关于版本发布,rz-ghidra 通常与 Rizin 同时发布,并且通常使用相同的版本号(但不保证,请不要依赖这些编号!)。此外,每次 Rizin 发布时,都会在 rz-ghidra 上创建一个类似 rz-0.1.2 的标签,该标签恰好指向一个 rz-ghidra 版本,表示该版本与指定的 Rizin 版本兼容。这些标签可供发行版维护者用来查找如何设置依赖关系。
请注意,此插件在 LGPLv3 下提供,这比 Ghidra 的许可证更为严格!
本程序是自由软件:您可以根据自由软件基金会发布的 GNU 较宽松通用公共许可证(GNU Lesser General Public License)的条款重新分发和/或修改它,即许可证的第 3 版或(根据您的选择)任何更高版本。
本程序分发的目的是希望它有用,但不提供任何保证;甚至没有对适销性或特定用途适用性的默示保证。有关详细信息,请参阅 GNU 较宽松通用公共许可证。
您应该已经随本程序收到了一份 GNU 较宽松通用公共许可证的副本。如果没有,请访问 https://www.gnu.org/licenses/。