BinDiff

摘要

BinDiff 是一款独立工具,可为 SRE(软件逆向工程) 工具提供导出插件。其中一个适用于 IDA、Ghidra 和 BinaryNinja。

IDA-BinDiff

参考:

https://blog.nsfocus.net/bindiff/(除了比对结果解析之外还有过滤、排序,寻找匹配代码)

Using BinDiff - Malware Analyst’s Cookbook and DVD

使用

使用前需要先获得两个二进制文件的IDA数据库(.i64)文件(用IDA打开并保存数据库)

Primary File基准文件:当前使用IDA打开的文件

Secondary File对比文件:选择的要与之比较的文件

假设当前文件是new.i64(Primary File),在Edit->Plugins->BinDiff (Ctrl-6)->Diff Database->选中old.i64(Secondary File)。diff完成会出现四个窗口:

Matched Functions

匹配的函数

参数含义

单行颜色:越绿表示相似度最高,越红表示相似度越低
Similarity:[0,1]区间的值,指明new与old的相似度。1表示完全一样。缺省对Similarity降序排列显示
Confidence:[0,1]区间的值,指明Similarity的可信度,值越接近1表示Similarity可信度越高。Confidence实际代表了识别算法的强弱。
高Similarity、低Confidence表示一个弱算法找到一个强匹配;低 Similarity、高Confidence表示一个强算法找到一个弱匹配。显然,强算法找到的强匹配是最佳匹配

image-20260307225958149

Statics

A summary of the overall similarity between the two files Matched functions

image-20260307114359825

1
2
3
Primary函数:41565
Secondary函数:41844
匹配函数:41565

Primary全部函数都找到了匹配,Secondary多了279个函数

image-20260307114525852

Similarity表示两个程序结构相似度,Confidence表示匹配可靠度

Primary unmatch

主文件中的未匹配。在Primary File中存在,在Secondary File中未找到匹配

Secondary Unmatch

对比文件中的不匹配。在Secondary File中存在,在Primary File中未找到匹配

image-20260305144930270

应用

不同版本之间迁移符号表等信息

用BinDiff迁移符号的要点是,先打开new,再比较old,最后右键Import符号

漏洞修补前后版本比对,找出漏洞点

保存与重用

保存后得到的文件形如Primary File_vs_Secondary File.BinDiff

再次打开bindiff文件,需要先用IDA打开Primary File,然后Edit->Plugins->BinDiff,选择Load Results...,然后选中保存的文件(略麻烦)

也可以直接使用BinDiff的GUI打开