Benjaminjacob443/firmware-analyzer
GitHub: Benjaminjacob443/firmware-analyzer
一款用 Rust 编写的嵌入式固件侦察工具,通过魔数扫描、熵分析和字符串提取自动化固件安全分析的基础阶段。
Stars: 0 | Forks: 0
# firmware-analyzer
一款使用 Rust 构建的固件分析工具,用于识别嵌入式结构、测量信息熵,并从二进制固件镜像中提取与安全相关的字符串。
该工具作为一个实用的进攻性安全工具,旨在自动化固件分析的第一阶段——即在路由器、IoT 传感器和工业控制器等嵌入式设备上进行漏洞研究之前所需的基础工作。
## 功能说明
接收原始或 gzip 压缩的固件镜像,并输出:
- **签名扫描** — 通过魔数模式匹配和置信度评分,识别已知的文件格式(ELF、SquashFS、gzip、PNG、XZ、U-Boot)
- **熵分析** — 以 4KB 为数据块,计算整个文件的香农熵,以识别压缩、加密和结构化区域
- **字符串提取** — 从低熵区域提取可读字符串,并将其分类为路径、URL 或凭据线索
- **固件映射** — 根据签名位置和间隙分析,推导固件的结构布局
- **JSON 报告** — 将所有发现输出为结构化报告,以便进行后续处理或归档
## 示例输出
对真实的 OpenWrt x86-64 路由器固件镜像运行分析的结果:
File: openwrt.img.gz
Size: 11333679 bytes (11068.05 KB)
=============== Signature Scan (Decompressed) ===============
Total matches: 315 (196 high, 4 medium, 115 low)
[HIGH CONFIDENCE]
[0x000B9BA8] XZ Archive
[0x0125E24D] Linux Kernel zImage
[0x014ACC02] SquashFS (hsqs)
[0x021AF000] PNG Image
...
=============== String Extraction ===============
[INTERESTING STRINGS]
[0x000B50D9] linux /boot/vmlinuz root=PARTUUID=7117db1b-02 ...
[0x0109C028] /etc/ssl/certs/ca-certificates.crt
[0x01099D0B] ../init.d/dropbear
[0x01099E0B] ../init.d/uhttpd
## 工作原理
### 魔数扫描
每种已知的文件格式都以特定的字节序列开头。ELF 二进制文件以 `7F 45 4C 46` 开头。SquashFS 文件系统以 `73 71 73 68` 开头。扫描器会根据已知签名的数据库检查每一个字节偏移量,并根据签名长度和字节特异性分配置信度评分。
### 熵分析
香农熵用于衡量数据的随机性,取值范围在 0.0 到 8.0 之间。压缩数据的得分接近 8.0,纯文本得分约为 4.5,空白区域得分接近 0。通过计算 4KB 数据块的熵值,并将其下降趋势与签名匹配相关联,该工具能够识别固件中的结构边界。
### 字符串提取
仅在低熵区域(低于 4.0)扫描字符串——高熵区域为压缩数据,其中的任何匹配都属于噪声。提取长度超过 4 个字符的字符串,并根据内容将其分为以下类别:路径、URL、凭据线索及其他。
## 使用方法
```
# Build
cargo build --release
# 分析 firmware image
cargo run -- firmware.bin
# 分析 gzip-compressed image
cargo run -- firmware.img.gz
```
该工具会自动检测 gzip 压缩并在扫描前进行解压。分析结果将输出到终端,并保存为 `.report.json` 文件。
## 项目结构
src/
├── main.rs 入口点,参数处理,流程编排
├── scanner.rs 带有置信度评分的魔数签名扫描
├── decompress.rs Gzip 解压层
├── entropy.rs 香农熵分析与可视化
├── strings.rs 可打印字符串的提取与分类
└── report.rs 结构化 JSON 报告生成
## 展现的技能
- **Rust** — 系统编程,所有权,借用,迭代器,泛型
- **二进制分析** — 魔数,文件格式识别,熵分析
- **安全研究方法论** — 固件结构分析,攻击面映射,凭据搜寻
- **进攻性安全工具开发** — 从零开始构建分析工具,而非依赖现有框架
## 测试对象
- OpenWrt 23.05.3 x86-64 路由器固件
## 潜在扩展方向
- SquashFS 提取与挂载
- 针对 CVE 数据库的 ELF 二进制版本指纹识别
- 基于对齐的置信度评分
- 支持额外的压缩格式(LZMA、LZ4)
- 嵌套压缩区域的递归解压
标签:ELF解析, IoT设备安全, JSON报告, OpenWrt, PKINIT, Rust, Shannon熵分析, SquashFS, 二进制分析, 二进制解析, 云安全运维, 可视化界面, 固件分析, 固件映射, 固件逆向, 域名收集, 字符串提取, 安全测试, 嵌入式安全, 嵌入式系统, 工控安全, 攻击性安全, 智能设备安全, 物联网安全, 网络流量审计, 自动化安全工具, 路由器安全, 通知系统, 魔术字节