智慧型裝置逆向工程之外部Flash讀取與分析篇

2022-07-15 05:21:09 字數 2170 閱讀 7824

目前智慧型家居裝置的種類很多,本文內容以某智慧型豆漿機為例完成對其的韌體提取和分析。

了解裝置內部執行邏輯,逆向後有條件更改原有邏輯

通過逆向後的**找到可利用的漏洞或原有隱藏功能

首先,準備好螺絲刀,鑷子等工具。把裝置拆解。取出裝置主控板。如下圖:

正面,其中紅圈所在的黑色小板是wi-fi模組,上面的8腳flash的晶元已通過吹焊臺的熱風機取下。

反面圖當目標為取得裝置的執行邏輯時,首先需要找到執行邏輯存放的位置。以stm32 mcu的開發板為例,會有多種boot模式,其中一種boot模式是從mcu內部的flash中啟動,也就是說系統啟動初期的邏輯在這種模式下是從mcu內部flash讀出的。但是這部分flash的大小受限,通常容量情況為32kb ~ 512kb。那麼其他的邏輯會通過spi或者匯流排介面連線的外部flash或sd卡等儲存裝置存放。針對這一款裝置,除了mcu內部flash外,板上還預製了一顆容量為2mb的外部flash。

圖中紅圈的晶元就是從裝置wi-fi模組上取下的flash

flash廠商品牌常見的有: winbond,gigadevice等。

以gigadevice gd25q16名稱為例

flash的內容可以通過程式設計器讀取,首先在pc端安裝相關的驅動和軟體(在購買時會由商家提供)後,就可以讀取flash內容了。對程式設計器的選擇上建議一定要帶上插座,這樣可以減少晶元的吹焊次數。此外還有晶元夾,可以夾住板上的flash晶元,直接嘗試讀取,免於取下的過程,但是實測成功率不是很理想。

一般連線pc後,程式設計器配套的軟體會自動識別出晶元型別和大小等資訊。如果沒有可手工嘗試選擇近似的型號(根據晶元名稱)。

點選讀取,待讀取結束後,可以將讀出的內容儲存為bin檔案。至此就獲取到了wi-fi模組上flash中的二進位制內容。

在得到bin檔案後就可以開始逆向分析了。

從裝置mac位址以及一些bin檔案中特徵字串和wi-fi模組的外觀形態判斷,該裝置wi-fi模組使用的是上海漢楓公司(之後簡稱hf)提供的hf-lpt100s-10。該模組包含一枚hf自研的mcu(hf-mc101,內建128kb sram)。而模組上的flash大小2mb。

將bin檔案放入ida,在載入的第一步中設定cpu型別為arm little end(根據該款裝置的cpu型別)。之後會出現記憶體選項,如下圖。這裡可選設定ram的起始位置和大小,這一步將方便之後設定ram中的變數名,建議根據晶元實際情況進行設定。這裡ram是128kb,起始位置是0x20000000。

這時可以建立乙個ida py指令碼,將得到的資訊新增其中,在ida中標註出各個segment:

在進一步分析**前可以先標記出基礎庫,例如標記出檔案管理,記憶體操作等相關函式。一般有兩種方式,第一種從檔案自身的除錯列印資訊或者符號表包含的資訊反推出函式;第二是載入獲取的flirt類資訊到當前檔案。

flirt是fast library identification and recognition technology的縮寫,可以在中找到相關的描述。簡單的說就是通過建立庫函式中使用彙編指令串以及各類引用的特徵值匹配到當前當目標檔案,標註出已知的各種函式名。當然定位函式,除了單純指令串特徵值外,諸如bindiff類外掛程式也會通過函式內邏輯,和相互間呼叫關係來確定函式,這樣的好處是提高庫函式的命中範圍和提高準確度。類似技術運用在函式定位上可以參見下面的外掛程式:

針對lpt100s,有兩類庫檔案可以匯入,一類是keil自身的一些庫,還有就是在hf提供的sdk中包含的庫lpb100kernel.lib。通過flirt工具包,可以從這些庫中提取出sig檔案。步驟如下(以lpb100kernel.lib為例):

在bin目錄下找到對應系統的目錄,執行pelf lpb100kernel.lib lpb100kernel.pat

sigmake lpb100kernel.pat lpb100kernel.sig這時會報錯,開啟lpb100kernel.exc,處理衝突函式並刪掉開頭處的注釋

重新執行該條命令

將生成的lpb100kernel.sig複製到ida安裝目錄\sig\arm\下

在ida介面中通過load file -> flirt signature file方式載入通過上面步驟生成的sig檔案。之後就能生成如下效果了。

除了sdk中的庫檔案,keil自帶的c基礎庫在keil安裝目錄下的armcc\arm\lib\中,可以按照同樣過程生成sig檔案,並載入至分析檔案中。這樣mem,str等基本的函式呼叫也會匹配上。

至此就能更方便的檢視內部邏輯了。

piaca和redfree

軟體工程 之逆向工程

逆向工程 reverse engineering 又稱反向工程是根據已有的東西和結果,通過分析來推導出具體的實現方法。比如你看到別人寫的某個exe程式能夠做出某種漂亮的動畫效果,你通過反彙編 w32dasm 反編譯和動態跟蹤 od 等方法,分析出其動畫效果的實現過程,這種行為就是逆向工程 不僅僅是反...

逆向工程之彙編基礎

1.1 暫存器 以下是通用暫存器 除了非通用暫存器還有eip指令指標暫存器 多數字串指令通常把ecx用作計數器,把esi作為源指標,把edi作為目的指標,通常情況下棧操作會使用ebp和esp。除了通用暫存器和eip指令暫存器外還有6個16位段暫存器 段 cs 資料段 ds 棧段 ss 額外段 es ...

逆向工程之ELF檔案格式分析

1.elf全稱executable and linkable format,可執行連線格式,elf格式的檔案用於儲存linux程式。elf檔案 目標檔案 格式主要三種 一般的 elf 檔案包括三個索引表 elf header,program header table,section header t...