设备固件提取小结

一、常见设备类型-按片外片内ROM划分

其实很多CPU都同时支持片内和片外ROM,比如老的C51到现在流行的STM32。为啥要划分这两种类型呢,主要片外提取固件基本可以暴力提取,直接把存储芯片焊接下来用相应的读取设备就能读取。

程序或者系统保存在芯片内的一般都没外挂存储的,例如下面:

片外rom我们最常见的手机、路由器这些都是片外rom:

二、常见系统分类

 NON-OS:这类嵌入式系统不包含任何操作系统,可能会包含事件调度器。
 RT-OS:这类嵌入式系统运行功能紧凑但具有很强实时性的RTOS。
 Rich-OS:这类嵌入式系统运行功能非常齐全的操作系统。

下图只列取部分常见系统:

三、片内rom 程序提取的方式:

3.1 软件手段

这个需要芯片本身支持读取调试,例如avrdude系列芯片熔丝位没锁死isp,使用usbasp接入板子对应接口

通过avrdude -cusbasp -pm8 -U flash:r:mega8_servo.hex:i 提取固件

3.2 物理破解手段

硬件破解手段就是直接对芯片进行物理破坏进行破解,比如stm32系列芯片就可以进行物理破解。avr系列芯片如果融丝位锁死ISP,也可以通过物理手段破解。下面以stm32为栗子:

首先要对芯片进行开片

当晶片裸露出来后,那么,我们就要用到高倍显微镜和FIB(聚焦离子束设备),用这两种设备,查找芯片的加密位置,通过改变其线路的方法,将加密芯片变为不加密的一个状态,然后再用编程器,将芯片内部的程序读取出来。

这里要注意 stm32 一般都会进行加密 读取出来后也需要进行解密工作

四、片外rom 程序提取的方式:

片外存储的类型非常多常见的类型如:

EEPROM、SPI FLASH、NOR FLASH、SD卡、硬盘等,这里只做简单的列举。

也有通过接口进行分类:

如spi 接口、i2c接口、串口、c51用的并行中线、SD卡的sdio、硬盘的sata等,甚至安卓手机里等pcie

这类固件提取就很方便直接用编程器进行读取或者sd卡读卡器和电脑的通用存储接口进行读取。

4.1spiflash固件提取 

spiflash可以很方便提取,可以把芯片取下放到读卡器或者直接用夹子就能读取flash里的固件。

4.2安卓设备ROM提取:

适用于没有root权限拿不到Recovery

4.3 x86设备固件提取

x86设备一般都是硬盘,不管是机械硬盘还是ssd,都是标准的pc接口,这种一般都会出现在防火墙,审计设备上。

五、接触不到物理设备但是有权限的设备提取固件:

5.1 能通过网络链接并且有相应权限的:

busybox命令齐全操作就很方便,直接用dd命令或者mtd备份到文件人后scp传出来

我遇到过一个比较精简的系统,dd命令这些都被精简了,这种情况在嵌入式设备里很常见,毕竟flash有时候1m 、2m这种情况很多。

很多时候可以直接用tftp直接把固件传送出来

tftp  -p -r /dev/mtdblock1 192.168.200.28

5.2 通过厂商网站下载升级包:

这里面就有多种情况了,有很多厂家直接提供固件下载,现在安全意识提高了,下载的固件很多都加密了,下载后还需要解密,有的固件已经不提供下载了,需要到设备管理界面联网升级,这个可以通过抓包来分析固件地址,也能提取到固件。

六、总结:

这些都是平时干活遇到的设备,讲得比较简单。有机会讲解下固件提取之后的仿真和反汇编操作。大家多多点赞哦。写的不好,说得也不够全面,也有说得不对的地方,各位大佬多多谅解。

*本文作者:question,转载请注明来自FreeBuf.COM