JEB環(huán)境配置
- 安裝java環(huán)境變量(最好jdk11)
- 安裝adb環(huán)境變量
設(shè)置adb環(huán)境變量最好以Android命名
- 啟動開發(fā)者模式
設(shè)置-->關(guān)于平板電腦-->版本號(單機(jī)五次)
- 開啟USB調(diào)試
設(shè)置-->系統(tǒng)-->高級-->開發(fā)者選項(xiàng)-->USB調(diào)試
開啟USB調(diào)試目的是為了后續(xù)讓JEB能夠獲取模擬器上的進(jìn)程
- 安裝激活JEB
軟件安裝包和破解參考吾愛破解文章JEB動態(tài)調(diào)試Smali-真機(jī)/模擬器(詳細(xì),新手必看)
JEB動態(tài)調(diào)試
使用的吾愛破解中大佬課程《安卓逆向那點(diǎn)事》中提供的練習(xí)demo第四關(guān)來練習(xí)動態(tài)調(diào)試。
- 在進(jìn)行動態(tài)調(diào)試前必須在apk中加入允許動態(tài)調(diào)試,一般在application標(biāo)簽中加入即可。其他加入動態(tài)調(diào)試方法相較于加入代碼來說有點(diǎn)復(fù)雜,可以參考《安卓逆向這檔事》五、1000-7=?&動態(tài)調(diào)試&Log插樁
android:debuggable="true"
- JEB中打開的apk必須也加入了動態(tài)調(diào)試才能和模擬器中的進(jìn)程進(jìn)行互動,查看方法如下
在對第四關(guān)進(jìn)行練習(xí)時(shí),需要輸入密鑰,可以對關(guān)鍵字進(jìn)行搜索
找到關(guān)鍵字所在位置
解析為java代碼后發(fā)現(xiàn)控制程序邏輯的是一個(gè)if語句,在執(zhí)行check()函數(shù)后,通過check()函數(shù)的返回值來判斷if語句的執(zhí)行邏輯,這里只需要將check()函數(shù)的返回值修改為真即可成功繞過密鑰判斷。
雙擊查看check()函數(shù),這里有檢測提交的密鑰是否帶關(guān)鍵字flag{}
在函數(shù)返回值的地方判斷變量v7是否與一串加密數(shù)據(jù)是否一致,如果一致就返回為真。有兩種方式可以繞過密鑰檢測,一種是從逆向的角度將return的值固定為true,另外一種方法是通過動態(tài)調(diào)試的方式我們可以通過斷點(diǎn)調(diào)試來獲取這段加密數(shù)據(jù),從而成功獲取密鑰。
逆向修改返回值:
在修改返回值的方法中,我們可以將代碼中檢測flag{}關(guān)鍵字的檢測返回值一并進(jìn)行固定修改,順帶將關(guān)鍵字檢測也一并繞過
在以下三個(gè)返回值的地方我們需要全部固定為true
對應(yīng)的smail代碼如下
在return返回之前使用const進(jìn)行重新賦值,由于JEB不能重新打包,使用MT管理器進(jìn)行修改,修改效果如下
在進(jìn)行修改后對apk進(jìn)行重新編譯后并簽名安裝即可成功繞過,繞過效果如下,關(guān)鍵字檢測以及密鑰檢測全部成功繞過。
斷點(diǎn)調(diào)試密鑰:
在進(jìn)行斷點(diǎn)調(diào)試的時(shí)候首先判斷需要在那里下斷點(diǎn),我們想要通過斷點(diǎn)調(diào)試得到什么。
我們需要通過斷點(diǎn)調(diào)試使得check()函數(shù)的最終返回值為true,需要得到與v7進(jìn)行對比的一串密鑰,所以我們在進(jìn)行斷點(diǎn)調(diào)試的時(shí)候需要在密鑰得到的時(shí)候、返回值之前進(jìn)行斷點(diǎn),并且在發(fā)送調(diào)試數(shù)據(jù)時(shí)必須帶有flag{}關(guān)鍵字通過關(guān)鍵字檢測才能使程序正常執(zhí)行。
開啟調(diào)試
下斷點(diǎn),在下斷點(diǎn)時(shí)需要在smail語法視圖中
發(fā)送數(shù)據(jù),在開啟斷點(diǎn)調(diào)試后,進(jìn)行發(fā)送數(shù)據(jù)的時(shí)候并不會提示密鑰錯誤,因?yàn)槌绦蛟趫?zhí)行過程中被斷點(diǎn)調(diào)試攔截了
成功斷點(diǎn)后,一步一步執(zhí)行程序的同時(shí)觀察和分析局部變量
斷點(diǎn)調(diào)試執(zhí)行過程checkNotNullExpressionValue()-->encodeToString(),在encodeToString()函數(shù)返回值發(fā)現(xiàn)特殊變量
在執(zhí)行到areEqual()函數(shù)時(shí),我們發(fā)送的數(shù)據(jù)是和該變量進(jìn)行比較。
通過嘗試將密鑰換成flag{VEFREgwEAA==}即可成功認(rèn)證密鑰。
LSPosed模塊
安裝Magisk、LSPosed以及算法助手
XPosed框架因只支持安卓8及以下,故高版本應(yīng)使用Magisk+LSPosed
參考文章雷電模擬器9.0.56安裝Magisk+LSPosd
算法助手
通過LSPosed模塊中所提供得集成功能可以大大節(jié)省時(shí)間。
在使用算法助手時(shí),需要現(xiàn)在LSPosed模塊中將進(jìn)行調(diào)試得目標(biāo)APP選中,系統(tǒng)框架是必須勾選的。
勾選目標(biāo)APP后,在將算法助手中得APP勾選即可
LSPosed模塊中,具有很多集成的功能
比如抓取加密算法
在面對具有加密算法得目標(biāo)時(shí)候,使用算法助手中抓取算法功能可以很快獲取到加密算法得位置,或者加密算法采用得加密密鑰、偏移量等關(guān)鍵信息
通過算法助手啟動APP在登錄時(shí)調(diào)用加密算法,調(diào)用結(jié)束后可以在算法助手得日志處看到加密算法得調(diào)用過程以及加密細(xì)節(jié)
自定義Hook
在算法助手功能中有一項(xiàng)功能可以添加自定義hook
所謂hook技術(shù),通俗來講就是可以改變程序得執(zhí)行邏輯,類似與bp抓包得時(shí)候修改數(shù)據(jù)包再將數(shù)據(jù)包放出,hook可以將程序中得變量或者返回值進(jìn)行修改。
在添加hook時(shí),需要將關(guān)鍵程序得執(zhí)行邏輯搞清楚,將關(guān)鍵變量或者返回值進(jìn)行修改。
例如在之前案例中得某小說APP中,通過關(guān)鍵字定位到關(guān)鍵邏輯,進(jìn)行反編譯后分析程序執(zhí)行邏輯
if語句是否執(zhí)行根據(jù)y5得返回值來判斷,如果y5得返回值為true,即可成功進(jìn)入if語句。我們可以通過自定義hook模塊將y5得返回值固定。
使用JEB將鼠標(biāo)放置在方法上即可查看方法得詳細(xì)信息
根據(jù)y5方法所在得類,以及返回值類型構(gòu)造自定義hook
將所添加的hook勾選后,使用算法助手啟動即可文章來源:http://www.zghlxwxcb.cn/news/detail-745960.html
在沒有勾選自定義得hook模塊時(shí),目標(biāo)APP正常顯示邏輯,vip并沒有成功開通
在勾選自定義hook后,啟動之后目標(biāo)APP成功開通vip
在算法助手得日志記錄中可以看到算法助手通過自定義得hook將目標(biāo)APP中得y5()方法進(jìn)行了攔截并修改了返回值。文章來源地址http://www.zghlxwxcb.cn/news/detail-745960.html
到了這里,關(guān)于APP攻防--安卓逆向&JEB動態(tài)調(diào)試&LSPosed模塊&算法提取&Hook技術(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!