0x01發現設備
一旦有線刷模式的三星手機通過USB連接上PC,三星的USB轉COM口驅動ssudmdm.sys就會在註冊表
鍵爲\HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM增加值項\Device\ssudmdmXXXX,如下圖1:
圖1
很明顯,三星的設備都是\Device\ssudmdm開頭,後面的XXXX是由驅動分配的序號,這裏配合Windows的USB的熱插拔消息能很好的發現三星設備。
0x02 集成安安的三星刷機shell
安安的三星的刷機shell其實是改過後的odin3,如圖2,通過修改程序入口處, LoadLibrary一個名爲CONDLG32.dll的動態鏈接庫以達到在進程中修改odin3程序行爲的目的。我們不妨調用它的shell與
圖 2
odin3進行交互線刷,能省去不少精力。相應的shell文件以及其依賴的文件全部放在報告中odin文件夾下。
詳細的交互流程請見報告中src文件夾下的demo工程http://download.csdn.net/detail/autohacker/9438947
圖3
全部邏輯全部在函數startshell裏面,startshell的參數說明如下:
Id – 線刷ID , shell會通過這個id去查找註冊表查找對應的串口號,所以我們需要先準備好註冊表相應的值項(詳見代碼)
deviceName– 串口設備名 , 就是上一節我們介紹的\Device\ssudmdmXXXX
comport – 串口號
romFileName– 刷機包路徑 , 這裏即支持安安的刷機包,也支持三星原版的刷機包
通過匿名管道重定向shell的輸出流後,我們能清晰地看到整個詳細的刷機進程,如下圖
圖4
0x03 如何提取安安的刷機包
安安的dx3刷機文件是一種對tar格式的刷機rom的壓縮加密之後的自定義文件格式,它通過hook住kernel32.CreateFileW,kernel32.ReadFile等文件操作函數實現一個微型文件沙盒從而對dx3文件進行解密並無縫調用odin3的相關線刷函數,如下圖5,kernel32.ReadFile的函數開頭處被inline hook。
圖5
因此,研究它的文件解密算法還不如直接注入到shell進程裏面去調用被它hook住的相關函數,具體邏輯請參見報告中src文件夾下的dumptar工程,它是一個dll工程,我們需要把dumptar.dll注入到shell進程裏面去,因此這裏採用微軟detours裏面的工具setdll將這個dll寫入到shell的導入表裏面去,如下圖:
運行安安優化大師進行刷機既可以將刷機tar文件解密到c:\parker.tar。
0x04 總結
安安解鎖三星機型的具體邏輯在rom包的相關文件中,直接拷貝安安刷機包中aboot.mbn即可實現對三星手機解鎖。