用途:面向 MIPS 架构 ELF 样本与路由器、嵌入式固件中解出的可执行文件做逆向逻辑分析,支持大端(mips)与小端(mipsel)两种端序。非 MIPS 架构、仅需解包固件、仅分析文件系统或需整体运行固件的情形不适用,应转向固件提取、rootfs 分析或整体仿真等其它技能。
工具准备:反编译器可选 Ghidra 或 IDA,需确认处理器变体与端序;binwalk/unblob 用于固件扫描;readelf/file 确认架构与字节序;qemu-user 做用户态动态验证,大小端为独立二进制 qemu-mips 与 qemu-mipsel;python3 作为辅助。工具应先验证再使用,动态执行默认置于沙箱并做网络隔离。
基本流程:先由整体固件解包,确认目标是 MIPS(file 输出含 MIPS),再用 readelf -h 的 Data 字段判断端序;确认后导入反编译器并选对变体。反编译时需注意 MIPS 特有语义:pre-R6 普通分支与跳转后紧跟的延迟槽在两个路径都执行,Branch Likely 类仅在 taken 时执行槽指令、not-taken 时 annul;MIPS32r6 删除 branch-likely 并新增 compact 分支,但部分指令仍带延迟槽。调用约定上 $a0-$a3 传参、$v0 返回值、$ra 返回地址、$s 系列被调用者保存;PIC 间接调用常见 jalr $t9;$gp 通常指向 .got 中间,用于数据访问,剥离符号时需手工确认基址。跨 256MB 段的调用由 lui+addiu+jalr 跳板完成,勿误判为业务逻辑。
路由器固件专项:定位 httpd、mini_httpd、boa、lighttpd 及厂商改名版本与 web 目录,通过字符串搜 GET、HTTP/1 定位请求循环;从 system/popen/exec 调用回溯参数来源,排查认证绕过与命令注入;busybox 多 applet 共用 main 并按 argv[0] 分发,可用 busybox --list 或符号表定位;配置与密码哈希常见于 /etc/passwd、/etc/shadow 及配置目录,哈希含 $1$、$5$/$6$ 等格式。动态验证可用 qemu-mips -L <rootfs路径> ./target 及 -strace,仅作行为验证,主逻辑以静态为主。
常见陷阱:延迟槽执行流错位(含 likely 的 annul 语义)、端序判断错导致全盘乱码、无重定位时 $gp 基址靠推算、厂商自定义头与多层压缩、反编译器对伪指令处理差异、busybox 多 applet 误判。以上均需回归指令级核实。其它依赖、平台差异与安装渠道的细节暂未在资料中完整提供。