Android版飞机大战破解无敌模式手记
android游戏微信游戏
转载于:-weir/archive/2013/08/14/
,新增了游戏中心,并内置了一个经典游戏《飞机大战》。游戏其实很简单,但
由于可以和好友一起竞争排名,一时间受到大家的追捧,小伙伴们进入“全民打飞机”时代。
ios 版出来不久就被破解出了无敌模式。Android版出后好像一直风平浪静。周末无事,加之看雪
zmworm版主邀请,于是花了一天的工夫研究了下。也出了个Android版的无敌模式增强版。具体
来说就是无敌、双排子弹加无限炸弹。当然,这个不是重点,我们的重点当然是技术细节啦!
微信的游戏继承了Android版手机QQ游戏中心的思想,也采用插件动态加载方式。具体来说,就
是插件及游戏以jar包形式存在,,在运行时动态加载资源
。这样的好处是灵活管理,易于扩展。以后更多的游戏只要上架到微信的服务
器,用户就能在微信应用内部下载、安装、运行。具体原理可以参考我2011年的一篇文章
《Android类动态加载技术》。
当然,那篇文章讲的只是基本原理,而微信在代码动态加载方面则走得更远。针对插件的管理及安
全,它有一套完整的框架,并自称为sandbox。由于代码有做混淆,加之代码量挺大,所以我仅算
管中窥豹,看到的也只是冰山一角。与实际情况有所出入,还请见谅!
一、微信游戏插件的安全校验
其实说实话,微信在游戏插件的安全架构方面花了不少功夫。我能破解并不是利用微信在安全方面
的漏洞,而是Android系统本身的安全漏洞。这个漏洞也就是我前段时间发的以为是bluebox上报
google的漏洞,后来被证实不是。详情请看《Bluebox Security最新提报Android漏洞的初步探
讨》。
那微信是如何对游戏插件进行加载及安全校验的呢?
飞机大战的游戏插件以jar包的形式,放在微信apk的assets/preload文件夹下:
、so本地库及drawable图片资源或者还有xml资源。微信处理插件加载
.。加载插件资源的类叫做
PluginResourceLoader,。
而最核心的加载类应该是PluginClassLoader。上面说的PluginResourceLoader也是它的成员变
量。它似乎负责整个插件加载的各个环节调度。
Android动态加载类有一个弊端,就是dex文件必须释放为本地文件。这是dalvik虚拟机机制决定
的。一直以为google或者dalvik会改,不过似乎到现在还没见改进。释放到本地缓存的dex是很容
的。一直以为google或者dalvik会改,不过似乎到现在还没见改进。释放到本地缓存的dex是很容
易受到攻击
