官方recovery簽名驗證的破解教程


下面講如何破解官方recovery簽名驗證(這個方法應該是通用的,其他手機可以參考,recovery簽名驗證破解了,也不用費力編譯第三方recovery)

1、從官方ROM里提取recovery.img

2、把recovery.img解出來。。。具體方法可以看沙發。。。我單獨拎出來。。。。

3、sbin/recovery 這個二進制執行文件,拷貝到windowsxp里

4、windowsxp安裝ida64plus這個軟件,這是個反編譯軟件,我網盤里有一個試用版,功能有限制,這個版本能反編譯,但不能保存數據,所以我找到具體改的地方后,再用UltraEdit軟件去改的。如果誰有ida64plus這個軟件功能不受限制的,請共享下。。。。好東西不要自己留着哦。。。。。

5、用ida64plus這個軟件,打開recovery二進制文件,選擇ARM cpu,他自動反匯編出所有函數。

 

6、反匯編成功后,系統問你是否看圖形模式,回答no,進文本模式,然后搜索文本sign,系統會直接找到簽名驗證出錯的那段代碼那里

 

 

7、仔細閱讀那段代碼,極其他的前后代碼,可以發現,系統驗證簽名共兩次,函數是sub_CCE0,這個函數每次返回值在寄存器R0里面。

 

 

看第一個框的代碼最后:
BL sub_CCE0 調用簽名驗證函數
MOV R6, R0 把返回寄存器R0的值,傳輸到R6寄存器備用
CBZ R0, loc_A7B6 系統判斷R0的值,如果是0,就直接跳到loc_A7B6,綠色線
這個可以看出,loc_A7B6其實是跳過了再次驗證的地方,圖中第二個方框。
如果R0是1的話,就不跳轉,順序繼續執行,相當於再次驗證簽名,也就是第二個框

第二個框中代碼的最后:
BL sub_CCE0 調用簽名驗證函數
MOV R6, R0 把返回寄存器R0的值,傳輸到R6寄存器備用
這里沒有判斷,直接順序繼續執行到第三個框,也就是loc_A7B6

第三個框,也就是loc_A7B6這里:
這個框的代碼最后:
CBZ R6, loc_A7DE 
進入這段代碼,是判斷R6的值(前面兩次驗證,都把驗證返回值保留在R6里),
如果是0,就跳到loc_A7DE,也就是第四個框方向,這個方向的代碼是安裝卡刷包,具體請自己往后看。
如果是1,就是最后的紅線方向的代碼,去那里是顯示簽名非法,退出程序,那里具體代碼請自己往后看。


8、鼠標雙點簽名驗證函數sub_CCE0,軟件自動跳到顯示這個函數的具體內容,拉到這個函數的最后,
可以看到從多個方向來的代碼,在結束這個函數前,分別執行了
MOVS R0, #0 這個在左邊的框內
MOVS R0, #1 這個在右邊的小框內
由此,我們知道,驗證函數的返回值,是通過R0寄存器,也印證了前面的代碼。

 

9、到這里,只要把MOVS R0, #1這個1改成0就可以了,表示即使簽名驗證失敗也返回0(0表示成功)
但我這個試用版ida64plus的軟件保存不了,所以,我們先用鼠標點中我們要改的地方,也就是那個1,
然后切換標簽點“Hex view”,就可以看到要修改地方的具體地址5160

10、用UltraEdit軟件打開recovery,找到5160地址,把1改成0保存就可以了,(如果ida64plus能保存就不用這個軟件了)
把改過的recovery拷回recovery.img解包目錄,然后打包,就可以用odin軟件刷了。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM