超详细!binwalk+Ghidra固件逆向工程实战指南

超详细!binwalk+Ghidra固件逆向工程实战指南

【免费下载链接】binwalk Firmware Analysis Tool 【免费下载链接】binwalk 项目地址: 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插件安装

  1. 下载Ghidra 10.4+版本并解压
  2. 安装File Formats插件:File → Install Extensions
  3. 启用Binary Analysis插件包

THE 0TH POSITION OF THE ORIGINAL IMAGE

第一步:使用binwalk进行固件解析

基础提取命令

binwalk -eM firmware.bin --directory extracted_firmware

该命令会递归提取固件中的所有文件系统,核心实现逻辑在src/extractors/squashfs.rssrc/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

符号表自动关联

  1. 从binwalk提取的文件中收集字符串:strings extracted_firmware/bin/* > symbols.txt
  2. 在Ghidra中导入符号:File → Import → Symbols
  3. 使用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的自动分析准确率。

工作流整合示意图

mermaid

总结与扩展资源

本工作流已在D-Link DIR-890L等多款路由器固件上验证,完整测试用例参见tests/squashfs.rs。更多高级用法可查阅:

通过binwalk与Ghidra的无缝协作,我们成功构建了从固件解析到代码逆向的全自动化流程。这个工作流不仅适用于路由器固件,还可扩展到物联网设备、工业控制单元等各类嵌入式系统分析场景。

【免费下载链接】binwalk Firmware Analysis Tool 【免费下载链接】binwalk 项目地址: https://gitcode.com/gh_mirrors/bi/binwalk

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值