本帖最后由 gclome 于 2020-7-3 20:41 编辑
原文链接:设备固件提取小结
一、常见设备类型-按片外片内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
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 通过厂商网站下载升级包:
这里面就有多种情况了,有很多厂家直接提供固件下载,现在安全意识提高了,下载的固件很多都加密了,下载后还需要解密,有的固件已经不提供下载了,需要到设备管理界面联网升级,这个可以通过抓包来分析固件地址,也能提取到固件。 六、总结:这些都是平时干活遇到的设备,讲得比较简单。有机会讲解下固件提取之后的仿真和反汇编操作。大家多多点赞哦。写的不好,说得也不够全面,也有说得不对的地方,各位大佬多多谅解。
|