Bindiff使用手册
分享Bindiff工具使用技巧,围绕案例讲解应用方向,已方便对此工具有需求的可快速上手与解决问题,欢迎反馈问题与分享好的方法
作者:梦幻的彼岸
更新日期:2024年4月8日
软件简介
官网:https://www.zynamics.com/bindiff.html
开源地址:https://github.com/google/bindiff
插件地址:https://github.com/google/binexport
官网描述:
BinDiff 是一款二进制文件比较工具,可帮助漏洞研究人员和工程师快速查找反汇编代码中的异同点。
有了 BinDiff,你就能识别和隔离供应商提供的补丁中的漏洞修复程序。您还可以在同一二进制文件的多个版本的反汇编之间移植符号和注释,或使用 BinDiff 收集代码盗窃或专利侵权的证据。
导出插件:
BinDiff 是一款独立工具,可为 SRE(软件逆向工程) 工具提供导出插件。其中一个适用于 IDA、Ghidra 和 BinaryNinja。这些插件将分析信息提取到协议缓冲区,这是一种语言中立的结构化二进制数据和函数序列化方式。之后,BinDiff 可视化应用程序可以使用这些数据进行函数匹配。
UI解析
基本界面:看到这两个程序的概览,其中显示了哈希值、架构等内容。
点击一下
调用图: 在创建了两个可执行文件的初始匹配后,调用图(包含函数间调用关系信息的图)将用于生成更多匹配。
双击
Matched Functions 想匹配的函数: 有多种匹配算法可用于确定给定函数是否相似,如基于哈希和边缘匹配的算法。在此视图中,您可以根据相似度和置信度值等因素快速确定哪些函数发生了更改。
其作用在于识别并匹配两个二进制文件之间相同或者高度相似的函数。
当用户运行 Bindiff 对比两个二进制文件时,它会通过算法分析函数的控制流图(CFG)、指令序列以及其他特征来找出对应的功能块。一旦找到相似或相同的函数,这些函数会被标记为“Matched Functions”。
在 Matched Functions 视图中,可以看到:
- 函数匹配列表:列出所有在两个版本之间成功匹配的函数及其相似度评分。相似度越接近1,说明两个函数越相似或完全一致。
- 差异展示:对于相似度不是100%的函数,用户可以进一步查看具体的差异部分,这对于逆向工程、漏洞分析、软件更新审计等场景尤其有用。
- 排序和筛选:用户可以根据相似度从低到高排序,快速定位那些经过修改或新增的函数。
线条的颜色根据匹配函数的相似程度而定,其中绿色表示高度相似,而红色表示弱匹配。
similarity 越高说明越匹配
Confidence 越高说明算法匹配度越准确
可双击查看具体差异
主要不匹配函数: 显示当前打开的数据库中包含的函数,这些函数与差异数据库中的任何函数都没有关联。
解析:匹配出主有这个函数,未知没有这个函数
次要不匹配函数: 包含差异数据库中的函数,但与第一个数据库中的任何函数都没有关联。
解析:主没有这个函数,未知有这个函数
Ghidra 使用
安装插件,将下载的插件解包,打开Ghidra 依次打开 File --- Install Extensions
选择插件目录,之后点击安装
两个样本载入分析完毕后点击退出点保存
之后返回主页面选择一个样本右键选择Export...
选择如下图所示格式导出
之后Bindiff 建立一个工作空间 File ---New Workspace
备注:不要包含非英文字符串否则对比的时候会报错
建立对比项目 Diffs ---New Diff
之后载入对比样本
Primary file : 往往对应已知
Secondary file :往往对应未知
应用方向
恶意软件分析:多个样本对比,寻找样本间的相似性
软件相似性分析:对比分析分析出是否存在借鉴代码点,判断软件是否存在侵权,使用了已知存在漏洞的代码
二进制漏洞研究:如对比升级版本,找出修改地点,分析如何解决之前的漏洞与绕过方法
使用问题
解决Bindiff UI涉及中文乱码问题
Bindiif 8版本,可通过修改配置文件已更改默认字体已解决乱码问题
修改方法:修改%AppData%\BinDiff\ 路径下的bindiff.json文件
未修改前
修改后
方法来源:https://github.com/google/bindiff/issues/22 感谢提出的问题与回复的解决方法
未修改前效果
修改后效果
知识点
什么是协议缓冲区?
想想 XML,但更小、更快、更简单。您只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码,使用各种语言轻松地将结构化数据写入各种数据流或从各种数据流中读取结构化数据。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课