“逃离大厦”游戏的破解
我們要破解一個游戲,首先要對該游戲有所了解,確定破解目標,發掘破解途徑。因此,我們先安裝該游戲并運行,出現如下界面:
? ? ? ? ? ? ? ? ? ? ? ?
這是一個Berry king游戲的推廣廣告,告訴我們安裝該游戲可獲得200金幣。關掉該界面,進入游戲商店,我們可以在這里通過金幣購買“提示”、“建議”、“大師”和“時間”,如下左圖,左上角顯示的是游戲者擁有的金幣數,初始金幣為100。這100金幣要購買這些東西是不夠的,因此我們首先需要花錢購買金幣,如下右圖所示。
?
我們破解的目的就是要做到不花錢能獲取到“提示”、“建議”、“大師”和無限的“時間”。確定了破解目的,下面就來確定破解思路,我想到的思路有2條:
(1)??? 破解支付,達到不花錢購買金幣的目的。
(2)??? 破解初始金幣值,使之達到一個足夠用來購買的數值。
我一開始想到的是第一種方法。可是修改后運行不了,logcat查看發現有VerifyError錯誤,以為有簽名校驗?搜索signature字符串,發現很多驗證signature的地方,嘗試把這些地方的返回值修改為真不管用。?
后來重新反編譯,不進行任何修改回編譯,安裝能正常運行,所以確定不是簽名校驗(現在想想也不一定啊,這只能證明在加載的時候沒有簽名驗證啊)。暫時放棄,試試第二種方法吧。
由于沒有多少破解游戲的經驗,所以我想當然的認為金幣的初始化應該是在程序初始運行的時候加載的,所以先看看MainActivity。看完了整個MainActivity.smali文件都木有找到線索,不過還是有點其它的收獲,發現了開始運行時的游戲推廣廣告加載代碼:
?
如果我們把判斷Berry King是否安裝的函數isAppInstalled的返回值改為TRUE,那么我們就不用安裝該游戲也能獲取到200金幣了。不拿白不拿,果斷將const/4 v0, 0x0改成const/4 v0, 0x1,重打包,簽名安裝運行,開始的推廣廣告就沒出息了,并且顯示安裝了Berry king,加200金幣。
??
加200金幣是遠遠不夠的,那我們應該從哪里去找金幣初始化的地方呢?金幣是要花錢購買的,如果我們搜索coin,money等關鍵詞是不是會有收獲呢?果不其然,在MoneyModel.smali文件中發現了金幣的初始化代碼。
MoneyModel類在構造函數中將money初始化為100,這100應該就是指的金幣了。我們只需修改這個值就行了。我把它修改成了我的QQ號,如圖所示(由于Java的float型不知道怎么轉換成smali數值的,我是通過自己寫一個包含該數據的apk,然后將其反編譯出來得到的)。?
打包,安裝運行,可以看到破解成功了。左上角顯示的金幣數量約等于我的QQ號(加上原來破解游戲推廣廣告得到的200,貌似還多了幾十個,不知道怎么回事,所以說是約等于)。現在我們已經有足夠的金幣數量來玩游戲了,是不是很爽啊。
?
不過,破解到此還木有結束。在玩的過程中,發現有廣告彈出(如下圖所示),老不爽了。我們還得把廣告去掉。
?
我們在反編譯的文件中發現com/google/android/gms/ads包,從而可以確定為GoogleAdMob廣告。記得AdMob請求廣告的函數為loadAd(),如果注釋掉該方法應該就不會彈出廣告了。于是搜索所有調用loadAd()方法的地方,把這些語句都給注釋掉,重打包運行發現還是有廣告彈出。胡亂搗騰了一陣,依然沒有結果。沒辦法,只好查看Google Mobile Ads SDK,看添加廣告的示例代碼,從中查找線索。后來發現添加廣告都需要通過setAdUnitId方法設置一個“中介ID”,如果沒有這個“中介ID”,廣告是否還能運行呢?果斷注釋掉調用setAdUnitId的代碼,重打包運行,發現廣告沒有了。
?
注意:重打包的時候如果提示:無效寄存器,必須在0到15之間,那么就必須對寄存器進行類似如下轉換:
move-object/from16 v2, p0?
原文地址: http://www.cnblogs.com/goodhacker/p/4060608.html
總結
以上是生活随笔為你收集整理的“逃离大厦”游戏的破解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apk去签名校验详解
- 下一篇: Android应用与系统安全防御