binwalk
2026/5/29工具工具binwalk大约 5 分钟
binwalk
链接
是什么
binwalk 是一款固件分析工具,用于扫描和提取二进制文件中嵌入的文件和数据。它能够识别各种文件格式,包括压缩文件、文件系统、可执行文件、图片、音频等,并自动提取其中的内容。
核心功能:
- 文件扫描:识别二进制文件中嵌入的文件类型
- 自动提取:自动提取嵌入的文件
- 签名扫描:基于文件签名(magic bytes)识别文件类型
- 熵分析:分析文件的熵值,识别加密或压缩区域
- 文件系统支持:支持多种文件系统格式(SquashFS、JFFS2、CramFS 等)
- 压缩格式支持:支持 gzip、bzip2、xz、lzma 等压缩格式
在 CTF Misc 类题目中,binwalk 是分析固件、提取隐藏文件的核心工具。
安装与配置
安装方法
# 方法一:使用 pip 安装(推荐)
pip install binwalk
pip3 install binwalk
# 方法二:使用系统包管理器
# Ubuntu/Debian
sudo apt update && sudo apt install binwalk
# CentOS/RHEL
sudo yum install binwalk
# Arch Linux
sudo pacman -S binwalk
# Kali Linux(预装)
binwalk --version
# 方法三:从 GitHub 安装最新版
git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
python3 setup.py install依赖安装
# 安装提取依赖
sudo apt install squashfs-tools cramfs-tools mtd-utils
sudo apt install p7zip-full unzip
sudo apt install cabextract
# Python 依赖
pip install pyqtgraph # 可选,用于可视化配置文件
# 配置文件位置
~/.binwalk/config
# 魔法签名文件
/usr/lib/python3/dist-packages/binwalk/magic/基本用法
文件扫描
# 扫描文件中的嵌入内容
binwalk firmware.bin
# 详细扫描
binwalk -v firmware.bin
# 显示原始签名匹配
binwalk -R firmware.bin
# 显示包含熵信息
binwalk -E firmware.bin
# 显示文件偏移量
binwalk -o 0x1000 firmware.bin # 从指定偏移开始扫描自动提取
# 自动提取所有嵌入文件
binwalk -e firmware.bin
# 递归提取(提取嵌套的文件)
binwalk -eM firmware.bin
# 指定输出目录
binwalk -e -C output_dir firmware.bin
# 提取特定类型
binwalk -e --dd="zip archive:zip" firmware.bin
# 跳过特定类型
binwalk -e --exclude="gzip" firmware.bin熵分析
# 分析文件熵值
binwalk -E firmware.bin
# 生成熵图
binwalk -E -J firmware.bin # 保存为 PNG 图片
# 熵值说明:
# 高熵值(接近 1.0):可能是加密或压缩数据
# 低熵值(接近 0.0):可能是未压缩的数据或填充签名扫描
# 使用自定义签名
binwalk -R /path/to/magic firmware.bin
# 显示所有匹配(包括误报)
binwalk -A firmware.bin # 显示所有魔术字节匹配
# 只显示特定类型的签名
binwalk --type="zip" firmware.bin文件系统分析
# 识别文件系统类型
binwalk firmware.bin
# 提取文件系统
binwalk -e firmware.bin
# 常见文件系统:
# SquashFS:嵌入式设备常用
# JFFS2:闪存文件系统
# CramFS:压缩只读文件系统
# YAFFS2:Yet Another Flash File System
# EXT2/3/4:Linux 标准文件系统CTF常用技巧
识别文件类型
# 快速识别文件类型
binwalk mystery_file
# 输出示例:
# DECIMAL HEXADECIMAL DESCRIPTION
# 0 0x0 PNG image, 800 x 600, 8-bit/color RGB
# 12345 0x3039 ZIP archive, at least 5 files提取嵌入文件
# 提取所有嵌入文件
binwalk -e mystery_file
# 查看提取结果
ls _mystery_file.extracted/
# 递归提取(处理嵌套文件)
binwalk -eM mystery_file处理图片隐写
# 扫描图片中的嵌入内容
binwalk image.png
# 提取隐藏内容
binwalk -e image.png
# 常见嵌入:
# ZIP 文件(可能包含 flag)
# 文本文件
# 其他图片
# 压缩数据处理固件文件
# 扫描固件
binwalk firmware.bin
# 提取文件系统
binwalk -eM firmware.bin
# 查看提取的文件系统
ls _firmware.bin.extracted/squashfs-root/
# 搜索 flag
find _firmware.bin.extracted/ -name "*flag*" -o -name "*key*"
grep -r "flag{" _firmware.bin.extracted/熵分析判断加密区域
# 分析熵值
binwalk -E firmware.bin
# 高熵区域可能是:
# - 加密数据
# - 压缩数据
# - 随机数据
# 低熵区域可能是:
# - 文本数据
# - 未压缩的代码
# - 填充数据处理多层嵌套
# 递归提取所有层
binwalk -eM firmware.bin
# 可能的嵌套结构:
# 固件 -> 文件系统 -> 压缩文件 -> 另一个文件系统 -> ...
# 每次提取后检查目录
for dir in _*.extracted; do
echo "Checking $dir"
ls "$dir"
binwalk "$dir"/* 2>/dev/null
done配合其他工具使用
# 配合 file 命令
file mystery_file
binwalk mystery_file
# 配合 strings 命令
strings mystery_file | grep -i flag
# 配合 hexdump
hexdump -C mystery_file | head -50
# 配合 dd 手动提取
# 从偏移 0x1000 提取 1000 字节
dd if=mystery_file bs=1 skip=4096 count=1000 of=extracted.bin自定义提取规则
# 使用自定义魔法签名
binwalk -R /path/to/custom_magic firmware.bin
# 指定提取类型
binwalk -e --dd="type:extension" firmware.bin
# 示例:只提取 ZIP 文件
binwalk -e --dd="zip archive:zip" firmware.bin处理损坏的文件
# 跳过损坏的数据继续扫描
binwalk -K firmware.bin
# 强制提取(即使数据损坏)
binwalk -e -d firmware.bin
# 尝试修复文件
# 使用其他工具(如 foremost、scalpel)批量处理
# 批量扫描多个文件
for file in files/*; do
echo "=== $file ==="
binwalk "$file"
done
# 批量提取
for file in files/*; do
binwalk -e "$file"
done搜索特定内容
# 在提取的文件中搜索 flag
find _*.extracted/ -type f -exec grep -l "flag{" {} \;
# 搜索特定字符串
find _*.extracted/ -type f -exec strings {} \; | grep -i "flag\|key\|password"
# 搜索特定文件名
find _*.extracted/ -name "*.txt" -o -name "*.key" -o -name "*.flag"常见问题
提取失败
原因:文件损坏或格式不支持。
解决:
# 尝试使用 -d 选项强制提取
binwalk -e -d firmware.bin
# 检查文件完整性
md5sum firmware.bin
# 使用其他工具尝试
foremost firmware.bin
scalpel firmware.bin提取结果为空
原因:没有识别到嵌入内容。
解决:
# 使用详细扫描
binwalk -v firmware.bin
# 显示所有匹配
binwalk -A firmware.bin
# 手动检查文件头
hexdump -C firmware.bin | head提取速度慢
原因:文件过大或嵌套过深。
解决:
# 限制扫描范围
binwalk -o 0x1000 -l 0x10000 firmware.bin
# 不递归提取
binwalk -e firmware.bin # 不使用 -M缺少依赖工具
解决:
# 安装常用依赖
sudo apt install squashfs-tools cramfs-tools mtd-utils
sudo apt install p7zip-full unzip cabextract
# 安装 binwalk 依赖
pip install binwalk[dev]文件系统提取失败
解决:
# 安装对应的文件系统工具
sudo apt install squashfs-tools # SquashFS
sudo apt install mtd-utils # JFFS2
# 使用 unsquashfs 手动提取
unsquashfs firmware.bin熵分析不准确
原因:默认窗口大小可能不适合。
解决:
# 调整熵分析参数
binwalk -E -N firmware.bin # 不规范化熵值
# 使用其他工具进行熵分析
ent firmware.bin无法识别自定义格式
解决:
- 手动添加魔法签名到 binwalk 的 magic 文件
- 使用十六进制编辑器手动分析
- 编写自定义提取脚本