BinAbsInspector(二进制抽象检查器)是一款用于自动化逆向工程和二进制漏洞扫描的静态分析器,是 Keenlab 孵化的一项长期研究项目。它基于抽象解释,并依托 Ghidra 的支持。它使用 Ghidra 的 Pcode 而非汇编语言。目前支持 x86、x64、armv7 和 aarch64 架构的二进制文件。
z3-${version}-win/bin 的 PATH 环境变量z3-${version}-glibc-${version}/bin/*.so 复制到 /usr/local/lib/如果您想开发新功能,请自行构建扩展,更多信息请参考开发指南。
gradle buildExtensiondist/${GhidraVersion}_${date}_BinAbsInspector.zip您可以通过无头模式、GUI 模式或 Docker 运行 BinAbsInspector。
$GHIDRA_INSTALL_DIR/support/analyzeHeadless <projectPath> <projectName> -import <file> -postScript BinAbsInspector "@@<scriptParams>"
<projectPath> -- Ghidra 项目路径。
<projectName> -- Ghidra 项目名称。
<scriptParams> -- 分析器的参数,提供以下选项:
使用 Ghidra GUI
Window -> Script Manager 并找到 BinAbsInspector.javaBinAbsInspector.java 条目,在配置窗口中设置参数并点击确定使用 Docker
git clone [email protected]:KeenSecurityLab/BinAbsInspector.git
cd BinAbsInspector
docker build . -t bai
docker run -v $(pwd):/data/workspace bai "@@<script parameters>" -import <file>
目前 BinAbsInspector 支持以下检查器:
├── main
│ ├── java
│ │ └── com
│ │ └── bai
│ │ ├── checkers 检查器实现
│ │ ├── env
│ │ │ ├── funcs 函数建模
│ │ │ │ ├── externalfuncs 外部函数建模
│ │ │ │ └── stdfuncs C++ 标准库建模
│ │ │ └── region 内存建模
│ │ ├── solver 分析核心和图模块
│ │ └── util 工具类
│ └── resources
└── test
您也可以通过 gradle javadoc 构建 javadoc,API 文档将生成在 ./build/docs/javadoc。
我们采用了 Ghidra 作为基础,并经常利用 JImmutable Collections 以获得更好的性能。
在此,我们对它们的大力帮助表示衷心的感谢!
| 参数 | 描述 |
|---|
[-K <kElement>] | KSet 大小限制 K |
[-callStringK <callStringMaxLen>] | 调用字符串最大长度 K |
[-Z3Timeout <timeout>] | Z3 超时时间 |
[-timeout <timeout>] | 分析超时时间 |
[-entry <address>] | 入口地址 |
[-externalMap <file>] | 外部函数模型配置 |
[-json] | 以 JSON 格式输出 |
[-disableZ3] | 禁用 Z3 |
[-all] | 启用所有检查器 |
[-debug] | 启用调试日志输出 |
[-check "<cweNo1>[;<cweNo2>...]"] | 启用特定检查器 |