GaloisInc/grease-cartographer

GitHub: GaloisInc/grease-cartographer

GreaseCartographer 是 Ghidra 的代码覆盖率映射插件,专为 GREASE 扩展并解决覆盖率数据加载与分析问题。

Stars: 0 | Forks: 0

# GREASE 覆盖率插件文档 本 README 适用于 [GREASE](https://github.com/GaloisInc/grease/branches) 对原始 [Cartographer 插件](https://github.com/nccgroup/Cartographer/tree/main) 的扩展。该仓库中的提交为 "--dump-coverage" 标志生成的 ".greasecov" 文件提供了支持。所有陈述均涉及 Galois 在 c8160d57f3180f0122c04bc10cbfc3c7baebf991 之后所做的提交。 ## 安装 我们添加了一个用于安装插件 `build_and_install.sh` 的便捷脚本。该脚本使用 Gradle 包装器来设置正确版本的 Gradle。可以通过 `GHIDRA_INSTALL_DIR=<你的 Ghidra 安装目录> ./build_and_install.sh` 来安装插件。 你也可以继续按照下面的“从源代码构建”说明操作,并通过 UI 安装构建的 ZIP 文件。 ## 用法 此插件扩展了以下描述的加载覆盖率功能,并支持 GREASE 的覆盖率格式。任何扩展名为 ".greasecov" 的文件都将被解析为 GREASE 覆盖率文件。运行 GREASE 并使用 "--dump-coverage" 标志,然后在下述加载覆盖率菜单中选择该文件。 *注意:* 如果在 GREASE 终止之前中断它,GREASE 的最后一行可能会包含一个当前解析器无法妥善处理的部分 JSON 记录,你需要手动删除该行。 ## 致谢 本材料基于美国国防部高级研究计划局(DARPA)授予的合同号 HR001124C0488 所支持的工作。 本材料中表达的任何观点、发现、结论或建议均为作者的观点,并不代表美国国防部高级研究计划局(DARPA)的立场。

Cartographer

Mapping Out Code Coverage

Version Build Status License
Watchers Stars Downloads

Developed by Austin Peavy - https://github.com/aus10pv Released as open source by NCC Group Plc - https://www.nccgroup.com/ Released under the Apache 2.0 license (see [LICENSE](LICENSE) for more information) ![Cartographer interface](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/27059f08e6005942.png) ## 描述 Cartographer 是 Ghidra 的一个代码覆盖率映射插件,能够在不需要源代码的情况下,让研究人员观察程序的哪些部分已被执行。 ## 目录 - [关键特性](#key-features) - [安装](#installation) - [加载插件](#loading-the-plugin) - [用法](#usage) - [加载覆盖率文件](#loading-code-coverage-files) - [覆盖率详情](#code-coverage-details) - [在覆盖率之间切换](#swapping-between-coverages) - [表达式解析器](#expression-parser) - [语法](#syntax) - [示例](#examples) - [贡献](#contributing) - [从源代码构建](#building-from-source) - [报告错误](#reporting-bugs) - [致谢](#credits) # 关键特性 * 为已执行的代码着色 * 函数流程图 * 反汇编(列表)视图 * 反编译视图 * 完全可自定义的颜色 * 支持 Ghidra 主题 * 加载 DRCOV 文件和自定义 EZCOV 文件 * 参见 [EZCOV.md](EZCOV.md) 了解 EZCOV 格式的详细信息 * 提供函数覆盖率的详细概览 * 包含展示每个函数执行比例的热力图 * 可以轻松地在已加载的覆盖率文件之间切换 * 按函数名称搜索 * 按覆盖率比例等条件过滤结果 * 强大的表达式解析器 * 对多个已加载的覆盖率文件执行逻辑运算 * 支持不同地址空间中的覆盖率 # 安装 最新稳定版本的 Cartographer 可从 [发布页面](https://github.com/nccgroup/Cartographer/releases/latest) 下载。 ## 加载插件 1. 启动 Ghidra。 2. 导航到“安装扩展”窗口。 * `文件` -> `安装扩展...` 3. 点击右上角绿色的“+”图标。 4. 选择下载的 ZIP 文件以将插件加载到 Ghidra 中。 5. 点击“确定”按钮退出“安装扩展”窗口。 6. 根据提示重启 Ghidra。 # 用法 插件加载后,CodeBrowser 窗口中将出现用于处理代码覆盖率数据的额外控件。 ## 加载代码覆盖率文件 代码覆盖率文件可以通过工具菜单加载:`工具` -> `代码覆盖率` -> `加载代码覆盖率文件...` 加载代码覆盖率文件后,所有覆盖率数据会立即在 **列表** 视图和 **反编译** 视图中高亮显示。 ![加载代码覆盖率文件](https://raw.githubusercontent.com/GaloisInc/grease-cartographer/main/screenshots/loading.gif) ## 代码覆盖率详情 每个函数的覆盖率数据详细信息可以在 **代码覆盖率** 窗口中找到。 可以通过导航到 `窗口` -> `代码覆盖率`,或按 `Ctrl-Shift-C`(Windows 上)或 `Cmd-Shift-C`(Mac 上)打开代码覆盖率窗口。 该窗口显示了程序中每个函数的以下详细信息: * **覆盖率 %**:函数被执行的比例 * **名称**:函数名称 * **地址**:函数入口地址 * **命中块数**:已执行的基本块数量 * **命中指令数**:已执行的指令数量 * **函数大小**:函数的字节大小 点击任意函数将在列表视图和反编译视图中导航到该函数。 ![打开代码覆盖率窗口](https://raw.githubusercontent.com/GaloisInc/grease-cartographer/main/screenshots/ccwindow.gif) ## 搜索与过滤 **过滤**输入框可用于按函数名称搜索。 覆盖率表格中显示的任意数据都可以用作列过滤条件。 ![搜索和过滤数据](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/71d1085f1f005948.gif) ## 在覆盖率之间切换 代码覆盖率窗口右下角的 dropdown 可用于快速轻松地在已加载的代码覆盖率文件之间切换。 ![在覆盖率之间切换](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/db1a6732fc005949.gif) ## 表达式解析器 代码覆盖率窗口底部的文本框可用于对已加载的代码覆盖率文件执行逻辑运算。 这对于检查不同运行之间的差异和相似性**极其**有用。 ![使用表达式解析器](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/40f7821119005951.gif) ### 语法 以下是表达式解析器中可用的逻辑运算符: * `&`:仅获取**两个**覆盖率文件**都**执行过的代码 * `|`:获取**任一**覆盖率文件**任意**执行的代码 * `^`:获取仅在**两个**覆盖率文件之间**不同**的执行代码 * `-`:获取仅在**左侧**覆盖率文件中**独有**的执行代码 覆盖率通过下拉菜单中的字母 ID 进行引用,例如 `A`、`B`、`XY` 等。 每个逻辑运算都使用括号进行分组,表达式可以是任意长度或复杂度。 ### 示例 1. 显示在**两个**覆盖率文件 `A` 和 `B` 中都执行过的代码: A & B 2. 显示在覆盖率文件 `A` 和 `B` 之间**不同**的执行代码: A ^ B 3. 显示仅在 `B` 中执行的代码: B - A 4. 合并 `A` 和 `B` 中的所有覆盖率数据,然后查找与 `C` 的**差异**: (A | B) ^ C ## 从源代码构建 可以使用 Gradle 从源代码构建 Cartographer。 1. 克隆 Cartographer GitHub 仓库。 $ git clone https://github.com/nccgroup/Cartographer.git 2. 进入仓库目录并使用 Gradle 构建。 $ cd Cartographer $ gradle -PGHIDRA_INSTALL_DIR= * 将 `` 替换为你本地 Ghidra 的安装路径。 3. 构建完成后,插件 ZIP 文件将位于 `dist/` 文件夹中。 ## 报告错误 如果你在 Cartographer 中发现了错误,请通过 [GitHub](https://github.com/nccgroup/Cartographer/issues/new/choose) 提交问题。 # 致谢 最初受到 Lighthouse 的启发 - https://github.com/gaasedelen/lighthouse
标签:Aarch64, Cartographer, DARPA, Ghidra, GREASE, .greasecov, JS文件枚举, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码覆盖率, 反编译工具, 后台面板检测, 域名枚举, 扩展插件, 插件, 覆盖率分析, 覆盖率工具, 逆向工程, 静态分析