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