xxd
是一個 十六進制轉儲(hex dump)工具,通常用于將二進制文件轉換為十六進制格式,或者反向轉換(十六進制→二進制)。它是 vim
的一部分,但在大多數 Linux 系統(如 Ubuntu)中可以直接使用。
1. 安裝 xxd
如果 xxd
未安裝,可以通過以下方式安裝:
sudo apt update
sudo apt install xxd # 或安裝 vim-common(包含 xxd)
2. 基本用法
(1) 查看文件的十六進制格式
xxd <文件名>
示例:
echo "Hello" > test.txt
xxd test.txt
輸出:
00000000: 4865 6c6c 6f0a Hello.
- 左邊:字節偏移量(
00000000
表示起始位置)。 - 中間:十六進制數據(
48 65 6c 6c 6f 0a
是H e l l o \n
的十六進制)。 - 右邊:ASCII 可打印字符(
.
表示不可見字符)。
(2) 僅顯示十六進制(不顯示 ASCII)
xxd -p <文件名>
示例:
xxd -p test.txt
輸出:
48656c6c6f0a
(3) 從十六進制還原為二進制
xxd -r <十六進制文件> <輸出文件>
示例:
echo "48656c6c6f0a" > hex.txt
xxd -r -p hex.txt > output.txt # -p 表示純十六進制模式
cat output.txt
輸出:
Hello
-r
:反向模式(十六進制→二進制)。-p
:處理純十六進制字符串(無偏移量或 ASCII 部分)。
3. 常見用途
(1) 發送十六進制數據(結合 nc
)
echo "48656c6c6f" | xxd -r -p | nc <IP> <端口>
48656c6c6f
="Hello"
的十六進制。xxd -r -p
將其轉為二進制,然后nc
發送。
(2) 查看二進制文件的十六進制
xxd /bin/ls | less # 查看 ls 命令的二進制結構
(3) 修改二進制文件
- 生成十六進制文件:
xxd original.bin > hex_edit.txt
- 用文本編輯器修改
hex_edit.txt
。 - 轉換回二進制:
xxd -r hex_edit.txt > modified.bin
4. 高級選項
選項 | 說明 |
---|---|
-g <字節數> | 每組顯示的字節數(默認 2) |
-l <長度> | 只處理前 N 個字節 |
-s <偏移量> | 從指定偏移量開始 |
-u | 使用大寫十六進制字母 |
-c <列數> | 每行顯示的字節數(默認 16) |
示例(每行 8 字節,大寫十六進制):
xxd -u -c 8 test.txt
5. 典型示例
(1) 查看 ELF
文件頭
xxd /bin/ls | head -n 10
輸出:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 9850 0000 0000 0000 ..>......P......
...
7f 45 4c 46
=\x7fELF
(ELF 文件魔數)。
(2) 生成隨機十六進制數據
head -c 16 /dev/urandom | xxd -p
輸出:
a1b2c3d4e5f67890
6. 總結
- 查看十六進制:
xxd <文件>
- 純十六進制模式:
xxd -p <文件>
- 十六進制→二進制:
xxd -r -p <十六進制文件> > <輸出文件>
- 網絡調試:
echo "414243" | xxd -r -p | nc <IP> <端口>
- 二進制分析:
xxd /bin/ls | less
xxd
是處理二進制和十六進制數據的利器,適用于逆向工程、網絡調試、文件分析等場景! 🔍