上節初步介紹一些硬件基礎知識和分析硬件所須要的基本工具,本篇將講述利用編程器直接讀取芯片固件的方法。 爲了讀取 Flash 芯片的內容,有如下兩種經常使用方式:編程
一、直接將導線鏈接到芯片的引腳,在經過飛線鏈接編程器,進行在線讀取固件;安全
二、把芯片拆焊下來,經過燒錄座編程器,離線讀取固件。網絡
飛線法讀取
經過夾具夾住芯片引腳,而後鏈接編程器讀取芯片內容,經過編程器鏈接芯片須要注意引腳的順序,在 IC 芯片上都會有一個小點,大多數狀況下,小點對應的引腳即爲芯片的第一腳,而鏈接編程器的導線也須要插入編程器上相應的引腳。工具
案例一:讀取中控 F7 門禁固件
拆掉門禁外殼,經過電路圖和芯片印字分析,在主板上有一顆 FM25F04A 存儲芯片,經過夾具鏈接芯片到編程器,在經過專用編程器軟件,對該芯片進行讀取。spa
鏈接完成,肯定引腳接線正確後,打開編程器對應軟件,經過智能識別芯片ID,便可開始讀取固件工做。 如沒法識別,可根據印字說明,嘗試相似的型號,通常狀況下兼容。3d
點擊讀取,便可開始固件提取,成功以後會保存爲 BIN 格式文件,打開便可看到 16 進制的內容,爲下一步分析提供基礎。blog
案例二:讀取某智能攝像頭固件
拆掉攝像頭外殼,經過分析 PCB 上的各個 IC,找到 Flash 存儲芯片。路由
在顯微鏡下,能夠看到是一顆 25L64 型號的 Flash 芯片。class
用夾具鏈接各引腳,並和編程器鏈接,進行固件讀取。監控
識別到芯片型號爲 GD25Q64,點擊讀取,讀取完畢後按照提示保存到文件。
打開保存的 BIN 文件或者查看緩衝區,便可看到固件內容。
在Ubuntu中,用binwalk解包固件,作進一步分析。
案例三:讀取某智能攝像頭固件
打開外殼,在PCB背面發現一顆 Flash 存儲芯片
經過顯微鏡發現芯片型號爲 25L128。
鏈接編程器讀取固件並保存。
案例四:讀取某路由器固件
打開外殼,發現 PCB 上有一顆 Flash 存儲器,但廠商出於安全考慮,把芯片印字塗抹掉了。
在不知道芯片型號的狀況下,咱們鏈接該芯片,讓編程器去嘗試讀取。
經過智能識別,發現編程器沒法識別出具體型號,而由於 Flash 存儲芯片的種類多樣,經過查找又沒法得到該路由器的具體參數,這時咱們經過 UART 串口,讀取出 UBOOT 啓動信息,串口輸出裏面發現了該芯片型號爲 W25Q128BV。
在編程器中選擇該型號,成功提取出固件。
用 binwalk 解包固件。
案例五:讀取某智能電飯鍋固件
拆掉外殼,背面嵌有一塊 PCB,反面是 WIFI 處理芯片,正面爲存儲器,鏈接編程器。
經過印字分析爲25芯片,存儲大小爲 2M 字節,嘗試該型號芯片,成功讀取固件。
案例六:讀取某網絡監控攝像機固件
在 PCB 上找到一塊 25L128 型號的 Flash 存儲芯片。
經過夾具鏈接編程器。
識別到芯片爲 MX25L128,選擇其中一種,成功提取固件。
用binwalk解包固件內容。