一、固件基础概念

1.1 什么是固件

固件这个词,我做了十几年逆向才真正吃透它的含义。说白了,固件就是「固化在硬件里的软件」。它不像你电脑上的Word,想删就删,想装就装。固件是焊死在芯片里的,或者说,是专门为某块硬件量身定做的操作系统和应用程序的合体。

我习惯这么理解:固件 = 引导程序 + 操作系统内核 + 文件系统 + 应用程序。这四个部分打包在一起,烧录到Flash芯片里,上电就能跑。你想想看,你的路由器、交换机、防火墙,一通电就能工作,靠的就是固件。

核心特征:

  • 存储在非易失性存储器中(NOR Flash、NAND Flash、eMMC)
  • 上电后自动执行,无需人工干预
  • 与硬件紧密耦合,换一块板子可能就跑不起来
  • 更新频率低,通常以年为单位

1.2 固件与软件的区别

这个问题我经常被问到。很多刚入行的朋友觉得,固件不就是软件吗?嗯,从代码层面看确实都是二进制,但从工程角度看,差别大了去了。

对比维度 固件 普通软件
存储介质 ROM、Flash、eMMC 硬盘、SSD、光盘
更新方式 烧录、刷写、JTAG 安装包、覆盖安装
运行环境 裸机或RTOS Windows、Linux、macOS
调试难度 高(需要示波器、逻辑分析仪) 低(IDE自带调试器)
故障后果 设备变砖,可能无法恢复 重装系统即可

我在项目中遇到过一台思科交换机,升级固件时断电了。结果呢?设备直接变砖,串口都不输出任何信息。最后只能拆机,用编程器把Flash芯片拆下来重新烧录。这就是固件和软件的区别——软件崩了最多蓝屏,固件崩了,硬件就废了。

避坑指南:我曾经因为搞混了固件和普通软件的概念,在逆向分析时走了弯路。普通软件可以依赖操作系统提供的API,但固件里很多功能是直接操作寄存器的。你如果按软件逆向的思路去分析固件,会发现很多函数调用地址根本不在内存映射范围内——因为它们直接访问的是硬件寄存器地址。

1.3 思科设备固件概述

思科的固件体系,说实话,是我见过最复杂的之一。它不像家用路由器那样,一个uImage就搞定。思科设备,尤其是中高端交换机路由器,固件结构是分层的、模块化的。

我习惯把思科固件分成三个层级:

  1. Bootloader层:通常是ROMMON(思科自己的引导程序),负责硬件初始化、加载操作系统镜像。我记得第一次逆向ROMMON时,发现它居然有自己的命令行界面,可以执行一些底层诊断命令。
  2. 操作系统层:IOS、IOS-XE、IOS-XR、NX-OS。不同产品线用不同的操作系统,每个系统的固件格式都不一样。比如IOS是.bin文件,IOS-XE是.pkg文件,NX-OS是.bin或.ova文件。
  3. 文件系统层:思科设备内部有一个完整的文件系统,存放配置文件、日志、核心转储等。常见的格式有SquashFS、JFFS2、YAFFS2。

个人经验:我建议你在分析思科固件前,先搞清楚目标设备用的是哪个操作系统。不同系统的固件结构差异很大,分析方法也不同。比如IOS的固件是扁平的,所有功能都在一个.bin文件里;而IOS-XE的固件是分层的,包含Linux内核、控制平面、数据平面等多个组件。

下面这张图是我自己整理的思科固件知识体系,帮你快速建立整体认知:

思科固件知识体系 固件 = 引导程序 + 内核 + 文件系统 + 应用 Bootloader层 ROMMON / U-Boot 操作系统层 IOS / IOS-XE / NX-OS 文件系统层 SquashFS / JFFS2 Bootloader层详解 • 硬件初始化(CPU、内存、外设) • 加载操作系统镜像到内存 • 提供命令行诊断接口 操作系统层详解 • IOS:传统单体架构,.bin格式 • IOS-XE:Linux + 控制平面,.pkg格式 • NX-OS:数据中心专用,.bin/.ova格式 文件系统 配置文件 核心转储 日志文件 固件逆向分析 = 理解这三层结构 + 掌握各层提取/解包/分析方法 思科固件逆向分析 · 第一章

这张图把思科固件的三层结构串起来了。你从上往下看,最顶层是固件的定义,中间是三大层级,最下面是每层的具体内容。我个人觉得,搞懂这张图,你就掌握了思科固件逆向的「地图」——以后不管拿到什么固件,先定位它在哪一层,再决定用什么工具和方法。

小结一下:

  • 固件是固化在硬件里的软件,与普通软件有本质区别
  • 思科固件分为Bootloader、操作系统、文件系统三层
  • 不同产品线使用不同的操作系统,固件格式也不同
  • 逆向分析前,先搞清楚目标设备属于哪一层、哪个系统

嗯,这一章的内容就到这里。固件基础概念是后面所有章节的基石,你把它吃透了,后面分析具体固件格式、提取文件系统、逆向二进制代码时,就会顺手很多。


公众号:蓝海资料掘金营,微信deep3321