設定adb環境變數最好以Android命名
設定-->關於平板電腦-->版本號(單機五次)
設定-->系統-->高階-->開發者選項-->USB偵錯
開啟USB偵錯目的是為了後續讓JEB能夠獲取模擬器上的程序
軟體安裝包和破解參考吾愛破解文章JEB動態偵錯Smali-真機/模擬器(詳細,新手必看)
使用的吾愛破解中大佬課程《安卓逆向那點事》中提供的練習demo第四關來練習動態偵錯。
android:debuggable="true"
在對第四關進行練習時,需要輸入金鑰,可以對關鍵字進行搜尋
找到關鍵字所在位置
解析為java程式碼後發現控制程式邏輯的是一個if語句,在執行check()函數後,通過check()函數的返回值來判斷if語句的執行邏輯,這裡只需要將check()函數的返回值修改為真即可成功繞過金鑰判斷。
雙擊檢視check()函數,這裡有檢測提交的金鑰是否帶關鍵字flag{}
在函數返回值的地方判斷變數v7是否與一串加密資料是否一致,如果一致就返回為真。有兩種方式可以繞過金鑰檢測,一種是從逆向的角度將return的值固定為true,另外一種方法是通過動態偵錯的方式我們可以通過斷點偵錯來獲取這段加密資料,從而成功獲取金鑰。
逆向修改返回值:
在修改返回值的方法中,我們可以將程式碼中檢測flag{}關鍵字的檢測返回值一併進行固定修改,順帶將關鍵字檢測也一併繞過
在以下三個返回值的地方我們需要全部固定為true
對應的smail程式碼如下
在return返回之前使用const進行重新賦值,由於JEB不能重新打包,使用MT管理器進行修改,修改效果如下
在進行修改後對apk進行重新編譯後並簽名安裝即可成功繞過,繞過效果如下,關鍵字檢測以及金鑰檢測全部成功繞過。
斷點偵錯金鑰:
在進行斷點偵錯的時候首先判斷需要在那裡下斷點,我們想要通過斷點偵錯得到什麼。
我們需要通過斷點偵錯使得check()函數的最終返回值為true,需要得到與v7進行對比的一串金鑰,所以我們在進行斷點偵錯的時候需要在金鑰得到的時候、返回值之前進行斷點,並且在傳送偵錯資料時必須帶有flag{}關鍵字通過關鍵字檢測才能使程式正常執行。
開啟偵錯
下斷點,在下斷點時需要在smail語法檢視中
傳送資料,在開啟斷點偵錯後,進行傳送資料的時候並不會提示金鑰錯誤,因為程式在執行過程中被斷點偵錯攔截了
成功斷點後,一步一步執行程式的同時觀察和分析區域性變數
斷點偵錯執行過程checkNotNullExpressionValue()-->encodeToString(),在encodeToString()函數返回值發現特殊變數
在執行到areEqual()函數時,我們傳送的資料是和該變數進行比較。
通過嘗試將金鑰換成flag{VEFREgwEAA==}即可成功認證金鑰。
安裝Magisk、LSPosed以及演演算法助手
XPosed框架因只支援安卓8及以下,故高版本應使用Magisk+LSPosed
參考文章雷電模擬器9.0.56安裝Magisk+LSPosd
演演算法助手
通過LSPosed模組中所提供得整合功能可以大大節省時間。
在使用演演算法助手時,需要現在LSPosed模組中將進行偵錯得目標APP選中,系統框架是必須勾選的。
勾選目標APP後,在將演演算法助手中得APP勾選即可
LSPosed模組中,具有很多整合的功能
比如抓取加密演演算法
在面對具有加密演演算法得目標時候,使用演演算法助手中抓取演演算法功能可以很快獲取到加密演演算法得位置,或者加密演演算法採用得加密金鑰、偏移量等關鍵資訊
通過演演算法助手啟動APP在登入時呼叫加密演演算法,呼叫結束後可以在演演算法助手得紀錄檔處看到加密演演算法得呼叫過程以及加密細節
在演演算法助手功能中有一項功能可以新增自定義hook
所謂hook技術,通俗來講就是可以改變程式得執行邏輯,類似與bp抓包得時候修改封包再將封包放出,hook可以將程式中得變數或者返回值進行修改。
在新增hook時,需要將關鍵程式得執行邏輯搞清楚,將關鍵變數或者返回值進行修改。
例如在之前案例中得某小說APP中,通過關鍵字定位到關鍵邏輯,進行反編譯後分析程式執行邏輯
if語句是否執行根據y5得返回值來判斷,如果y5得返回值為true,即可成功進入if語句。我們可以通過自定義hook模組將y5得返回值固定。
使用JEB將滑鼠放置在方法上即可檢視方法得詳細資訊
根據y5方法所在得類,以及返回值型別構造自定義hook
將所新增的hook勾選後,使用演演算法助手啟動即可
在沒有勾選自定義得hook模組時,目標APP正常顯示邏輯,vip並沒有成功開通
在勾選自定義hook後,啟動之後目標APP成功開通vip
在演演算法助手得紀錄檔記錄中可以看到演演算法助手通過自定義得hook將目標APP中得y5()方法進行了攔截並修改了返回值。