一、常見設備類型-按片外片內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

相關文章