Linux

Linux 比較二進位檔案差異指令教學與範例

介紹如何在 Linux 系統下使用 xxdoddiffhexdiffbinwalk 等指令比較兩個二進位檔案之間的差異處。

xxddiff

在 Linux 中若要比較兩個二進位檔案內容的差異,最基礎的作法就是使用 xxd 將二進位檔案內容轉為十六進位碼,再搭配 diff 來比較兩個檔案的差異:

# 轉為十六進位碼
xxd A.bin > A.hex
xxd B.bin > B.hex

# 以 diff 比較檔案差異
diff A.hex B.hex
16c16
< 000000f0: 3139 3130 3533 3239 3037 362e 3100 0200  19105329076.1...
---
> 000000f0: 3139 3130 3533 3239 3037 362e 3200 0200  19105329076.2...
29c29
< 000001c0: 3239 3037 362e 3100 0800 2000 4441 0800  29076.1... .DA..
---
> 000001c0: 3239 3037 362e 3200 0800 2000 4441 0800  29076.2... .DA..
41c41
< 00000280: 3536 3938 3531 2e35 3130 2000 0e00 5549  569851.510 ...UI
---
> 00000280: 3536 3938 3531 2e35 3030 2000 0e00 5549  569851.500 ...UI
61c61
< 000003c0: 1300 4953 0200 3120                      ..IS..1
---
> 000003c0: 1300 4953 0200 3220                      ..IS..2

如果不想要額外建立兩個十六進位碼的檔案,可以直接用資料流的方式將十六進位碼導入 diff,這樣的效果完全相同,除了不需要建立額外的檔案之外,語法也更簡潔:

# 以 xxd 搭配 diff 比較檔案差異
diff <(xxd A.bin) <(xxd B.bin)

而這裡的 diff 指令亦可替換為彩色的 colordiff

# 以 xxd 搭配 colordiff 比較檔案差異
colordiff <(xxd A.bin) <(xxd B.bin)
以 colordiff 比較二進位檔案差異

或是使用 vimdiff 也可以:

# 以 xxd 搭配 vimdiff 比較檔案差異
vimdiff <(xxd A.bin) <(xxd B.bin)
以 vimdiff 比較二進位檔案差異

亦可使用視窗化的 gvimdiff

# 以 xxd 搭配 gvimdiff 比較檔案差異
gvimdiff <(xxd A.bin) <(xxd B.bin)
以 gvimdiff 比較二進位檔案差異

oddiff

將二進位檔案轉為十六進位碼的工具有很多,除了 xxd 之外,od 也是很常被使用的工具,使用方式跟 xxd 類似,以下是替換為 od 的範例。

# 以 od 搭配 diff 比較檔案差異
diff <(od A.bin) <(od B.bin)

# 以 od 搭配 colordiff 比較檔案差異
colordiff <(od A.bin) <(od B.bin)

# 以 od 搭配 vimdiff 比較檔案差異
vimdiff <(od A.bin) <(od B.bin)

# 以 od 搭配 gvimdiff 比較檔案差異
gvimdiff <(od A.bin) <(od B.bin)

hexdiff

hexdiff 是一個專門用於比較兩個二進位檔案內容差異的工具,在 Ubuntu Linux 可以用 apt 直接安裝:

# 安裝 hexdiff
sudo apt install hexdiff

使用 hexdiff 比較 A.binB.bin 兩個二進位檔案內容:

# 比較 A.bin 與 B.bin 二進位檔案內容
hexdiff A.bin B.bin
以 hexdiff 比較二進位檔案差異

binwalk

binwalk 是一個韌體影像檔分析工具,亦可用於普通的二進位檔案。在 Ubuntu Linux 中可以使用 apt 安裝 binwalk

# 安裝 binwalk
sudo apt install binwalk

使用 binwalk 比較 A.binB.bin 兩個二進位檔案內容:

# 比較 A.bin 與 B.bin 二進位檔案內容
binwalk -W file1.bin file2.bin
以 binwalk 比較二進位檔案差異

只顯示有差異的內容:

# 比較 A.bin 與 B.bin 二進位檔案內容(只顯示有差異的內容)
binwalk -Wi file1.bin file2.bin
以 binwalk 比較二進位檔案差異(只顯示有差異的內容)

參考資料:StackExchangeGeeksforGeeks

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago