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

news/2025/10/29 22:12:19/文章来源:https://www.cnblogs.com/migrator/p/19173617
[TOOL] 二进制文件阅读与分析入门指南

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

目录
  • 二进制文件阅读与分析入门指南
    • 一、file —— 识别文件类型(入门首选)
    • 二、xxd —— 最常用的十六进制查看器
    • 三、hexdump / hd —— 经典十六进制查看方式
    • 四、strings —— 提取文件中的可读文本
    • 五、bvi —— 可交互的二进制编辑器
    • 六、readelf —— 查看 ELF 程序结构(进阶)
    • 七、ldd —— 查看程序依赖的共享库
    • 八、常用工作流程示例
    • 九、工具选型总结表

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


一、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=$1echo "=== 文件类型分析 ==="
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"; thenecho "ELF头信息:"readelf -h "$FILE" | head -10echo -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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/950289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[TOOL] hexdump: 二进制文件阅读指南

[TOOL] hexdump: 二进制文件阅读指南$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");DeepSeek生成(2025年10月29日22:03:39)目录Hexdump 二进制文件阅读指…

题解:CodeForces 715E Complete the Permutations

题意 对于两个排列 \(p,q\),定义它们的距离为将 \(p\) 变成 \(q\) 的最小操作次数,其中每次操作可以交换 \(p\) 中两个元素的位置。现在给定两个长度为 \(n\) 的排列 \(p,q\),其中一些位置被替换成了 \(0\)。对于每…

[TOOL] hexdump: 二进制文件分析指南

[TOOL] hexdump: 二进制文件分析指南$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");DeepSeek生成(2025年10月29日22:03:39)目录Hexdump 二进制文件分析指…

Day26-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\Threadcase

等待唤醒机制 生产者和消费者package Basic.src.com.Threadcase.Threadwaitnotify;public class Desk {/** 控制生产者和消费者的执行* *///桌子上是否有面条 0;没有面条 1:有面条public static int foodFlag = 0;…

题解:CF715E Complete the Permutations

题意 对于两个排列 \(p,q\),定义它们的距离为将 \(p\) 变成 \(q\) 的最小操作次数,其中每次操作可以交换 \(p\) 中两个元素的位置。现在给定两个长度为 \(n\) 的排列 \(p,q\),其中一些位置被替换成了 \(0\)。对于每…

日总结 20

YARN(Yet Another Resource Negotiator)是 Hadoop 生态中的核心集群资源管理与任务调度框架,旨在解耦 Hadoop 1.x 中 MapReduce 的计算与资源管理功能,通过 ResourceManager(全局资源管理)、NodeManager(节点资…

重组蛋白与传统蛋白的区别:从来源到特性的全面解析

在生命科学研究中,蛋白质作为重要的实验试剂,其获取方式和特性直接影响研究结果。传统蛋白与重组蛋白在多个维度存在显著差异,本文将系统解析二者的区别。 一、定义与来源的本质差异 传统蛋白通常指从生物体组织、器…

交个朋友电商学苑直播运营集训班4.0第三天笔记

交个朋友电商学苑直播运营集训班4.0第三天笔记第一个直播现状诊断错误的方向,1 开播不说话 抖音必须要规避的坑,1.闲聊式的直播 2 状态要激情,要讲卖点,为啥要买 3 纯硬搬 4 广告式账号 应该怎么做 引流短视频…

网球馆自动预约框架的反调试

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

吃薯片2025有机 - Gon

随机说话竟然已经是最后一年了吗我大抵是不爱说话的 DAY -2 神秘普转提(讲真的,感觉那四位应该是看了标题觉得是信心赛所以就搬过来了 T2写了甲烷了的暴力然后就艹过去了 一整个下午加晚上没写啥东西,但还是感觉好累…

[TOOL] 个人必备工具

[TOOL] 个人必备工具$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");更新时间:2025年10月29日21:47:59 个人bash配置: [SHELL] 个人BASH配置与美化目录01 …

JTCatch 缓存部署与使用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CSP-S 2025 游记

序 即使把我关在果壳之中,我仍自以为是无限空间之王 ——《哈姆雷特》Day -2 上午模拟赛,炸炸炸 const int mod=998224353 我是唐必啊啊啊啊啊啊啊啊啊 下午放了《蜂鸟》,旋律很美,在我大脑里旋转了一个下午,但歌…

arm.dll armaccess.dll arkut.dll arkdd32.dll arizonadll.dll aritmoperacedll.dll ariesengine.dll - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

顺利通过试用期:避开三大陷阱,掌握三个关键点

拿到心仪的offer并成功入职,无疑是职业生涯中的一个重要里程碑。然而,这仅仅只是成功的一半——如何顺利通过试用期,才是真正考验的开始。作为前大厂技术总监,我审批过无数新员工的转正申请,包括校招应届生、工作…

UOS镜像下载

下载地址 https://url89.ctfile.com/d/31504589-156236091-a84012?p=3997 (访问密码: 3997).zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280…

NordicNRF91系列蜂窝产品在偏远地区低轨道卫星物联网连接领域取得关键突破

成功采用Nordic nRF9151模组与Sateliot 低轨道卫星网络实现传输,标志着通过非地面网络实现全球范围物联网覆盖的业界里程碑 挪威奥斯陆 – 2025年10月17日 – 全球低功耗无线通信半导体解决方案领导者 Nordic Semicon…

深入解析:Inception V3--J9

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

ODT 学习笔记

本文同步发表于 博客园。有问题请不吝指出。 ODT (Old Driver Tree)也叫珂朵莉树(Chtholly Tree),也被叫做是颜色段均摊,由某毒瘤巨佬在 CF896C 中引入。 ODT 是一种暴力数据结构,感觉和 dsu on tree、势能线段…

Aout Me!

一个来自广州市,华南师范大学附属中学的高二学生。 一名普通的 OIer。 主要成就:NOI2025 rk29; Codeforces LGM; 命制了一些你可能做过的题目。轻喷 qwq。