下面講如何破解官方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軟體刷了。。。。
數字簽名的簽名與驗證
1 數字簽名的簽名過程 數字簽名的操作過程需要有發方的簽名數字證書的私鑰及其驗證公鑰。具體過程如下 首先對代發檔案做雜湊演算法形成數字摘要,在對數字摘要用簽名私鑰做非對稱加密形成數字簽名 之後將以上的簽名和電子檔案原文以及簽名證書的公鑰加在一起進行封裝,形成簽名結果傳送給收方待收方驗證。2 數字簽名...
驗證程式簽名
include include include include pragma comment lib,wintrust pragma comment lib,crypt32.lib bool verifyembeddedsignature const wchar t srcfile bool che...
RSA簽名驗證
1 rsa加密過程簡述 a和b進行加密通訊時,b首先要生成一對金鑰。乙個是公鑰,給a,b自己持有私鑰。a使用b的公鑰加密要加密傳送的內容,然後b在通過自己的私鑰解密內容 2 假設a要想b傳送訊息,a會先計算出訊息的訊息摘要,然後使用自己的私鑰加密這段摘要加密,最後將加密後的訊息摘要和訊息一起傳送給b...