[TOOL] 二进制文件阅读与分析入门指南

ChatGPT生成(2025年10月29日22:11:13)

二进制文件阅读与分析入门指南


一、file —— 识别文件类型(入门首选)

简介:
file 命令可以识别文件类型,是分析任何未知文件的第一步。
它能判断文件是否是文本、图片、压缩包、可执行程序(ELF)、音频等。

# 查看文件类型
file example.bin

# 显示MIME类型(如 text/plain、application/octet-stream)
file -i example.bin

# 查看压缩文件内部的类型
file -z archive.gz

# 示例输出:
# example.bin: data
# /bin/ls: ELF 64-bit LSB executable, x86-64, dynamically linked, stripped

二、xxd —— 最常用的十六进制查看器

简介:
xxd 能将二进制文件以“十六进制 + ASCII”形式显示,非常直观。
是最常见、最轻量的二进制阅读工具。

# 显示整个文件的十六进制内容
xxd file.bin

# 只显示前256个字节(l = length)
xxd -l 256 file.bin

# 从偏移0x100处开始显示(s = skip)
xxd -s 0x100 file.bin

# 反向操作:将十六进制文本恢复成二进制
xxd -r hex.txt binary.out

输出示例:

00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000  MZ..............
00000010: b800 0000 0000 0000 4000 0000 0000 0000  ........@.......

左边是偏移量,中间是十六进制数据,右边是可显示字符。


三、hexdump / hd —— 经典十六进制查看方式

简介:
hexdumpxxd 类似,用于查看文件内容的十六进制表示。
不同的是它的显示风格稍有区别,也很适合做文件对比。

# 以经典格式显示文件内容
hexdump -C file.bin

# 显示16进制,每两字节为一组
hexdump -x file.bin

# 简短命令(hd 是 hexdump -Cv 的简写)
hd file.bin

四、strings —— 提取文件中的可读文本

简介:
strings 可以从二进制文件中提取出人类可读的字符串。
非常适合查找程序中的提示信息、路径、域名、版本号等。

# 提取所有可见字符串
strings file.bin

# 只显示长度 ≥ 8 的字符串
strings -n 8 file.bin

# 在所有段中查找(包括数据段)
strings -a file.bin

# 显示字符串在文件中的偏移地址
strings -t x file.bin   # 十六进制偏移
strings -t d file.bin   # 十进制偏移

示例输出:

/lib64/ld-linux-x86-64.so.2
libc.so.6
Hello, world!

五、bvi —— 可交互的二进制编辑器

简介:
bvi 类似于 Vim,但用于直接编辑二进制文件。
你可以查看、修改、搜索特定字节,非常适合需要人工修改数据的场景。

# 打开一个二进制文件进行编辑
bvi file.bin

# 编辑界面中可以:
#   - 移动光标浏览字节内容
#   - 使用 / 搜索十六进制或文本
#   - 修改数据后保存(:wq)

六、readelf —— 查看 ELF 程序结构(进阶)

简介:
如果文件是一个 Linux 可执行程序(ELF 格式),readelf 能读取其中的详细结构信息,
包括头部信息、段、符号表、动态链接信息等。

# 查看 ELF 文件头信息
readelf -h program

# 查看段(Sections)
readelf -S program

# 查看程序头(Program Headers)
readelf -l program

# 查看动态库依赖
readelf -d program

# 查看符号表
readelf -s program

快速判断是否为 ELF 文件:

file program | grep -q "ELF" && echo "是 ELF 文件"

七、ldd —— 查看程序依赖的共享库

简介:
ldd 命令用于显示可执行文件或动态库依赖的其它库文件。
这是分析 Linux 程序时必备的命令。

# 查看程序依赖的动态库
ldd /bin/ls

# 检查是否有未解析的符号
ldd -r program

八、常用工作流程示例

目标:快速分析一个未知的二进制文件内容

#!/bin/bash
# analyze_binary.sh
# 一个快速分析二进制文件的示例脚本

FILE=$1

echo "=== 文件类型分析 ==="
file "$FILE"     # 判断文件类型

echo -e "\n=== 字符串提取(部分) ==="
strings -n 8 "$FILE" | head -10   # 显示前10个可读字符串

echo -e "\n=== 十六进制预览(前5行) ==="
xxd -l 128 "$FILE"                # 预览前128字节内容

echo -e "\n=== ELF结构检查 ==="
if file "$FILE" | grep -q "ELF"; then
    echo "ELF头信息:"
    readelf -h "$FILE" | head -10
    echo -e "\n依赖库:"
    ldd "$FILE"
fi

九、工具选型总结表

任务目标 推荐工具 示例命令
识别文件类型 file file file.bin
查看文件内容 xxd / hexdump xxd -l 128 file.bin
提取字符串 strings strings -n 8 file.bin
编辑二进制数据 bvi bvi file.bin
分析ELF结构 readelf readelf -h program
查看依赖库 ldd ldd /bin/ls

这份整理的逻辑是:

  1. 先看文件是什么(file)
  2. 再看里面的数据(xxd / hexdump)
  3. 提取出可读的文本(strings)
  4. 如需修改,用 bvi
  5. 如果文件是程序,再看结构(readelf)和依赖(ldd)
posted on 2025-10-29 22:04  风惊庭前叶  阅读(1)  评论(0)    收藏  举报