首页(yè)> 技(jì )术观点 > 爱加密安(ān)卓手游防破解技(jì )术分(fēn)析

爱加密安(ān)卓手游防破解技(jì )术分(fēn)析

发布时间:2015-11-09

安(ān)卓手游玩家都喜欢破解版的,可(kě)以免费得到金币、工(gōng)具(jù)等,可(kě)以快速出任CEO,迎娶白富美,走向人生巅峰,额,是在游戏里。但是,你们有(yǒu)想过安(ān)卓手游开发者的感受吗?自己开发的安(ān)卓手游被破解,开发者多(duō)么心塞啊!今天,爱加密就给安(ān)卓手游开发者带来福利,在安(ān)卓手游破解基础上,研究如何基于NDK的安(ān)卓手游防破解!

安(ān)卓手游破解是很(hěn)多(duō)安(ān)卓手游开发者必须面对的一个问题,而安(ān)卓手游如何防破解,通常的做法是对代码加入混淆干扰以增加破解难度。但即便如此,混淆操作(zuò)之后的java代码仍然可(kě)以被各种方法进行破解。在基于NDK的安(ān)卓手游中(zhōng)含有(yǒu)相应的main.cpp来作(zuò)為(wèi)应用(yòng)程序的入口,因而在这里进行一些安(ān)卓手游防破解较验,相应的破解难度就会增大不少(相对于java代码)。

在安(ān)卓手游整个导出过程中(zhōng),生成.dex阶段是整个打包发布操作(zuò)的基础,包括相应的java源代码、外部库文(wén)件均会被编译链接到.dex文(wén)件中(zhōng),而其中(zhōng)关于代码的任何改动后重新(xīn)生成.dex,其均会与原始文(wén)件均会有(yǒu)所不同,因而就可(kě)通过对.dex文(wén)件进行MD5较验而作(zuò)為(wèi)安(ān)卓手游app是否被破解的依据。对于安(ān)卓手游app,dex源码文(wén)件安(ān)全性是最重要的,因此,这个dex源码加密保护其实很(hěn)有(yǒu)必要,在安(ān)卓手游防破解这方面,可(kě)以做到的爱加密(www.ijiami.cn)这个平台,有(yǒu)专门的安(ān)卓手游防破解方案

 

爱加密手游APP防破解技(jì )术基本流程:

打包发布阶段(只进行一次):在打包生成过程得到.dex之后计算该.dex文(wén)件的MD5串,并将其写入到NDK工(gōng)程的main.cpp中(zhōng),作(zuò)為(wèi)最终版本较验的标准串。该过程可(kě)以加入到Ant自动化打包发布中(zhōng),作(zuò)為(wèi)生成.dex的后续阶段。

阶段1: 计算安(ān)卓手游.dex文(wén)件的MD5串并将其写入到对应的main.cpp中(zhōng),相应的ant操作(zuò)大體(tǐ)如下(并不完整以)。

生成dex对应的MD5,并将其存储到一个文(wén)件中(zhōng):

[html] view plaincopy

  

           

              

              

         

  

从外部文(wén)件中(zhōng)读入相应的MD5串,并存储到一个ANT的变量:

[html] view plaincopy

   

          

    

将.dex文(wén)件的MD5串写入到main.cpp中(zhōng):

[html] view plaincopy

  

          

  

其中(zhōng)使用(yòng)的dexmd5tool是一个自实现的外部exe,主要实现对任意文(wén)件计算其相应的MD5并将串值保存到一个指定的文(wén)件。这里需要MD5串以文(wén)件形式进行保存主要是以便在ant中(zhōng)打该文(wén)件并读入其中(zhōng)的字符串到ant变量中(zhōng)(并没有(yǒu)找到其它方法直接将相应的MD5码写入到ant变量中(zhōng)去,因而做这样的婉转实现)。将MD5串向main.cpp中(zhōng)写入主要就是利用(yòng)ant的字符串替换机制来实现即可(kě)。

7

更新(xīn)完main.cpp之后需要利用(yòng)NDK对工(gōng)程进行重新(xīn)编译(主要是重编译这里有(yǒu)改动的C++代码,该步必须进行)

调用(yòng)NDKbuikd来完成相应的重编译工(gōng)作(zuò):

[html] view plaincopy

  

          

          

  

Ndkbuild.bat中(zhōng)的相关内容即如同Eclipse中(zhōng)配置的编译参数一样:X:/cygwin/bin/bash.exe --login -c "cd/cygdrive/XXX/XXX/Android/jni && $NDK/ndk-build"

阶段二:对dex计算相应的MD5并在main.cpp中(zhōng)进行启动时较验。

这里需要在安(ān)卓手游app每次启动运行中(zhōng)动态得到当前apk包中(zhōng)的.dex文(wén)件并进行MD5的计算与较验,看安(ān)卓手游是否被破解。需要借助于一个第三方包libzip,它可(kě)以以.so的形式链入到NDK工(gōng)程中(zhōng),并将指定的zip包(apk包)解压缩,将其中(zhōng)的所有(yǒu)文(wén)件以二进制的方式返回。如此一来就可(kě)以运行时得到当前apk包的dex的二进制流;将计算binary的MD5代码也一并加入到该工(gōng)程中(zhōng)即可(kě)以完成在main.cpp中(zhōng)启动时动态较验.dex的MD5值。

若当前apk包中(zhōng)的.dex文(wén)件MD5码与main.cpp中(zhōng)存储的MD5码(阶段1得到)匹配,程序合法运行;否则,较验不通过认為(wèi)安(ān)卓手游已经被破解修改过,直接退出。

加入收藏