0x1.统筹看逆向
本文内容主要统筹的介绍一下多数游戏破解及增加验证的流程,也就是多数外挂制作及售卖者的制作思路。
---------------------------------------------(本文不涉及具体方法,只做简单介绍)
为了方便理解,我给大家画了一张图,如下:
根据图片,我们将这个逆向到最终的加验证打包分为四大部分,分别为 反编译、解密、加密、验证。
1.反编译
这里的反编译主要是指的对apk的逆向和修改,而逆向过程中的解密过程,由于比较多样和复杂,则单独拿了出来。
apk的修改在这里主要介绍三种层次,JAVA层修改、SO层修改、U3D游戏dll脚本修改。
1.1 JAVA层修改
apk的逆向目前普遍采用的工具是Android Killer,反编译完成后,对于java层的修改主要依赖smali语法,即Dalvik虚拟机语言。
1.2 SO层修改
SO层的分析和修改主要依赖的工具是IDA以及16进制编辑器,会用到汇编语法。
1.3 dll修改
U3D的dll为.NET框架,均为C#语言编写,分析和修改主要依赖Reflector等.NET工具,会用到C#语言及其中间语言il。
2.解密
解密过程其实同样也分为上述三种,不过这里我们暂不把so的解密或者修复放进来,只介绍另外两点。
2.1 JAVA层解密
这个就是我们最经常听到和见到的脱壳,主要辅以静态分析和动态调试来解决。
2.2 dll解密
dll的解密主要是分析libmono.so文件,如果加密很简单还可以直接在编辑器中分析dll文件,如果需处理文件较多,有时需要自己编写解密工具。
同时dll文件除了解密,有时还会涉及到文件结构的修复,比如DOS头,PE头,NT头,Metadata Dictionary等等。
3.加密
加密部分主要针对dll,因为如果带加密函数的libmono.so我们不做修改或者变更的话,一般情况下,解密修改完后的dll我们需要加密回去才能让apk正常运行。
这个加密过程我们可以根据解密函数对应的写出加密工具,或者针对简单的加密直接在编辑器中完成。
4.验证
在修改或者有时候必需的加密完成之后,apk可以正常运行了,这时外挂制作者通常会对apk进行加密以及增加验证来保证自己的利益。
这种验证分为本地验证和网络验证。
4.1 本地验证
无论是哪种验证,都会取apk运行设备的信息或其他可作为唯一识别码的信息,然后加以运算,得到一个对应的码,
这个对应的码就是我们熟知的激活码,一方面可以保证被恶意传播,另一方面可以保证自己的某些利益,这里就不具体解释了。
4.2 网络验证
本地验证固然方便,但是也有弊端,就是不可控,所以很多人转为进行网络验证来控制使用,可以实时控制apk的使用情况。
====>>>>
不管是哪一个过程,修改基本都在java,so,dll中进行,分析方式也都是静态分析和动态调试,本文主要是让新手对于逆向有个统筹的了解。