好久沒搞遊戲了,前幾天看了又重新看了看<開心消消樂>的1.29最新版..於是故事開始了:
1.反編譯分析
首先使用Androidkiller進行反編譯,得到兩個Smali代碼文件夾:mali和smali_classes2。到這覺得挺奇怪的,因爲一個遊戲客戶端,基本都是引擎編寫的,如主流的Cocos2dx、Unity3D等,主要代碼是C/C++/C#或者一些腳本、圖片。無論apk本身有多大,Java邏輯都不會很多,極少編譯出現2個dex,就像一些大型的應用客戶端2個dex纔是普遍的現象。
其次,清單文件AndroidManifest.xml中的多個Activity都能在smali_classes2文件定位到.smali文件,真正是由於方法過多正常分離出2個dex的apk,Application和主Activity的Smali文件會在第一個dex中。
所以可能是僞裝成“加殼”的詭計!!
2.驗證測試
既然全部的源碼都在smali_classes2中,那我們就把smali_classes2->smali,將原來貌似殼文件的smali刪除,然後搜索“.super Landroid/app/Application;”,修復下application入口,回編安裝,遊戲並不奔潰,而是彈出了簽名驗證的正常提示,說明程序沒問題。確實爲“加殼”詭計!!
3.移花接木·化爲己用
Android最大的特點就是可偷。既然它把技術誠心誠意的放出來了,我們就移花接木到自己的APP上啊。。
通過修改、測試,只需三步就可以將任意大小的apk改造成含有2個dex的僞裝加殼的apk:
第一步:將需要修改的apk反編譯,重命名smali->smali_classes2,將我提供的smali複製到反編譯根文件夾;
第二步:修改清單文件AndroidManifest.xml的application入口修改爲:android:name="com.happyelements.security.shellguard.ShellApplication"
第三步:回編配置的最後一行“DexMaps: {}”修改爲:
DexMaps:
classes2.dex: smali_classes2
如下圖,將一個大小爲72K的apk改造成兩個dex:
相關下載
鏈接:
http://download.csdn.net/detail/zihao2012/9375835 可以對比..