Android逆向之旅—破解”穿靴子的貓”游戲的收費功能
一、游戲收費分析
游戲收費很正常的,但是玩游戲最惡心的就是你還沒玩就要充值,很惱火,其實我不怎么玩游戲,主要是給小孩子們弄,比如現在好多小屁孩們喜歡玩水果忍者這個游戲,但是這個游戲在沒有開始玩的時候就彈出個收費的界面:
這個是不可忍受的,雖然支付費用不是很多,但是還是不想支付。這個對話框是強制性的,當點擊取消就退出游戲了,所以這里必須支付成功了才可以繼續玩耍。
二、尋找破解入口
前面已經看到了這個游戲入口收費場景,下面咋們就把這個功能給去掉即可,從以往的破解經驗來說我們有幾百種方法把這個東西干掉,比如:不然這個收費解密展示,修改取消之后的邏輯代碼不讓其退出游戲等。都是各種手段。本文就簡單點做,直接讓這個界面不展示。操作很簡單,這個游戲沒有加固,首先用apktool工具反編譯,因為要找到這個界面入口,我們可以通過字符串進行搜索即可,反編譯之后在 values/strings.xml文件中找到“好友代付”這個字符串 內容:
找到之后,看到這個字符串的id是:gc_billing_net_contacts,這里可以不用在通過public.xml中的id值轉化得到對應的int類型值,再去搜索了,可以直接到jadx中進行搜索即可:
這里看到有一個BillingView類,從命名可以猜想這個應該就是上面那個收費的頁面:
這個視圖繼承了LinearLayout布局,具體實現這里就不截圖,從View的代碼實現可以確定就是上面的收費頁面,在看看這個類在哪些地方有調用:
到這里看到應該是兩個地方,一個是BillingActivity類,一個是GameInterface類,那么就有兩個分析路線了,這里用一個巧妙的辦法直接定位到是哪個類,假如是BillingActivity類,那么當前的topActivity就是他,我們用命令查看當前設備的topActivity看一下: adb shell dumpsys activity top
這里看到并不是BillingActivity類,所以可以斷定,處理收費的頁面是在GameInterface類中,那么直接進入這個類的getBillingView方法中:
然后查看這個方法在哪個地方被調用了,這里如果發現Find Usage菜單不好使,也可以直接全局搜這個方法:
這里看到有兩個地方用到了這個方法,依然是按照上面那個topActivity判斷,不可能是DGCPaymentActivity這個類了,所以直接看下面那個類,點擊進入即可:
三、屏蔽收費入口功能
到這里就清楚了,這里通過一個Dialog來進行展示的,設置Dialog的contentView即可。所以找到展示的入口了,干掉這個入口就簡單了,找到對應的smali代碼,直接注釋這行show代碼:
然后在回編譯重新在打包即可,不過可惜的是,運行時報錯的:
這里搜了一下,沒有好的處理方法,最后直接把整個方法代碼全部干掉,讓這個方法稱為一個空方法,直接用一個指令替換原來的代碼即可: return-void ,直接方法返回:
然后再次回編譯打包即可。這次就看不到那個收費的對話框了。
嚴重聲明:本文的目的很單純只是為了介紹逆向技術,絕沒有任何商業目的,如果有人將此文技術用于商業目的帶來的任何法律責任將由操作者本文承擔,和本文內容作者沒任何關系,也由衷的希望各位能夠秉著技術學習的態度閱讀此文,非常感謝!
四、總結
本文就簡單的介紹了如何去除游戲中的收費功能,順利進入游戲玩耍,可以看到本文的篇幅很短,其實這個破解流程非常簡單,適合初級逆向愛好者入門練習功能。
來自:http://www.androidchina.net/6275.html