0x5.smali邏輯分析實戰(zhàn)
本文介紹一個手游的內(nèi)購破解來加強對smali邏輯分析的理解,。提綱如下:
-->文中的apk修改僅用于研究學(xué)習(xí),,如涉及權(quán)益侵犯請隨時聯(lián)系處理。 <--
在開始分析和破解前,,我們需要先安裝apk使用,,以確認我們的需求。
進入游戲后,,我們看到有1000的初始元寶,點擊后彈出充值界面,,我們這里定義我們的需求為元寶的內(nèi)購破解,。我們先來了解一下充值流程,進入充值界面:
點擊購買充值后,,彈出了我們熟悉的toast信息框,,內(nèi)容為“游戲試玩期間不允許購買元寶或者道具”。 這里就引入了我們分析的第一步,,字符串搜索,。
0x1.字符串搜索
使用Android Killer將apk反編譯,進入工程搜索一欄,,進行字符串的搜索,。如果直接搜索漢字是無法搜索到結(jié)果的,需要轉(zhuǎn)化為Unicode后搜索:
搜索到兩個結(jié)果,,Define.smali經(jīng)查看是字符串定義用的,,與邏輯無關(guān)。FkddzPay.smali即為我們要找的smali,,然后我們打開分析具體邏輯,,也就進入到了我們的第二步。
0x2.邏輯分析
打開這個smali文件定位到信息框提示的這段代碼:
根據(jù)上圖可以得知,,關(guān)鍵在于是否為試玩的判斷,,即我們無論如何需要去執(zhí)行 cond_0,而不是顯示toast信息框。
這里不再做具體修改步驟書寫,,提供幾個思路,,大家自己嘗試。
1.if-nez變更為if-eqz
2.判斷執(zhí)行之前,,定義v3為非0數(shù)據(jù)
3.判斷前直接執(zhí)行g(shù)oto命令跳轉(zhuǎn)到 cond_0
在這個判斷邏輯修改完畢后,,我們可以正常進入充值界面了:
此時,不管我們是直接關(guān)掉該窗口,,還是都點擊確認之后后再點擊取消,,都會得到如下的toast信息框提示:
我們先進行字符串搜索找到該提示的位置:
很顯然這只是一個toast方法,我們需要知道是誰調(diào)用了它,,來尋找這個邏輯在哪里,。之后我們搜索shopBillingCancel發(fā)現(xiàn)access$800調(diào)用了它,繼續(xù)順藤摸瓜,,尋找調(diào)用access$800的方法,。
之后我們分析搜索的結(jié)果后,在FkddzPay$9$1.smali中定位到這個函數(shù),,并確定這里是邏輯判斷的關(guān)鍵點,。
之后我們繼續(xù)順藤摸瓜,搜索payCancel,,找到調(diào)用的地方,, 并全部將其修改為paySuccess:
保存后編譯運行,元寶的內(nèi)購破解就完成了,,這里不再貼結(jié)果圖片,,大家自己嘗試。接下來我們介紹最后一個思路,。
0x3.函數(shù)替換
在程序運行過程中,,未修改前,我們?nèi)∠灰?,調(diào)用的是payCancel,,如果我們將所有payCancel的函數(shù)內(nèi)容變?yōu)榕cpaySuccess一樣,則也一定會成功,。
這部分相對簡單,,不再做具體解釋,請大家自己嘗試替換和測試,。