APP攻防--安卓逆向&JEB動態除錯&LSPosed模組&演算法提取&Hook技術

了了青山見發表於2023-11-07

JEB環境配置

  1. 安裝java環境變數(最好jdk11)
  2. 安裝adb環境變數

設定adb環境變數最好以Android命名

  1. 啟動開發者模式

設定-->關於平板電腦-->版本號(單機五次)
image.png

  1. 開啟USB除錯

設定-->系統-->高階-->開發者選項-->USB除錯
image.png
開啟USB除錯目的是為了後續讓JEB能夠獲取模擬器上的程式
image.png

  1. 安裝啟用JEB

軟體安裝包和破解參考吾愛破解文章JEB動態除錯Smali-真機/模擬器(詳細,新手必看)

JEB動態除錯

使用的吾愛破解中大佬課程《安卓逆向那點事》中提供的練習demo第四關來練習動態除錯。

android:debuggable="true"
  • JEB中開啟的apk必須也加入了動態除錯才能和模擬器中的程式進行互動,檢視方法如下

image.png
在對第四關進行練習時,需要輸入金鑰,可以對關鍵字進行搜尋
image.png
找到關鍵字所在位置
image.png
解析為java程式碼後發現控制程式邏輯的是一個if語句,在執行check()函式後,透過check()函式的返回值來判斷if語句的執行邏輯,這裡只需要將check()函式的返回值修改為真即可成功繞過金鑰判斷。
image.png
雙擊檢視check()函式,這裡有檢測提交的金鑰是否帶關鍵字flag{}
image.png

在函式返回值的地方判斷變數v7是否與一串加密資料是否一致,如果一致就返回為真。有兩種方式可以繞過金鑰檢測,一種是從逆向的角度將return的值固定為true,另外一種方法是透過動態除錯的方式我們可以透過斷點除錯來獲取這段加密資料,從而成功獲取金鑰。
image.png

逆向修改返回值:
在修改返回值的方法中,我們可以將程式碼中檢測flag{}關鍵字的檢測返回值一併進行固定修改,順帶將關鍵字檢測也一併繞過
在以下三個返回值的地方我們需要全部固定為true
image.png
image.png

對應的smail程式碼如下
image.png
image.png
在return返回之前使用const進行重新賦值,由於JEB不能重新打包,使用MT管理器進行修改,修改效果如下
image.pngimage.png
在進行修改後對apk進行重新編譯後並簽名安裝即可成功繞過,繞過效果如下,關鍵字檢測以及金鑰檢測全部成功繞過。
image.png

斷點除錯金鑰:
在進行斷點除錯的時候首先判斷需要在那裡下斷點,我們想要透過斷點除錯得到什麼。
我們需要透過斷點除錯使得check()函式的最終返回值為true,需要得到與v7進行對比的一串金鑰,所以我們在進行斷點除錯的時候需要在金鑰得到的時候、返回值之前進行斷點,並且在傳送除錯資料時必須帶有flag{}關鍵字透過關鍵字檢測才能使程式正常執行。
image.png
開啟除錯
image.png
下斷點,在下斷點時需要在smail語法檢視中
image.png
image.png
傳送資料,在開啟斷點除錯後,進行傳送資料的時候並不會提示金鑰錯誤,因為程式在執行過程中被斷點除錯攔截了
image.png
成功斷點後,一步一步執行程式的同時觀察和分析區域性變數
image.png

斷點除錯執行過程checkNotNullExpressionValue()-->encodeToString(),在encodeToString()函式返回值發現特殊變數
image.png
在執行到areEqual()函式時,我們傳送的資料是和該變數進行比較。
image.png
透過嘗試將金鑰換成flag{VEFREgwEAA==}即可成功認證金鑰。

LSPosed模組

安裝Magisk、LSPosed以及演算法助手
XPosed框架因只支援安卓8及以下,故高版本應使用Magisk+LSPosed
參考文章雷電模擬器9.0.56安裝Magisk+LSPosd
演算法助手
透過LSPosed模組中所提供得整合功能可以大大節省時間。
在使用演算法助手時,需要現在LSPosed模組中將進行除錯得目標APP選中,系統框架是必須勾選的。
image.png
image.png

勾選目標APP後,在將演算法助手中得APP勾選即可

LSPosed模組中,具有很多整合的功能
比如抓取加密演算法
在面對具有加密演算法得目標時候,使用演算法助手中抓取演算法功能可以很快獲取到加密演算法得位置,或者加密演算法採用得加密金鑰、偏移量等關鍵資訊

image.png

透過演算法助手啟動APP在登入時呼叫加密演算法,呼叫結束後可以在演算法助手得日誌處看到加密演算法得呼叫過程以及加密細節
image.png

image.png

自定義Hook

在演算法助手功能中有一項功能可以新增自定義hook
所謂hook技術,通俗來講就是可以改變程式得執行邏輯,類似與bp抓包得時候修改資料包再將資料包放出,hook可以將程式中得變數或者返回值進行修改。

在新增hook時,需要將關鍵程式得執行邏輯搞清楚,將關鍵變數或者返回值進行修改。

例如在之前案例中得某小說APP中,透過關鍵字定位到關鍵邏輯,進行反編譯後分析程式執行邏輯
image.png
image.png
if語句是否執行根據y5得返回值來判斷,如果y5得返回值為true,即可成功進入if語句。我們可以透過自定義hook模組將y5得返回值固定。
使用JEB將滑鼠放置在方法上即可檢視方法得詳細資訊
image.png
根據y5方法所在得類,以及返回值型別構造自定義hook
image.png
image.png
將所新增的hook勾選後,使用演算法助手啟動即可
image.png

在沒有勾選自定義得hook模組時,目標APP正常顯示邏輯,vip並沒有成功開通
image.png
在勾選自定義hook後,啟動之後目標APP成功開通vip
image.png
在演算法助手得日誌記錄中可以看到演算法助手透過自定義得hook將目標APP中得y5()方法進行了攔截並修改了返回值。
image.png

相關文章