一、Hex 编辑基础概念
Hex(十六进制)编辑器是一种直接操作文件原始字节数据的工具。与文本编辑器不同,它不以字符编码解释文件内容,而是将每个字节显示为两位十六进制数(00 到 FF),同时附带对应的 ASCII 字符表示。这使得 Hex 编辑器成为以下场景的必备工具:
- 逆向工程:分析可执行文件、固件、恶意软件的结构
- 数据恢复:修复损坏的文件头、分区表
- 安全研究:修改二进制补丁、分析网络协议包
- 嵌入式开发:调试 ROM、引导扇区
- 游戏修改:编辑存档文件、修改游戏参数
二、命令行工具:快速查看与轻量编辑
命令行 Hex 工具是 Linux/Unix 系统的标配,适合脚本集成、远程服务器操作和快速查看。
1. xxd —— 最经典的 Hex 查看器
xxd 随 Vim 套件分发,是 Linux 上最常用的 Hex 查看命令。
基本查看:
xxd file.txt
输出格式为三列:偏移地址(00000000)、十六进制数据(4865 6c6c 6f)、ASCII 字符(Hello)。
常用参数:
| 参数 | 说明 | 示例 |
|---|---|---|
-p |
纯十六进制输出(无地址/ASCII) | xxd -p file.bin |
-l N |
限制输出前 N 字节 | xxd -l 256 file.bin |
-s 0x100 |
从偏移 0x100 开始 | xxd -s 0x100 file.bin |
-c 32 |
每行显示 32 字节 | xxd -c 32 file.bin |
-r |
反向转换:Hex 转回二进制 | xxd -r -p hex.txt > file.bin |
-b |
二进制输出而非十六进制 | xxd -b file.bin |
-u |
大写十六进制字母 | xxd -u file.bin |
实战示例:
# 查看 ELF 文件头(前 64 字节)
xxd -l 64 /bin/ls
# 提取文件中间某段数据
xxd -s 0x1000 -l 512 firmware.bin > segment.hex
# 将修改后的 Hex 转回二进制
xxd -r -p modified.hex > patched.bin
# 在 Vim 中直接 Hex 编辑
:%!xxd # 转为 Hex 模式编辑
:%!xxd -r # 编辑后转回二进制保存
2. hexdump —— 格式化输出专家
hexdump 提供高度自定义的输出格式,适合需要特定排版的场景。
# 标准十六进制 + ASCII 输出
hexdump -C file.bin
# 只显示十六进制,无 ASCII
hexdump -x file.bin
# 自定义格式:偏移 + 4 字节一组的十六进制
hexdump -e '"%08_ax: " 4/1 "%02x " " |" 4/1 "%_p" "|\n"' file.bin
3. od(Octal Dump)—— POSIX 标准工具
od 是所有 Unix 系统的标准工具,兼容性最好。
# 十六进制单字节输出
od -A x -t x1 file.bin
# 显示所有行(不压缩重复行)
od -A x -t x1 -v file.bin
# 以 32 位整数显示
od -A x -t x4 file.bin
4. hexedit —— 终端交互式编辑器
hexedit 基于 ncurses,提供终端内的交互式 Hex 编辑能力。
安装:
# Debian/Ubuntu
sudo apt install hexedit
# Fedora
sudo dnf install hexedit
# Arch
sudo pacman -S hexedit
操作:
hexedit file.bin # 打开文件编辑
hexedit -d /dev/sda # 以只读模式查看磁盘
| 快捷键 | 功能 |
|---|---|
方向键 / hjkl |
移动光标 |
Insert |
切换插入/覆盖模式 |
Delete / Backspace |
删除字节 |
Ctrl+S |
保存 |
Ctrl+X |
保存并退出 |
Ctrl+C |
放弃更改并退出 |
Tab |
在 Hex 和 ASCII 区域切换 |
/ |
搜索字节序列 |
F1 |
帮助 |
5. hexcurse —— 另一款 ncurses 编辑器
hexcurse 界面更友好,支持自定义每行显示字符数。
sudo apt install hexcurse
hexcurse file.bin
hexcurse -a file.bin # 地址以十进制显示
hexcurse -r 32 file.bin # 每行显示 32 字节
hexcurse -o output.bin file.bin # 指定输出文件
6. hexyl —— 彩色 Hex 查看器
hexyl 用不同颜色区分 ASCII 字符、NULL 字节、空白字符等,视觉效果极佳。
sudo apt install hexyl # 或通过 cargo install hexyl
hexyl file.bin # 彩色输出
hexyl -n 256 file.bin # 只看前 256 字节
三、图形界面工具:可视化与高级分析
1. HxD(Windows)—— 轻量极速之选
HxD 是 Windows 平台上最知名的免费 Hex 编辑器,以极致的轻量和速度著称。
核心特性:
- 支持高达 8 EB(艾字节)的文件,采用内存映射 I/O,打开 50GB 文件仅需 4GB 内存
- 支持原始磁盘编辑和进程内存编辑(
Extras > Open RAM) - 内置校验和计算(CRC32、MD5、SHA 等)
- 文件比对、数据拼接与分割
- 导出为 C/Java/Pascal 数组格式
- 仅 3.19 MB,支持便携版运行
适用场景: 快速查看大文件、磁盘镜像分析、内存调试、基础补丁修改。
局限: 仅支持 Windows;无脚本/插件扩展能力;无二进制模板解析功能。
2. ImHex —— 开源跨平台的“二进制 IDE”
ImHex 是近年来最受安全研究者和逆向工程师欢迎的开源 Hex 编辑器,被誉为“二进制夜视仪”。
核心特性:
- Pattern Language:类 C++ 的自定义模式语言,可定义数据结构并自动高亮解析(类似 010 Editor 的模板,但开源免费)
- 实时反汇编:基于 Capstone 引擎,支持 x86、ARM、MIPS 等多架构
- 节点式数据处理器:可视化连接 XOR、Base64、CRC 等处理节点
- 数据可视化:熵分析直方图、字节分布图
- YARA 规则扫描:快速定位恶意特征码
- 差异对比:高亮两个文件的异同
- 跨平台支持 Windows、macOS、Linux
- 社区维护 100+ 文件格式 Pattern(PE、ELF、PNG、ZIP 等)
安装:
# 各平台均支持,以 Linux 为例
# 下载 AppImage 或从发行版仓库安装
sudo pacman -S imhex # Arch
# 或从 GitHub 下载:https://github.com/WerWolv/ImHex
适用场景: 固件逆向、恶意软件分析、复杂文件格式解析、CTF 取证、协议逆向。
与 010 Editor 对比: ImHex 免费开源,Pattern Language 更灵活;010 Editor 商业闭源,但模板生态更成熟、商业支持更完善。
3. 010 Editor —— 专业级商业工具
010 Editor 是业界标杆级的 Hex 编辑器,以**二进制模板(Binary Templates)**技术闻名。
核心特性:
- 内置 300+ 文件格式模板(EXE、PNG、ZIP、PDF、PCAP 等),一键解析结构化数据
- C-like 脚本语言,支持自动化和自定义分析
- 跨平台(Windows、macOS、Linux)
- 文件比对、直方图、通配符搜索
- 磁盘编辑与进程内存查看
定价: 单用户授权约 $49.95。
适用场景: 专业逆向工程、协议分析、需要商业支持的企业环境。
与 HxD 对比: 010 Editor 功能全面但较重;HxD 免费轻量,适合快速编辑和磁盘操作。两者常互补使用。
4. Bless(Linux)—— 功能全面的 GTK 编辑器
Bless 是 Linux 上功能最丰富的开源 GUI Hex 编辑器之一,采用 GTK 界面。
安装:
sudo apt install bless # Debian/Ubuntu
sudo dnf install bless # Fedora
sudo pacman -S bless # Arch
# 或 Flatpak
flatpak install flathub com.github.afrantzis.Bless
核心特性:
- 多线程处理大文件(超过系统内存限制)
- 多标签页界面
- 多级撤销/重做
- 正则表达式搜索与替换
- 插件架构扩展功能
- 数据转换表(十进制/八进制/十六进制互转)
- 按位运算
- 导出为文本和 HTML
适用场景: Linux 桌面环境下的日常二进制编辑、大文件处理。
5. GHex —— GNOME 原生轻量编辑器
GHex 是 GNOME 桌面环境的官方 Hex 编辑器,界面简洁。
sudo apt install ghex
特性: 基础 Hex/ASCII 视图、搜索替换、格式转换、多层级撤销。适合 Linux 用户的基础需求。
6. Hex Fiend(macOS)—— 极速大文件处理
Hex Fiend 是 macOS 上最优秀的开源 Hex 编辑器。
特性:
- 流畅处理超过 4GB 的大文件
- 多编码支持(ASCII、UTF-8、UTF-16)
- 多层级撤销/重做
- 开源免费
四、工具选型速查表
| 工具 | 平台 | 界面 | 最大文件 | 核心优势 | 适用人群 |
|---|---|---|---|---|---|
| xxd | Linux/Unix | CLI | 无限制 | 快速查看、与 Vim 集成、反向转换 | 开发者、系统管理员 |
| hexedit | Linux/Unix | TUI | 内存限制 | 终端内交互编辑、轻量 | 远程服务器操作 |
| hexcurse | Linux/Unix | TUI | 内存限制 | 友好的 ncurses 界面 | 终端用户 |
| hexyl | Linux/Unix | CLI | 无限制 | 彩色输出、视觉区分字节类型 | 快速查看 |
| HxD | Windows | GUI | 8 EB | 极速、磁盘/内存编辑、轻量 | Windows 用户、数据恢复 |
| ImHex | Win/Mac/Linux | GUI | 超大文件 | Pattern Language、反汇编、节点处理器 | 逆向工程师、安全研究员 |
| 010 Editor | Win/Mac/Linux | GUI | 理论无限 | 二进制模板、脚本、商业支持 | 专业逆向工程师 |
| Bless | Linux | GUI | 超内存 | 多线程、插件、功能全面 | Linux 桌面用户 |
| GHex | Linux | GUI | 大文件 | GNOME 原生、简洁 | Linux 基础用户 |
| Hex Fiend | macOS | GUI | 4GB+ | 极速、开源、macOS 原生 | macOS 用户 |
五、实战操作示例
场景 1:修改二进制文件中的字符串
# 1. 查找目标字符串位置
xxd -p program.bin | tr -d '\n' | grep -o "48656c6c6f" # "Hello" 的 Hex
# 2. 用 hexedit 打开并定位到该位置修改
hexedit program.bin
# 在 Hex 区域直接修改对应字节,保存退出
场景 2:修复损坏的 PNG 文件头
# PNG 标准文件头应为:89 50 4E 47 0D 0A 1A 0A
# 查看当前文件头
xxd -l 8 corrupted.png
# 用 xxd 生成补丁
echo "0000000: 8950 4e47 0d0a 1a0a" | xxd -r - corrupted.png
场景 3:分析固件结构(使用 ImHex)
- 打开 ImHex,加载
firmware.bin - 加载对应的 Pattern 文件(如
intel_hex.pat) - 自动高亮显示各字段:魔数、版本号、段表、入口点
- 右键可疑区域 →
Disassemble→ 选择 ARM/Thumb 架构 - 使用书签标记关键结构,导出分析报告
场景 4:磁盘取证(使用 HxD)
- 打开 HxD →
Extras→Open Disk - 选择物理磁盘或分区
- 搜索特征字节序列(如 NTFS 的
EB 52 90) - 修复分区表或提取特定扇区数据
- 计算磁盘镜像的 MD5/SHA256 校验和
六、注意事项与最佳实践
- 始终备份原文件:Hex 编辑直接修改原始字节,一个误操作可能导致文件永久损坏。
- 了解文件格式:修改 ELF/PE 可执行文件时,需注意对齐、校验和、重定位表等结构,盲目修改会导致程序无法运行。
- 大小端序(Endianness):多字节数据(如整数、地址)在内存中的存储顺序因架构而异,编辑时需确认目标平台的大小端模式。
- 编码问题:ASCII 之外的字符(如中文 UTF-8)在 Hex 编辑器中可能显示为多个字节,修改时需保持编码完整性。
- 权限问题:编辑系统文件或磁盘设备需要 root 权限,操作前确认理解后果。
Hex 查看与编辑是二进制世界的“显微镜”和“手术刀”。从命令行的 xxd、hexedit 到图形化的 ImHex、010 Editor,不同工具覆盖了从快速查看到深度逆向分析的完整光谱。掌握这些工具,意味着获得了直接对话计算机底层数据的能力——这在安全研究、逆向工程和系统调试中是不可或缺的核心技能。
原文 https://blog.csdn.net/2301_79518550/article/details/145337529