如何在汇编代码级别区分两个x86二进制文件?


43

我正在寻找像Beyond Compare,meld,kdiff等工具,可用于比较两个反汇编的二进制文件。我知道有二进制(十六进制)比较,显示十六进制值的差异,但我正在寻找显示操作码和参数的东西。

任何人都知道可以提供帮助的东西吗?

  0

好,你总是可以\从反汇编的论点得到的操作码上市和比较他们两个文本列表?或者甚至为Immunity Debugger构建python脚本:) 21 4月. 132013-04-21 14:27:55

  0

为什么diff/meld/kdiff/...在反汇编上不能令人满意? 21 4月. 132013-04-21 14:27:57

+1

@Mellowcandle +1提kdiff。这是一个快速差异化的好工具。 22 4月. 132013-04-22 02:24:47

+2

@Gilles:参见[我的问答](http://reverseengineering.stackexchange.com/questions/1902)。 23 4月. 132013-04-23 00:12:06

26

除非我误解了,这听起来像你正在寻找一个二进制比较工具。下面有一些很好的选择。 这些都需要IDA Pro。

  1. DarunGrim(开源) DarunGrim

  2. BinDiff(商业) BinDiff

  3. eEye Binary Diffing Suite(使用archive.org下载安装程序)

  0

太好了。正是我一直在寻找的 21 4月. 132013-04-21 16:04:56

+2

eEye Binary Diffing Suite是开源的,其中的一部分是DarunGrim,根据您提供的链接 21 4月. 132013-04-21 17:16:28

+1

可能值得一提的是,它们都在IDA之上工作,而不是独立运行。 22 4月. 132013-04-22 09:06:24

+3

另一种相关:[BinDiff如何工作](http://reverseengineering.stackexchange.com/questions/1475/how-does-bindiff-work/1511#1511) 22 4月. 132013-04-22 17:58:46


10

另外,还有Turbodiff,它是一个IDA专业插件。 还没有使用它,但我不能说这个工具的质量。

  0

你知道这是否适用于IDA 6.x ?他们只列出了IDA 4.9和5.x的支持。 21 4月. 132013-04-21 20:04:08

+2

Turbodiff被遗弃,不适用于最新的IDA。 22 4月. 132013-04-22 07:52:19

  0

请添加关于该插件的简短说明。仅链接答案不被视为答案。 07 5月. 132013-05-07 14:35:22

  0

这是IDA Pro的二进制差异插件。我认为这个答案没有任何相关性,不是吗? 07 5月. 132013-05-07 14:51:48

  0

@newgre:它最终与PatchDiff2相同吗? 08 8月. 132013-08-08 23:40:17


9

如果您使用的是IDA Pro,那么我也会推荐PatchDiff2

这里是一个描述:

PatchDiff2是针对IDA dissassembler能够分析两个文件IDB并找到双方之间的差异的插件。 PatchDiff2是免费的,并且在Windows和Linux上完全集成了最新版本的IDA(6.1)。该插件可以执行以下任务:

  • 显示的相同功能的列表
  • 显示的匹配功能
  • 显示器无可比拟的功能的列表(与CRC)
  • 显示的流图中的列表用于相同和匹配的功能

此插件的主要目的是快速并在安全修补程序或修补程序中提供准确的结果。因此这个工具不能在两个不同的程序之间找到类似的功能。 Patchdiff2支持IDA可以处理的所有处理器,并有两个版本:32位和64位。

要使用所有你需要做的是:

解压两个patch2diff拉链,并在其中将持有的Linux和Windows两个文件的两个文件夹只复制patchdiff2.p64和patchdiff2.plw您plugins目录位于C:\ Program Files文件\ IDA Pro目录\插件\

  • 打开你想被显示差异你的可执行文件并将其保存为.idb(默认)。
  • 打开。文件的idb(我注意到它在仅仅区分一个exe文件时就失败了),并且在IDA View-A选项卡中选择Edit to plugins,你应该看到PatchDiff2只需点击它并选择你想要比较的辅助.idb。

警告这需要一段时间,IDA将无响应。最后你会有几个选项卡,匹配函数,不匹配函数,相同函数。

+3

请添加关于该插件的简短说明。仅链接答案不被视为答案。 07 5月. 132013-05-07 14:34:57


18

您也可以尝试radiff2(它不需要IDA;)),它是radare工具套件中的一个工具。它支持增量差异(-d),graphdiff(-g)和许多相关的好东西。


6

我是kdiff路线的忠实粉丝,因为它快速而干净。注意:我使用diffing在恶意软件上撰写签名。大多数时候我需要一个简单的视觉指令。如果您需要深入挖掘,请参阅Mick提到的BinDiff或DarunGrim路线。

为了使用kdiff来区分二进制文件,您将需要由IDA生成的反汇编输出。以下脚本可用于为工作目录中的所有可执行文件创建程序集输出。

import os 
import subprocess 
import glob 
paths = glob.glob("*.exe") 
ida_path = os.path.join(os.environ['PROGRAMFILES'], "IDA", "idaw.exe") 

for file_path in paths: 
    subprocess.call([ida_path, "-B", file_path]) 

执行该脚本。

C:\Documents and Settings\Administrator\Desktop\diff\python make-asm.py 

Thank you for using IDA. Have a nice day! 

C:\Documents and Settings\Administrator\Desktop\diff>dir 
Directory of C:\Documents and Settings\Administrator\Desktop\diff 

10/25/2013 11:16 AM <DIR>   . 
10/25/2013 11:16 AM <DIR>   .. 
10/25/2013 11:16 AM   40,604 a.asm 
10/24/2013 08:35 AM    9,938 a.exe 
10/25/2013 11:16 AM   368,957 a.idb 
10/25/2013 11:16 AM   40,657 b.asm 
10/24/2013 08:35 AM    9,969 b.exe 
10/25/2013 11:16 AM   368,957 b.idb 
10/25/2013 11:15 AM    218 make-asm.py 

选择两个.asm文件,右键单击,Kdiff,Compare。漂亮而简单的输出。

r


8

这里有各种各样的伟大选择。然而,他们似乎都没有维护。我推荐你的工具是Diaphora https://github.com/joxeankoret/diaphora(声明:我是作者)。是一个用于IDA Pro的纯Python插件,用于执行程序差异化,是唯一一个可以导入/导出结构,枚举等的程序,它是唯一一个使用Hex-Rays反编译器的程序,它更加有趣,它保持不变:上一次我在上周进行了修改。

一些截图:

版本比较MS015-034: enter image description here

版本比较伪代码(MS015-050): enter image description here

版本比较MS015-050: enter image description here

  0

好消息。谢啦! 01 7月. 152015-07-01 18:35:00


3

另一个您可以尝试的选项是Relyze(Commercial,Standalone Windows des ktop应用程序)它支持二进制差异。它匹配两个Windows二进制文件之间的函数,并为您提供所有相等,已修改,已删除和已添加函数的列表以及百分比差异值,以便您可以看到任何两个匹配函数的重大修改。

GUI通过交互式图形显示匹配的功能,以便您可以浏览它们并查看更改。这两个图形可以在浏览时同步,因此单击一个图形中的指令将在另一个图形中选择匹配的指令(如果有的话)。

Binary Diffing with Relyze