![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmL3EzNyEDNyQTOwEjMxIjMxITM1EDMy8CXyETL1EDMy8CXwV3Lc12bj5yMoNjLjlGcvw1LcpDc0RHaiojIsJye.jpg)
前言:這一期的破解教程,有新的知識内容出現啦!
這一期破解的遊戲是找不到之前的關鍵字,怎麼破解呢?
破解成功之後,添加一個Toast彈窗提示由XX破解,這操作該如何實作呢?請往下看~
連結: https://pan.baidu.com/s/1dF8jKdF 密碼: 6666
破解步驟:
1.試玩,找不到關鍵字
由圖檔可以看出,這是中國移動的咪咕遊戲,這款遊戲是接入了咪咕遊戲基地的sdk,如果你不懂sdk,那麼我也不會解釋,百度是你的好老師!
遊戲使用了咪咕遊戲基地的sdk,其中的smail檔案一般都有Billing這個關鍵字,那麼我們試着搜尋看看
2.查找Paycallback關鍵字
可以看到,我們經過檔案類型篩選之後,還是有許多的結果,這時我們可以再原來的關鍵字上再加上個pay進行搜尋
嗯,這下子結果就是少了很多了,咪咕遊戲這類sdk,關于支付的類名一般都是含有callback,是以我們可以定位到圖中的三個含有callback的檔案,第一個我就不圈出來了
我們一個個使用工具去檢視其的java僞代碼,則可以再次精确定位到ChinaBillingPayCallBack$1這一個檔案
3.了解支付邏輯
我們檢視ChinaBillingPayCallBack$1這個smail檔案的僞代碼
可以看到,是if與else if的嵌套的分支語句,每個判斷都是給i指派,估計大家看得不太懂,說實話,其實我也不太懂,那個for循環裡面有個setResultCode,其中的參數為i,個人覺得這個應該是支付成功的關鍵代碼,問題就來了,我們不知道i等于幾時,這個setResultCode才是支付成功,這個時候,我們有什麼辦法嗎?答案很簡單,一個個地試,我們将i的值改變,測試APP,就是可以知道i為1的時候,就是會進入支付成功的方法
回到smail檔案中,與之前的java僞代碼對比,可以發現v1就是那個i值,之後,就好辦了,我們跳過所有的判斷語句,修改v1的最後的值進行測試
PS:const/4 v1,0x1 這個的意思為給v1指派為1,如果是const/4 v1,0x2,就是給v1指派為2,我這裡隻是簡單的說明,想要深入的可以百度搜尋一下smail中const指令
我們測試到1,就會發現支付已經成功了,這也算是成功破解了,不過,我覺得還是得再分析分析這smail檔案
4.破解思路
我們分析一下上述的smail檔案,首先,v1接收參數p1的值,之後,判斷參數p1與v2的值,相等的話也就是v1為1,之後向下執行,從前面我們知道,v1為1的時候,就是支付成功的代碼,我們可以删除掉這一行的判斷進而實作破解的功能,不相等的話就是跳轉到cond_1,記住末尾的cond_0和goto_0這兩個,之後會提到
我們從上面跳轉到了cond_1這裡,v2就是被指派為3了,之後,參數p1又是接着與v2比較,相等則是往下執行,也就是給v1指派為3,跳轉到goto_0,也就是之前上面說的地方,不相等就是跳轉到cond_2,以此類推,大家應該能理清楚大概邏輯了吧
PS:大家可能不知道if-ne這個語句的作用,可以直接使用滑鼠放在上面,之後就會浮出提示
兩種方法破解:
上面都有提及到了,這裡寫個總結
1.删除第一個判斷語句,不跳轉到之後去判斷,,v1就是為1
2.在所有判斷結束之後,給v1指派為1
5.增加Toast提示
接下來就是新學的内容了,重點來了!!
首先,先确定開始的界面是哪一個activity,我使用了目前activity 這款APP,之後運作遊戲,左上角就是會有提示,我們可以知道CTRMActivity這個
第二步,我們需要找到這個activity對應的smail檔案,直接搜尋(如果你不嫌麻煩的話,可以找包名,依次地尋找)
我們在a檔案夾那裡,右擊,之後選擇打開方式->打開檔案路徑
第四步,建立一個txt格式檔案,修改檔案名為craker,之後把擴充名改為smali(呃,好像發現我之前都是寫成了smail,大家注意下啊,我就不修改了)
傳回到Androidkiller中,點選右邊的重新整理按鈕
之後,你就發現有craker這個smali檔案了,打開它,寫上下列代碼,可以看到,有個toast的字元串,我們隻需要将這裡修改成我們想要Toast提示的資訊,如果是中文的話,需要轉換成Unicode,直接使用Androidkiller自帶的工具轉換吧,前面幾篇也是有說過,我就不多說了
.class public Lcrack;
.super Ljava/lang/Object;
.source "craker.java"
.method public static toast(Landroid/content/Context;)V
.locals 2
.prologue
const-string v0, "by stars-one"
const/4 v1, 0x1
invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
return-void
.end method
最後,我們在CTRMactivity中的onCreate方法裡寫上調用的代碼,就大功告成了
invoke-static {p0}, Lcrack;->toast(Landroid/content/Context;)V
诶,等等,onCreate方法呢?沒有??擦嘞,不可能。。好吧,我們找錯了,我們再運作一遍遊戲,我看到了一個ChannelSplash,就決定是它了,去Androidkiller找找看(下面的圖檔是我已經修改成功了的圖檔,請忽略彈出的Toast)
這次找對了,這裡有onCreate方法,之後的步驟與上面的一樣,這裡我就不多說了,注意一下最後調用代碼添加的位置,還有記得删除掉之前在CTRMactivity中添加的代碼
成功了,不過想到了activity的模式,好像onstart方法也是可以用,剛才的那個CTRMactivity就是有一個onstart方法,我把前面的删除,之後按照之前的步驟,嘗試在CTRMactivity中裡面寫上了調用的那一段代碼
之後,測試的時候,發現成功顯示
6.删除權限,測試
我們可以把這個APP的名字更改了,這樣顯得比較高端哈!
直接搜尋割繩子就行了,之後進入到string檔案,修改app_name
這裡不得吐槽一下,這個遊戲好像删除發送短信會出錯,進入遊戲的時候提示應用已停止,暫時還不知道解決,有哪位大神看到這裡能知道如何解決這個問題,希望能夠告知~~感激不盡!!
還有,懸浮窗廣告還不知道怎麼破解,有大神能教教我嗎~~
提問之前,請先看提問須知
點選右側圖示發起提問
或者加入QQ群一起學習
TornadoFx學習交流群:1071184701