如何比较二进制文件以检查它们是否相同?

时间:2012-08-25 01:16:02

标签: file binary compare diff

最简单的方法(在Ubuntu Linux上使用图形工具或命令行)知道两个二进制文件是否相同(时间戳除外)?我不需要实际提取差异。我只需要知道它们是否相同。

15 个答案:

答案 0 :(得分:139)

标准的unix diff将显示文件是否相同:

[me@host ~]$ diff 1.bin 2.bin
Binary files 1.bin and 2.bin differ

如果命令没有输出,则表示文件没有差异。

答案 1 :(得分:87)

使用cmp命令。如果它们是二进制相等的,它将干净地退出,或者它将打印出第一个差异发生的位置并退出。

答案 2 :(得分:75)

我发现Visual Binary Diff正是我所寻找的,可在以下网址找到:

  • Ubuntu:apt-get install vbindiff
  • Arch Linux:pacman -S vbindiff
  • Mac OS X:port install vbindiff通过MacPorts
  • Mac OS X:brew install vbindiff来自Homebrew

答案 3 :(得分:16)

使用sha1生成校验和:

sha1 [FILENAME1]
sha1 [FILENAME2]

答案 4 :(得分:11)

我最终使用hexdump将二进制文件转换为十六进制表示,然后在meld / kompare /任何其他diff工具中打开它们。与你不同,我追求文件中的差异。

hexdump tmp/Circle_24.png > tmp/hex1.txt
hexdump /tmp/Circle_24.png > tmp/hex2.txt

meld tmp/hex1.txt tmp/hex2.txt

答案 5 :(得分:6)

使用cmp命令。有关详细信息,请参阅Binary Files and Forcing Text Comparisons

cmp -b file1 file2

答案 6 :(得分:5)

md5 <filename1>

md5 <filename2>

看看它们是否相同: - )

答案 7 :(得分:4)

为了找到闪存缺陷,我必须编写这个脚本,它显示包含差异的所有1K块(不仅是cmp -b的第一个块)

#!/bin/sh

f1=testinput.dat
f2=testoutput.dat

size=$(stat -c%s $f1)
i=0
while [ $i -lt $size ]; do
  if ! r="`cmp -n 1024 -i $i -b $f1 $f2`"; then
    printf "%8x: %s\n" $i "$r"
  fi
  i=$(expr $i + 1024)
done

输出:

   2d400: testinput.dat testoutput.dat differ: byte 3, line 1 is 200 M-^@ 240 M- 
   2dc00: testinput.dat testoutput.dat differ: byte 8, line 1 is 327 M-W 127 W
   4d000: testinput.dat testoutput.dat differ: byte 37, line 1 is 270 M-8 260 M-0
   4d400: testinput.dat testoutput.dat differ: byte 19, line 1 is  46 &  44 $

免责声明:我在5分钟内破解了剧本。它不支持命令行参数,也不支持文件名中的空格

答案 8 :(得分:4)

带有以下选项的差异将进行二进制比较,以检查文件是否完全不同,如果文件也相同则输出:

diff -qs {file1} {file2}

如果要比较不同目录中具有相同名称的两个文件,则可以改为使用此表单:

diff -qs {file1} --to-file={dir2}

OS X El Capitan

答案 9 :(得分:3)

尝试使用diff -s

简答:使用diff开关运行-s

答案很长:请在下面阅读。

这是一个例子。让我们首先创建两个包含随机二进制内容的文件:

$ dd if=/dev/random bs=1k count=1 of=test1.bin
1+0 records in
1+0 records out
1024 bytes (1,0 kB, 1,0 KiB) copied, 0,0100332 s, 102 kB/s


$ dd if=/dev/random bs=1k count=1 of=test2.bin
1+0 records in
1+0 records out
1024 bytes (1,0 kB, 1,0 KiB) copied, 0,0102889 s, 99,5 kB/s

现在让我们复制第一个文件:

$ cp test1.bin copyoftest1.bin

现在test1.bin和test2.bin应该是不同的:

$ diff test1.bin test2.bin
Binary files test1.bin and test2.bin differ

...和test1.bin和copyoftest1.bin应该完全相同:

$ diff test1.bin copyoftest1.bin

但是等等!为什么没有输出?!?

答案是:这是设计的。相同文件没有输出。

但是有不同的错误代码:

$ diff test1.bin test2.bin
Binary files test1.bin and test2.bin differ

$ echo $?
1


$ diff test1.bin copyoftest1.bin

$ echo $?
0

幸运的是,您不必每次都检查错误代码,因为您可以使用-s (or --report-identical-files) switch使差异更加冗长:

$ diff -s test1.bin copyoftest1.bin
Files test1.bin and copyoftest1.bin are identical

答案 10 :(得分:1)

  

Radiff2是旨在比较二进制文件的工具,类似于   常规差异会比较文本文件。

尝试使用radiff2反汇编程序的一部分radare2。例如,使用以下命令:

radiff2 -x file1.bin file2.bin

您将获得两列漂亮的格式化输出,其中突出显示了差异。

答案 11 :(得分:0)

我最喜欢的使用vim软件包中的xxd hex-dumper:

1)使用vimdiff(vim的一部分)

#!/bin/bash
FILE1="$1"
FILE2="$2"
vimdiff <( xxd "$FILE1" ) <( xxd "$FILE2" )

2)使用差异

#!/bin/bash
FILE1=$1
FILE2=$2
diff -W 140 -y <( xxd $FILE1 ) <( xxd $FILE2 ) | colordiff | less -R -p '  \|  '

答案 12 :(得分:0)

wxHexEditor

wxHexEditor 是免费的,并且能够区分高达 2^64 字节(2 ExaByte)的大文件。有一个图形用户界面。跨平台。很多功能。

要免费获得它,请选择以下选项之一:


下面是与上面相同的建议。但如果您对这些感兴趣,请提供详细信息。

截图

enter image description here

实力

• 十六进制 (Hex) 编辑器。这有助于进行逆向工程。

• 跨平台。 Linux、Mac 操作系统、Windows

• 易于使用的图形用户界面 (GUI)

• 支持高达 2^64 字节 (2 ExaByte) 的超大文件

• 并排比较两个大文件(差异)。 (可选)列出并搜索所有差异。

• 搜索速度非常快

• 使用少量 RAM

• 不要创建临时文件。所以它使用了非常小的存储空间。

• 黑暗或明亮的主题

• 多语言 15 种语言

• 开源。如果您不熟悉“开源”,则意味着该软件具有更强的安全性和更强的隐私性。因为它的代码可以在 https://github.com/EUA/wxHexEditor 或 SourceForge https://sourceforge.net/p/wxhexeditor/code/

上公开以供审查和贡献给 GitHub

• 有吸引力的 GNU 通用公共许可证第 2 版。这意味着此扩展的软件代码由友好的非营利社区拥有和支持。而不是营利性公司。 https://github.com/EUA/wxHexEditor/blob/master/LICENSE

挑战

• 两个代码库之间的混淆。在撰写本文时,即 2021 年 8 月,GitHub 存储库似乎更新了。上次更新时间为 2021 年 https://github.com/EUA/wxHexEditor 相比之下,https://sourceforge.net/projects/wxhexeditor/ 的 SourceForge 存储库是 wxHexEditor 的最后一次更新是 2017 年 12 月 31 日。

表达您的支持

• 如果您喜欢此应用程序,请通过以下方式向作者和贡献者表示您的支持:

___• 在 https://www.paypal.com/cgi-bin/webscr?item_name=Donation+to+wxHexEditor&cmd=_donations&business=erdem.ua%40gmail.com 捐款

___• 支持 https://sourceforge.net/projects/wxhexeditor/support 的票证

___• 支持论坛 https://sourceforge.net/p/wxhexeditor/discussion/

___• 补丁在 https://sourceforge.net/p/wxhexeditor/patches/

使用

• wxHexEditor 0.23

• Debian 10 Buster

• GNOME 3.30.2

答案 13 :(得分:-1)

有一种相对简单的方法来检查两个二进制文件是否相同。

如果以编程语言使用文件输入/输出;您可以将两个二进制文件的每一位存储到它们自己的数组中。

此时检查很简单:

if(file1 != file2){
    //do this
}else{
    /do that
}

答案 14 :(得分:-1)

md5sum binary1 binary2

如果md5sum相同,则二进制文件相同

例如

md5sum new*
89c60189c3fa7ab5c96ae121ec43bd4a  new.txt
89c60189c3fa7ab5c96ae121ec43bd4a  new1.txt
root@TinyDistro:~# cat new*
aa55 aa55 0000 8010 7738
aa55 aa55 0000 8010 7738


root@TinyDistro:~# cat new*
aa55 aa55 000 8010 7738
aa55 aa55 0000 8010 7738
root@TinyDistro:~# md5sum new*
4a7f86919d4ac00c6206e11fca462c6f  new.txt
89c60189c3fa7ab5c96ae121ec43bd4a  new1.txt