前言:
在当今安卓应用井喷的年代,会有很多优秀的应用脱颖而出,但是赚不赚钱就很难说啦。也许有些游戏能火一段时间,但是面临着一批破解大军,可能游戏刚有起色就被破解了,有广告的会被替换掉ad id,如果是iap计费的可能会被修改内存等等。呵~,所以开发者也需要做一些防破解的机制。下面介绍几种 防止破解的方法,希望能够帮助 广大开发者。
正文:
1.防止修改金币等敏感数据
对于游戏开发,保存金币或者宝石之类的大家都知道是一个内存数据,如果系统被root了,那么修改内存也就是很容易的事了。所以啊,应该对这些内存数据做下检测,如果发现修改了,就立马启动保护措施。假如保存金币的字段叫做money,那么可以再设一个字段叫做checkmoney,在以后要修改金币的时候,始终保持这两个字段一致,如果是多线程注意加锁。请看一下代码(C++):
if(money!=checkmoney)
{
exit(0);//退出
}
手机内存修改一般 都只能改一个内存点,所以无论改了哪一个字段,都会引发退出。
2.防止修改广告id或者java部分代码
android应用代码文件是classes.dex,就像windows的exe文件一样。一般java反编译都会是smail文件,修改这些文件然后重新打包,classes.dex肯定发生了改变。所以防破解也要对这个文件进行检测,如果发现文件有改动,就可以退出啦。但是这样得注意确保apk在安装或者其他的时候不能再进行修改了,不然就得自作自受额~。
3.第三方加壳服务
爱加密,360,梆梆等都有相关的加密服务,其原理可参考http://blog.csdn.net/androidsecurity/article/details/8892635。这些加壳服务也可以在一定程度上保护apk不被盗版。
4.java混淆代码
proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。
5.伪加密防止解包反编译
APK在PC上面就被看作一个压缩格式文件,在手机上面它就算一个可执行格式文件。。。两种格式对它的读取要求也有区别,所以说利用这个区别来实现伪加密。。。对PC端来讲伪加密的APK没法被解包无法被反编译 但是对android系统来说 它完全不会影响正常的安装运行(对4.2以前的系统)。。。所以说伪加密能够100%防止PC端解包、查看而又不影响软件在手机上面的正常运行。。。
伪加密的原理: 读取APK的字节,找到连续4位字节标记为”P K 01 02”的后第5位字节,如果是0表示不加密,如果是1就表示加密(伪加密就强行改成1 反伪加密就是把1改成0就可以了)。。注意:个别市场会不能识别导致不能上传市场。
6.APK压缩文件破坏
APK在PC上面可以看作一个压缩文件,在Android系统里面它就是一个手机系统软件文件。Android系统对APK的识别是从标志头到标志尾,其他多余数据都会无视。所以说在标志尾添加其他数据对把APK看做压缩文件的PC端来说这个文件被破坏了,所以你要对其进行解压或者查看都会提示文件已损坏,用反编译工具也会提示文件已损坏,但是它却不会影响在Android系统里面的正常运行和安装而且也能兼容到所有系统。
但是这种APK压缩包破坏存在APK伪加密一样的问题,个别市场会不能识别导致不能上传市场。使用压缩文件修复工具也能把它修复好让我们做的保护消失。它的好处就是能够兼容到所有的系统。。
代码操作APK:
7.代码高级混淆 - 花指令
花指令是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。【花指令】这个词来源于汇编语言,它的思想是非常不错的。。【花指令】另外个目的就是利用反编译工具漏洞,来使工具无法使用。
此法对开发者的学识有一定要求,估计能用上的人不多啦。在这里提出来,如果有兴趣的,可以到网上多多了解下。。。
好了,就先总结这么多了,以后有好的方法再补上,最后恭祝各位 事业有成
本文总结了多种防止安卓游戏被破解的策略,包括检查内存数据一致性、防止修改广告ID和代码、使用加壳服务、代码混淆、伪加密以及APK压缩文件破坏等方法,旨在帮助开发者保护自己的游戏应用。
2256

被折叠的 条评论
为什么被折叠?



