首页
社区
课程
招聘
[原创]Bindiff使用手册 v1.0
2024-4-8 22:30 3366

[原创]Bindiff使用手册 v1.0

2024-4-8 22:30
3366

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. 函数匹配列表:列出所有在两个版本之间成功匹配的函数及其相似度评分。相似度越接近1,说明两个函数越相似或完全一致。
  2. 差异展示:对于相似度不是100%的函数,用户可以进一步查看具体的差异部分,这对于逆向工程、漏洞分析、软件更新审计等场景尤其有用。
  3. 排序和筛选:用户可以根据相似度从低到高排序,快速定位那些经过修改或新增的函数。

线条的颜色根据匹配函数的相似程度而定,其中绿色表示高度相似,而红色表示弱匹配。

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,但更小、更快、更简单。您只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码,使用各种语言轻松地将结构化数据写入各种数据流或从各种数据流中读取结构化数据。




[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞5
打赏
分享
最新回复 (5)
雪    币: 8029
活跃值: (5225)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mudebug 2024-4-9 03:00
2
0

我1.5G的pdb,跑了ue5的项目。

第一次对比花了8小时左右
IDA从旧版把符号更新到新版 ctrl+6那个操作。

从4月5号跑到了4月8号。愣是没跑完。最后我想了一下,好像也没那么重要了。

最后于 2024-4-9 03:06 被mudebug编辑 ,原因:
雪    币: 19381
活跃值: (29004)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2024-4-9 09:26
3
1
感谢分享
雪    币: 1638
活跃值: (2804)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qj111111 2024-4-11 17:10
4
0
mudebug 我1.5G的pdb,跑了ue5的项目。第一次对比花了8小时左右IDA从旧版把符号更新到新版 ctrl+6那个操作。从4月5号跑到了4月8号。愣是没跑完。最后我想了一下,好像也没那么重 ...
这玩意缺点就是太慢了,全球所有服务器同步更新外挂比较好用
雪    币: 1553
活跃值: (697)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
embarassedV 2024-4-14 09:59
5
1
利器,正在学习使用,希望能给自己带来些帮助
雪    币: 1412
活跃值: (4204)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2024-4-16 11:02
6
0
能用于ida函数重新命名吗?旧版本到新版本
游客
登录 | 注册 方可回帖
返回