3.1. 固件解包

3.1.1. 固件

在电子系统和计算中,固件是一种特定的计算机软件类,它为设备的特定硬件提供低级控制。固件可以为设备的更复杂的软件提供标准化的操作环境,或者对于较不复杂的设备,充当设备的完整操作系统,执行所有的控制、监视和数据操作功能。包含固件的设备的典型例子是嵌入式系统、消费设备、计算机、计算机外设等。几乎所有电子设备都包含固件。

计算机固件是计算机系统中不可缺少的底层基础系统。这些固件往往是以软件的形式固化存储在硬件芯片中。计算机主板上有最重要、最核心的计算机固件,通过称为BIOS(Basic Input / Output System,基本输入输出系统),计算机加电时,中央处理器(CPU)取得并执行的第一条指令,就储存在固件中。

3.1.2. 获取固件

  • 直接从开发团队、制造商/供应商或用户获取

  • 使用制造商提供的项目从头编译

  • 从供应商的网站获取

  • 从论坛、博客,或官方评论中获取

  • 设备更新进行中间人(MITM)获取

  • 通过 UART、JTAG、PICit等直接从硬件中提取

  • 嗅探“硬件组件中的串行通信”中的更新服务器请求

  • 通过移动应用程序中的硬编码接口

  • 将固件从引导加载程序(如:U-boot )转储到闪存或通过tftp的网络转储

  • 从主板卸下闪存芯片(如:SPI )或 MCU,以进行离线分析和数据提取

3.1.3. 文件系统

常见的文件系统类型有squashfs、ubifs、romfs、rootfs、jffs2、yaffs2、cramfs、initramfs等。

3.1.4. 常见模式

无加密,使用binwalk等工具解包即可。

加密但是在运行后会解密,提取nvram可获得固件。

若之前版本存在无加密固件,可通过劫持升级过程获得新版本固件。