前言
閒着無聊手機上下載了一款手機遊戲玩玩,正在玩的時候突然彈出了付費對話框,剛開始我還納悶怎麼沒廣告,這麼良心,原來是在這裏等着呢,如下圖:
作爲一個逆向初學者突然有一股衝動,能不能發揮專業技能解決下問題
分析
總體思路
很明顯改遊戲是通過彈出dialog阻止用戶進行遊戲,關掉對話框遊戲也會隨之退出,所以我們的目標就是阻止dialog彈出
從界面定位
用jeb查看apk源碼發現沒有加密,還用apktool反編譯apk得到smali代碼,反編譯命令如下:
java -jar apktool.jar d -f xxx.apk -o 輸出路徑
根據dialog上的關鍵詞“確認支付”在jeb中進行字符串搜索,定位到代碼並反編譯成java代碼,結果如下:
很明顯這段代碼是向一個LinearLayout佈局中添加一個TextView控件,繼續查看該函數所屬的類如下:
和預測一樣該類繼承自dialog,我們知道dialog要想顯示出來必須要調用show()方法,於是查找一下對e類的引用:
第三條看起來比較像重寫show方法,雙擊定位到代碼:
繼續跟蹤調用show方法的位置,發現只有一處位置調用:
雙擊定位到代碼,發現調用了e的show方法的位置:
我們只需要找到該smali文件將對應代碼註釋即可,文件位置同該文件第一行的包名:
文件名即類名ActiveWrapper
打開文件搜索如下關鍵詞:
Lcom/idreamsky/gamecenter/ui/e;->show()V
定位到代碼,將該行註釋即可,註釋符號爲“#”
保存文件後使用apktool進行回編譯,生成修改後的apk,命名如下:
java -jar apktool.jar b -d out -o debug.apk
改apk並不能直接安裝,需要簽名後再安裝,簽名命令如下:
java -jar ..\SignApk\signapk.jar ..\SignApk\platform.x509.pem ..\SignApk\platform.pk8 debug.apk debug.sig.apk
簽名後的apk可以正常使用了
原版apk下載地址