天天看點

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

逆向工程師如果對裝置代碼和固件系統進行檢測時,發現了許多經過加密處理的固件檔案,該怎麼辦?在本文中我将通過一個真實的故事來教大家如何利用一些基礎的計算機知識以及簡單的邏輯來應對這一問題。

因為這篇文章主要是要教會大家如何去應對這樣的情況,并且給大家提供一個行之有效的解決方案,是以這裡我們并不會指明測試所用的數據機來自哪家廠商,也不會列出具體檔案的真實檔案名。

另外這種方法對最新款的數據機可能已經不适用了,但在舊版本的數據機或者其他生産商所生産的Modem中應該仍可以進行測試。

1. 了解檔案結構

首先,我們需要了解該數據機固件的檔案結構。這款數據機中有三個更新版本:

其所有的檔案均采用了TLV(Tag-Length-Value) 格式。比如檔案v3.7.4_image.bin的結構:

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

資料值均采用了小端格式 (一種存放二進制化資料的格式(所有數字的低位組放在最前面)),其标簽(Tag)的長度為16位,資料長度(Length)值為32位。

标簽0×7240位于第一個嵌套級中,其資料占滿了整個檔案。标簽0×0003(0x0A位元組)位于第二嵌套級中(标簽0×7240的資料在其中);接下來的是标簽0×0000(0x4BDE0E位元組),标簽0×0001,以及0×0002(它們并不在上面給出的截圖中)。第三層嵌套(含有0×0003的資料)封裝了标簽0×0002的資料并且存儲在長度為四個位元組版本号的030704FF的檔案中。

其他标簽的描述均位于第二嵌套級的其他标簽中(0×0000,0×0001,以及0×0002),而他們被單獨“打包”存放在一個固定的檔案中。即每一個檔案都會有一個單獨的名稱(标簽0×0001),标志(标簽0×0002),大小(标簽0×0003),長度為16位元組的值(标簽0×0004),以及檔案資料(标簽0×0005)。

下面是對檔案中的所有标簽内容進行分析之後所顯示出的結果:

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

如此以來我們便可以對固件的所有元件(CPUImage,AutoInstall,以及WebUI)中的加密資料進行檢索擷取了。我們發現這三個固件版本中的AutoInstall檔案其實是一樣的,3.7和v3.7.4版本中的WebUI檔案内容也是相同的,但CPUImage檔案并不一樣。

2、通過算法來進行猜測

标簽0×0004位于第三嵌套級中,該标簽包含有一個長度為16位元組的資料集,且被設定了非常高的熵。它很有可能是一個哈希值,目前最受歡迎的128位雜湊演算法就是MD5了。

在我們擷取到的檔案中,很多位元組的偏移量數值都是相同的。下圖顯示的是兩個檔案的起始部分(不同之處已經進行了高亮顯示):

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

然而如果你試圖想要在單個檔案中找到相同的資料序列無異于是癡人說夢。

這樣看似乎是使用了一個半随機的伽馬常數對這些資訊進行了處理。RC4算法是目前最為流行的一種加密算法,它剛好可以實作此功能。

3、使用常量密鑰對密碼流進行破解

如果幾條資訊使用了相同的密鑰來進行加密(例如伽馬),對它們進行異或計算就有可能得到它們的部分内容:0位元組将會傳回明文。

而對AutoInstall檔案和WebUI檔案分析後我們獲得了一個非常有趣的結果:

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

我們可以看到在該檔案中有兩個片段:一個 FAT12軟碟的鏡像和一個CD-ROM的鏡像。

4、擷取伽馬值的資料

在安裝驅動或者軟體的時候,數據機通常傾向于建立一個虛拟光驅來連接配接,這裡就使用了這一概念。

然而當數據機與新型的作業系統(例如Windows 7/8,Linux,或者Mac OS X)連接配接時,虛拟光驅要麼就不顯示,要麼就是顯示一兩秒鐘之後然後消失。是以我們專門找了一台2002年生産的Windows XP筆記本電腦來進行該測試。此時虛拟光驅顯示了大約五秒鐘,這已經足夠我們讀取出所有邏輯卷中的資料并擷取到鏡像。

該檔案大小為606,208=0×94000位元組,這與AutoInstall檔案的大小完全一緻。鏡像的MD5值為897279F34B7629801D839A3E18DA0345,與标簽0×0004的值相同。

現在,我們隻需要用AutoInstall檔案與這個鏡像檔案進行異或,就能得到伽馬值的資料了。這個伽馬值可以用于解密CPUImage和WebUI檔案中的加密資料 (大小分别為4,971,976個位元組和2,093,056個位元組)。

5. 重組一個軟碟鏡像

如果你能破解這些加密資料,并且使用零位元組填充WebUI檔案的剩餘部分,然後将所有内容編譯成一個FAT鏡像檔案,那麼你将能夠看到檔案系統的整體結構和一些檔案的内容。

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

如果你的數據機連接配接到http:///dir,你将看到相同的檔案系統,并能夠下載下傳任意檔案。

而要恢複WebUI檔案,你需要通過與boot,FAT表以及目錄描述資料一緻的Web接口來下載下傳檔案。唯一的困難在于根目錄下的 ru檔案夾,其内容描述超出了606208位元組,是以其内容需要單獨恢複。

根據web接口的資料,這個 ru目錄必須包含以下檔案:

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

幸運的是,根目錄下的eng檔案夾具有相同的檔案名和建立日期,為了得到正确的ru檔案夾,應進行如下改變:

根目錄下含有大量的ru目錄的叢集(0×213)

使用web接口去識别檔案大小(分别是3981 = 0xF8D, 5327 = 0x14CF, 以及3328 = 0xD00 )

最開始的叢集是很容易猜到的。根據boot資料來看,每一個叢集占據了四個分區或者2048位元組。ru目錄僅要求一個叢集,Manualupdate.html 和 Network.html-兩個叢集Index.html-三個叢集。由于叢集會被按照順序寫在一個空的磁盤中,檔案将會分别從 0×214, 0×216以及 0×219開始。ru目錄恢複的資料如下所示:

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

包含刻錄磁盤鏡像的ru folder 和所有檔案内容,并且還有一個明文的WebUI 檔案,從固件頭檔案我們得到其MD5 是48D1C3194E45472D28ABFBEB6BBF1CC6 。

至此,我們已經破解了AutoInstall檔案和WebUI檔案,并且還得到了 2,093,056位元組的伽馬值資料。

6. 校驗CPUImage檔案

自然而然地,當我們破解了CPUImage檔案的前2MB資料之後,我們就可以進行反彙編了。在對處理器的指令系統(ARM 小端)和下載下傳基址(第一個0 x34c位元組必須跳過)以及找到更新解密位置進行了解之後,我們獲得了下列代碼:

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

如上所示,其中加密密鑰位于0x2ADC60,長度為0×15 個位元組并被RC4 算法加載。但是0x2ADC60=2,808,928,是以這個密鑰已經超出了我們所知的伽馬值了。

在更早的固件版本(v3.7和v2.8)中,這個密鑰也超出了其解密域(分别為0x2AD70C和0x2A852C)。

7、再一次進行異或運算

如果對3.7版本和3.7.4版本的CPUImage檔案進行異或計算,我們将會得到位于0x34C + 0x2AD70C = 0x2ADA58的字元串“SungKook ”James” Shin”。這是一個RC4密鑰,被用于對所有更新檔案進行加密。

現在,我們隻需要确認這個RC4密鑰能與我們之前所擷取的伽馬值相比對,并且CPUImage的MD5值能與固件系統的檔案header相比對。

到這裡,我們可以對固件本身進行測試了,而這将是一個完全不同的故事。

使用Dmitry Sklyarov的方法來破解一款流行的4G數據機

本文轉自 K1two2 部落格園部落格,原文連結:http://www.cnblogs.com/k1two2/p/5222970.html  ,如需轉載請自行聯系原作者

繼續閱讀