前言:這一期的破解教程,有新的知識內容出現啦! 這一期破解的游戲是找不到之前的關鍵字,怎麼破解呢? 破解成功之後,添加一個Toast彈窗提示由XX破解,這操作該如何實現呢?請往下看~ 鏈接: https://pan.baidu.com/s/1dF8jKdF 密碼: 6666 破解步驟: 1.試玩,找 ...
前言:這一期的破解教程,有新的知識內容出現啦!
這一期破解的游戲是找不到之前的關鍵字,怎麼破解呢?
破解成功之後,添加一個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
這裡不得吐槽一下,這個游戲好像刪除發送簡訊會出錯,進入游戲的時候提示應用已停止,暫時還不知道解決,有哪位大神看到這裡能知道如何解決這個問題,希望能夠告知~~感激不盡!!
還有,懸浮窗廣告還不知道怎麼破解,有大神能教教我嗎~~