CERT Kaiju 是一个为 Ghidra 开发的二进制分析工具集合。
该工具是 CERT Pharos 二进制分析框架 部分功能的 Ghidra/Java 实现,特别是函数哈希与恶意软件分析工具,但未来预计会扩展新的工具和能力。
由于这是一个新的尝试,该实现尚未完全达到基于 ROSE 的原始 C++ 实现的功能对等;然而,转向 Java 和 Ghidra 实际上启用了一些原始框架无法实现的新功能——特别是对非 x86 架构的更好支持。由于框架和工具正在进行重大重构,且转向 Java 和 Ghidra 所支持的能力与 C++ 实现不同,因此决定采用新品牌名称,以减少讨论不同工具和能力时实现之间的混淆。
我们近期计划同时维护原始 Pharos 框架和 Kaiju,因为两者都能提供独特的功能和能力。
注意:作为一个原型,评估此插件生成的函数哈希时可能会遇到许多问题。例如,与 Pharos 实现不同,Kaiju 的函数哈希模块会为非常小的函数(例如只有一条指令如 RET)创建哈希,导致更多意外碰撞。因此,此插件与 Pharos fn2hash 的分析结果可能存在差异。
预构建的 Kaiju 包 已提供。只需下载与您的 Ghidra 版本对应的 ZIP 文件,然后按照以下说明安装。建议通过 Ghidra 图形界面安装,但也可以手动解压到相应目录进行安装。
CERT Kaiju 需要以下运行时依赖项:
Z3 作为预构建包的一部分提供(已预编译),您也可以自行构建 Z3 或使用 Linux 发行版的软件包。
启动 Ghidra,在初始窗口中选择菜单:File > Install Extension。点击扩展窗口顶部的加号,在文件浏览器中导航并选择 .zip 文件,然后点击 OK。扩展将被安装,窗口中的扩展名称旁会标记一个复选框,表示已安装并准备就绪。
界面将提示您重启 Ghidra 以使用该扩展。重启后,Kaiju 的额外功能即可在交互界面或脚本中使用。
某些功能可能需要启用 Kaiju 插件。为此,打开 Code Browser,然后导航至菜单 File > Configure。在弹出的窗口中,点击 "CERT Kaiju" 类别图标下方的 Configure 链接。将弹出一个窗口,显示所有已公开发布的 Kaiju 插件。勾选您希望激活的插件,然后点击 OK。现在您就可以使用交互式插件功能了。
如果插件启用后未立即显示,可以在 Code Browser 的 Window 菜单中找到该插件。
未来工具的试验性 "alpha" 版本可以从 "Experimental" 类别中获取(如果您希望测试的话)。但这些插件显然属于实验性且不受支持的,不建议用于生产环境。不过,我们欢迎早期反馈!
像 Kaiju 这样的 Ghidra 扩展也可以手动安装:将扩展内容解压到 Ghidra 安装目录的相应位置。更多信息请参阅 Ghidra 安装指南。
您也可以直接从源代码构建 Kaiju 扩展。请参阅 Kaiju 源代码顶级目录中的 INSTALL.md 文件。
Kaiju 工具既可用于交互式图形方式,也可用于更适合批处理任务的 "无头" 模式。根据工具性质,某些工具可能仅适用于图形或仅适用于无头模式。
Kaiju 利用 Java Swing 和 Ghidra 的插件架构,在 Ghidra 中创建交互式图形界面(GUI)。
Kaiju 的大多数工具实际上是分析插件,当选择 "Auto Analysis" 选项时会自动运行(无论是在导入新的可执行文件进行反汇编时,还是直接在代码浏览器窗口中选择 Analysis > Auto Analyze...)。在 Auto Analyze 工具中,您会看到默认选中了几个 CERT 分析插件,但您可以根据需要启用/禁用它们。
然而,分析工具必须先运行,各种 GUI 工具才能正常工作。在某些边缘情况下,甚至建议运行两次 Auto Analysis,以确保生成所有元数据,从而创建正确的分区和反汇编信息,进而影响哈希结果。
分析器在 Ghidra 的分析阶段自动运行,包括:
GUI 工具包括:
Kaiju > GhiHorn 即可访问此工具。您也可以按 CTRL-G 启动插件。Window > CERT Kaiju Function Hash Viewer 即可开始使用此工具。将出现一个新窗口,显示哈希和其他数据的表格。窗口顶部的按钮可以刷新表格或导出数据到文件或 YARA 签名。该窗口也可以停靠到主 Ghidra CodeBrowser 中,以便与其他插件一起更轻松地使用。使用该工具时,可在 Ghidra 的 Help > Contents 菜单中找到更详细的使用文档。Kaiju > OOAnalyzer Importer 即可开始使用此工具。一个简单的对话框会要求您定位要导入的 JSON 文件。使用该工具时,可在 Ghidra 的 Help > Contents 菜单中找到更详细的使用文档。Ghidra 还支持 "无头" 模式,允许在某些情况下无需使用交互式 GUI 即可运行工具。因此,这些命令可用于脚本化和批量处理大量文件。
无头工具主要依赖 Ghidra 的 GhidraScript 功能。
无头工具包括:
包含了一个名为 kaijuRun 的简单 shell 启动脚本,用于在简单场景下运行这些无头命令,例如输出单个可执行文件中每个函数的函数哈希。假设设置了 GHIDRA_INSTALL_DIR 变量,可以如下对单个可执行文件运行启动脚本:
$GHIDRA_INSTALL_DIR/Ghidra/Extensions/kaiju/kaijuRun fn2hash example.exe
该命令会将结果输出到自动命名的文件 example.exe.Hashes.csv。
kaijuRun 脚本的基本帮助信息可通过运行以下命令获取:
$GHIDRA_INSTALL_DIR/Ghidra/Extensions/kaiju/kaijuRun --help
有关使用此模式及 kaijuRun 启动脚本的更多信息,请参阅仓库中的 docs/HeadlessKaiju.md 文件。
更全面的文档和帮助可通过以下两种格式之一获取。
请参阅 docs/ 目录,其中包含针对所有 Kaiju 工具和组件的 Markdown 格式文档和帮助。这些文档易于维护、编辑,甚至可以从命令行阅读。
或者,您也可以在 Ghidra 内置帮助系统中找到相同的文档。要访问这些帮助文档,请从 Ghidra 菜单转到 Help > Contents,然后在帮助窗口左侧的树状导航中选择 CERT Kaiju。
请注意,Ghidra 帮助文档与 docs/ 目录中的 Markdown 文件内容完全相同;得益于一个树内 gradle 插件,gradle 会自动解析 Markdown 并在构建过程中导出为 Ghidra HTML。这使得维护更简单(只需在一个地方更新文档,而不是两个),并保持两者同步。
所有新文档都应添加到 docs/ 目录。
本软件由卡内基梅隆大学软件工程研究所根据简化的 BSD 风格许可证授权。请在此仓库根目录的 LICENSE.md 文件中查看此许可证的完整详情,以及本项目中使用到的依赖项的许可条款。
CERT Kaiju 徽标基于 Cameron Spahn 创作的 艺术作品,最初根据 Creative Commons Attribution-Share Alike 4.0 International 许可证 发布。