好久没搞游戏了,前几天看了又又一次看了看<开心消消乐>的1.29最新版..于是故事開始了:
1.反编译分析
首先使用Androidkiller进行反编译,得到两个Smali代码目录:mali和smali_classes2。到这认为挺奇怪的,由于一个游戏client。基本都是引擎编写的,如主流的Cocos2dx、Unity3D等。主要代码是C/C++/C#或者一些脚本、图片。不管apk本身有多大,Java逻辑都不会非常多。极少编译出现2个dex。就像一些大型的应用client2个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 能够对照..