trumank/binfold

GitHub: trumank/binfold

一款基于约束匹配的跨二进制符号移植工具,能将带符号的参考文件中的函数名快速迁移到无符号的目标文件中。

Stars: 57 | Forks: 6

# binfold 一款用于在相似二进制文件之间快速(处理 100MB 的 exe 文件只需 4 秒)且准确移植大量符号(190396 个符号中有 102520 个匹配 (>50% !!))的实用工具。
Binary Ninja showing ported symbols An Unreal Engine game showing ported symbols
## 构建说明 ``` cargo build --release ``` ## 用法 ### 1a. 下载预生成的数据库 - [Unreal Engine](https://drive.google.com/file/d/18rWfF7MobqxTc8NQzZOoMzZxuxiTUHAv/view) ### 1b. 生成你自己的数据库 从带有 PDB 的可执行文件创建数据库: ``` # 单个可执行文件 cargo run --release gen-db -e /path/to/binary.exe -d db.fold # 多个可执行文件 cargo run --release gen-db -e /path/to/binary1.exe -e /path/to/binary2.exe -d db.fold # 递归扫描目录以查找带有 PDB 的 EXE 文件 cargo run --release gen-db -e /path/to/directory -d db.fold ``` ### 2. 分析可执行文件 分析二进制文件中的函数,并可选地与数据库进行匹配: ``` # 生成具有匹配函数名的 PDB 文件 cargo run --release analyze --exe /path/to/binary.exe --database db.fold --generate-pdb ``` ## 匹配算法 核心匹配算法基于 [WARP](https://github.com/vector35/warp),其实质是对函数体字节的哈希。然而,在约束条件方面,我的实现已经产生了显著的偏离。当前的实现会填充并匹配以下类型的约束: - 函数调用体(函数体的哈希) - 函数调用名称(符号名称的哈希) - 常量字符串引用 约束可以带有可选的偏移量,但目前尚未使用。 ## 未来展望 还有一些值得探索的想法: - 匹配并命名全局变量(这比较棘手,因为没有类似函数体那样的内容可以计算哈希) - 基于变量名添加约束 - 为符号添加类型信息(如同 WARP 所做的那样) - 改进函数基本块分析(特别是跳转表)
标签:Binary Ninja, Cargo, DAST, PDB生成, Rust, TLS抓取, Unreal Engine, WARP, 二进制分析, 二进制发布, 云安全运维, 云资产清单, 代码相似性, 全局变量分析, 函数匹配, 可视化界面, 哈希算法, 开源工具, 恶意软件分析, 情报收集, 数据库匹配, 漏洞研究, 符号移植, 系统运维工具, 网络流量审计, 软件安全, 逆向工程, 通知系统