工具
Pharos 二进制静态分析框架
卡内基梅隆大学软件工程研究所(SEI)推出的二进制程序自动化静态分析工具框架,基于劳伦斯利弗莫尔国家实验室的 ROSE 编译器基础设施完成反汇编、控制流分析和指令语义建模。其中最知名的 OOAnalyzer 跟踪对象指针在函数之间的传递,再用 Prolog 规则从这些事实中恢复 C++ 类、方法等面向对象结构,适用于 Microsoft Visual C++ 编译的 32 位 x86 可执行文件,方法见 CCS 2018 论文;结果以 JSON 导出,可供仓库自带的 IDA 插件或独立的 Kaiju Ghidra 插件使用。其他工具可查找 API 调用序列(ApiAnalyzer)、报告 API 调用的静态参数(CallAnalyzer)、生成用于相似性分析的函数哈希和 YARA 签名(FN2Hash、FN2Yara),以及求出从一个地址到达另一地址所需的条件(PathAnalyzer)。
使用条件与局限
- 项目没有打标签的发布版本;所审阅的 master 提交日期为 2026-08-03。README 称 Pharos 是仍在积极开发的研究项目,文档尚不完整,可移植性也未经主动测试;README 还说明 DumpMASM 已不再维护,建议改用 ROSE 自带的工具。
- 最简便的方式是使用预构建的 ghcr.io/cmu-sei/pharos Docker 镜像,GitHub 工作流会在每次推送时及每周为 amd64 和 arm64 构建该镜像。从源码构建负担较重:需要 C++14、CMake、Boost、yaml-cpp、SQLite、Z3、SWI-Prolog 和 ROSE,构建脚本固定使用 ROSE v2.6.0、Z3 4.8.7 和 SWI-Prolog 8.5.12。INSTALL.md 建议在 CPU 数量较少时每个构建 CPU 配约 4 GiB 内存,构建脚本仅支持最新版 Ubuntu,列出的手动测试配置则较旧,包括 RHEL 7、Ubuntu 19.04 和 openSUSE 15.1。
- 待分析的可执行文件需自行提供。OOAnalyzer 仅支持 32 位 MSVC 二进制,对 64 位可执行文件或其他编译器的测试很少;其 JSON 输出可供仓库中的 IDA 插件或独立的 Kaiju Ghidra 插件使用,分析非常大的可执行文件需要按 oorules 说明执行额外步骤。
- Dockerfile 包含一个测试阶段,会针对由 tests/ 中源码编译的测试程序运行 ctest,但 GitHub 工作流只构建发布镜像。本次审阅未构建或运行任何内容。
- LICENSE.md 是 SEI 的 BSD 风格许可(版权归卡内基梅隆大学所有,2021 年),并限制使用 CMU 和 SEI 名称,因此 GitHub 显示为 NOASSERTION。ROSE、SWI-Prolog、Z3、Boost、yaml-cpp 和 SQLite 各自适用其许可证。所审来源未确立与 REA 的关联。
关于此条目
- 类型
- 工具
- 类别
- 原生分析工具
- 关联
- 基础工具
- 目标
- 二进制
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · cmu-sei/pharos · 修订 782492f
- INSTALL.md GitHub · cmu-sei/pharos · 修订 782492f
- Dockerfile GitHub · cmu-sei/pharos · 修订 782492f
- .github/workflows/docker.yml GitHub · cmu-sei/pharos · 修订 782492f
- scripts/build_prereqs.bash GitHub · cmu-sei/pharos · 修订 782492f
- CMakeLists.txt GitHub · cmu-sei/pharos · 修订 782492f
- tools/ooanalyzer/ooanalyzer.pod GitHub · cmu-sei/pharos · 修订 782492f
- tools/ooanalyzer/ida/README.md GitHub · cmu-sei/pharos · 修订 782492f
- share/prolog/oorules/README.md GitHub · cmu-sei/pharos · 修订 782492f
- tools/apianalyzer/apianalyzer.pod GitHub · cmu-sei/pharos · 修订 782492f
- tools/pathanalyzer/pathanalyzer.pod GitHub · cmu-sei/pharos · 修订 782492f
- LICENSE.md GitHub · cmu-sei/pharos · 修订 782492f
- https://edmcman.github.io/papers/ccs18.pdf
- https://github.com/cmu-sei/pharos/pkgs/container/pharos