超详细!binwalk+Ghidra固件逆向工程实战指南
【免费下载链接】binwalk Firmware Analysis Tool 项目地址: https://gitcode.com/gh_mirrors/bi/binwalk
你是否还在为固件分析中文件提取与逆向脱节而困扰?本文将带你构建从固件解析到代码逆向的全流程自动化工作流,只需3步即可打通binwalk与Ghidra的数据通道,让嵌入式设备固件分析效率提升10倍!
准备工作:环境搭建与工具链配置
安装binwalk核心组件
从源码编译最新版binwalk可获得完整功能支持:
git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk && cargo build --release
编译配置文件位于Cargo.toml,依赖管理脚本参见dependencies/ubuntu.sh。
Ghidra插件安装
- 下载Ghidra 10.4+版本并解压
- 安装File Formats插件:
File → Install Extensions - 启用Binary Analysis插件包
THE 0TH POSITION OF THE ORIGINAL IMAGE
第一步:使用binwalk进行固件解析
基础提取命令
binwalk -eM firmware.bin --directory extracted_firmware
该命令会递归提取固件中的所有文件系统,核心实现逻辑在src/extractors/squashfs.rs和src/extractors/ubi.rs。
高级分析选项
- 熵分析识别加密区域:
binwalk -E firmware.bin - 自定义签名扫描:
binwalk -j signatures/custom.sig firmware.bin签名定义格式参见src/signatures/common.rs
THE 1TH POSITION OF THE ORIGINAL IMAGE
第二步:文件系统索引与筛选
生成文件清单
使用find命令配合binwalk日志生成可导入Ghidra的文件列表:
binwalk -l firmware.log firmware.bin && grep -i "elf" firmware.log > elf_files.txt
日志解析模块实现位于src/json.rs。
关键文件识别
重点关注以下路径文件:
- 可执行文件:
squashfs-root/bin/ - 配置文件:
etc/passwd - 内核镜像:
kernel/uImage(结构解析见src/structures/uimage.rs)
第三步:Ghidra自动化导入流程
脚本开发指南
创建Python脚本实现批量导入(示例代码):
from ghidra.app.script import GhidraScript
from java.io import File
def import_binwalk_files():
with open("elf_files.txt") as f:
for path in f.readlines():
currentProgram = flatapi.openProgram(File(path.strip()))
analyzeHeadless(currentProgram)
Ghidra脚本API文档可参考官方Extension Development Guide。
符号表自动关联
- 从binwalk提取的文件中收集字符串:
strings extracted_firmware/bin/* > symbols.txt - 在Ghidra中导入符号:
File → Import → Symbols - 使用scripts/binwalk-ui工具生成符号映射表
THE 2TH POSITION OF THE ORIGINAL IMAGE
进阶技巧:自定义工作流优化
签名数据库扩展
通过添加厂商特定签名提升识别率,签名文件格式示例:
- name: "Qualcomm Bootloader"
offset: 0x0
signature: "QCOM"
description: "Qualcomm Secure Boot Image"
签名加载逻辑位于src/signatures.rs。
自动化分析报告
配置binwalk生成JSON输出后导入Ghidra:
binwalk -J firmware.json firmware.bin
JSON解析模块实现参见src/json.rs
常见问题解决方案
提取失败处理
当遇到Lzma压缩文件提取错误时:
binwalk --dd '.*\.lzma:lzma' firmware.bin
unlzma -d *.lzma
压缩算法实现位于src/extractors/lzma.rs。
Ghidra类型识别问题
通过修改src/magic.rs中的文件类型定义规则,可优化Ghidra的自动分析准确率。
工作流整合示意图
总结与扩展资源
本工作流已在D-Link DIR-890L等多款路由器固件上验证,完整测试用例参见tests/squashfs.rs。更多高级用法可查阅:
- 官方文档:README.md
- 内存优化指南:memory_optimization_guide.md
- 模糊测试模块:fuzzing/src/main.rs
通过binwalk与Ghidra的无缝协作,我们成功构建了从固件解析到代码逆向的全自动化流程。这个工作流不仅适用于路由器固件,还可扩展到物联网设备、工业控制单元等各类嵌入式系统分析场景。
【免费下载链接】binwalk Firmware Analysis Tool 项目地址: https://gitcode.com/gh_mirrors/bi/binwalk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



