反破解安卓app及其运行方式的制作方法

文档序号:9523990阅读:188来源:国知局
反破解安卓app及其运行方式的制作方法
【技术领域】
[0001]本发明涉及一种基于安卓的APP,特别是一种的反破解安卓APP及其运行方式。
【背景技术】
[0002]现有常见的安卓反破解方法分为以下几种:
1、代码混淆。为了加大反编译后代码分析的难度,对代码进行混淆。缺点是,治标不治本,同样可以修改。
[0003]2、在线签名比较。在程序初始化时,联网将运行的程序的签名与服务器上的官方标准签名进行比较,从而达到让反编译后的程序无法正常运行的效果。缺点是,如果此部分联网检验的代码被篡改跳过,则整套机制失效。
[0004]3、将核心代码通过JNI写进到S0文件中,由于S0文件的反编译和反破解难度较高,所以这种方法的反破解效果不错,不过缺点是JAVA层代码并没有被保护,同样可以被篡改或者调用S0方法模拟破解。

【发明内容】

[0005]为了解决上述问题,本发明提供了一种保护JAVA底层代码,并避免跳过服务器端校验的反破解安卓APP及其运行方式。
[0006]为了达到上述目的,本发明所设计的反破解安卓APP,包括JAVA源代码加密编译得到的加密源码、so文件、认证校验模块、代码解密释放模块、解密算法下载模块、动态加载模块DexClassLoader和启动用的Applicat1n,其中加密源码存储在S0文件。其中所述的加密源码是源代码中的字符串变量。
[0007]一种上述反破解安卓APP的运行方式,包含以下步骤:a.首先APK启动,加载SO文件,通过代码解密释放模块得到一次解密的程序,b.SO文件连接网络通过认证校验模块与服务器端校验签名,校验通过后下载JAVA 二次解密算法,c.通过DexClassLoader加载DEX加密算法二次解密从S0文件中得到的一次解密的程序,最终通过DexClassLoader加载执行代码运行安卓程序。且最终DexClassLoader加载执行代码运行程序时,程序自动删除从服务器端下载的JAVA 二次解密算法。
[0008]本发明所得到的出了新的方案具有以下有点:
1、为增加破解难度,将代码中所有源代码中的字符串变量改成加密字符串方式
2、在S0文件中将大部分java的代码加密之后以字节形式保存,在运行时将代码解密出来,然后通过二次解密将S0中解密出来的内容再次解密,最后APK通过DexClassLoader加载dex文件继续运行。
[0009]3、通过S0连接网络,从服务器端下载核心代码,然后服务器端校验APK的签名信息,校验通过之后再下发核心解密代码以及二次解密方法,之后APK通过DexClassLoader加载dex文件运行。
[0010]本方案首先通过字符串加密方式增加了破解难度,其次把JAVA代码放到S0文件中,加强了对JAVA层代码的保护,最后把重要的加密算法放到服务器端下发,然后解密完成之后删除之,加强了对加密算法的保护,使得破解难度和成本大大提高,可以用以保护安卓APK的代码安全。另一方面,由于需要通过服务器下载核心解密算法,使得服务器校验步骤无法被跳过,避免了直接现有的更改代码以跳过服务器校验的破解手段。
【附图说明】
[0011 ] 图1是本发明设计的APK启动的流程图。
【具体实施方式】
[0012]下面通过实施例结合附图对本发明作进一步的描述。
[0013]实施例1。
[0014]如图1所示,本实施例描述的反破解安卓APP,包括包括JAVA源代码加密编译得到的加密源码,SO文件、认证校验模块、代码解密释放模块、解密算法下载模块、动态加载模块DexClassLoader和启动用的Applicat1n,其中加密源码存储在SO文件。其中,所述的加密源码是源代码中的字符串变量。
[0015]上述反破解安卓APP的运行方式,包含以下步骤:a.首先APK启动,加载SO文件,通过代码解密释放模块得到一次解密的程序,b.SO文件连接网络通过认证校验模块与服务器端校验签名,校验通过后下载JAVA 二次解密算法,c.通过DexClassLoader加载DEX加密算法二次解密从SO文件中得到的一次解密的程序,最终通过DexClassLoader加载执行代码运行安卓程序。且最终DexClassLoader加载执行代码运行程序时,程序自动删除从服务器端下载的JAVA 二次解密算法。
[0016]实现该方案,我们首先将APK代码分成了几个组成部分:
1、启动用的Applicat1n
2、DexClassLoader动态加载模块(插件化机制)
3、代码解密释放模块(S0文件内完成)
4、解密算法下载模块(S0文件内完成)
5、Dex执行文件加密后保存的资源文件
另外,为了配合客户端的方案,我们还配套开发了几个工具和一个后台:
1、JAVASourceEncoder (JAVA 源代码加密工具)
2、客户端签名校验模块
3、APK签名管理功能模块
1、JAVA SourceEncoder (JAVA 源代码加密工具):
为了使破解工作难度增加,将源代码中的字符串变量加密成byte数组后再进行编译,但是这样的方案会导致开发工作比较麻烦,所以特别开发了一个SourceEncoder工具,用于在开发之后,对源代码进行加密,然后再执行,这样一来,开发人员不需要关注开发时的代码安全问题,而代码会在打包阶段自动改造成加密后的源码;破解者在反编译时,发现所有代码中的字符串常量全部变成了字节数组,无法第一时间看懂代码含义,大大增加了反编译的难度。
[0017]特别说明:本工具并不是为了真正的进行加密保护,而是通过降低反编译代码(smali代码等)的可读性,增加破解成本。
[0018]2、代码解密释放模块
这个部分比较简单,APK程序通过JNI方式调用S0文件中的解密算法,将资源包中的dex的加密文件解密释放出来,并返回文件路径。
[0019]3、解密算法下载模块
首先需要通过JNI获取安卓APK的签名信息、应用版本号、渠道号等各种参数,然后通过HTTP请求POST到服务器端,由服务器端根据后台配置进行校验,并且下发对应的解密算法的dex文件。
[0020]4、DexClassLoader动态加载模块(插件化机制)
由于安卓系统的Dalvik虚拟机不认识java打出来的JAR包的byte code,需要通过dx工具来优化转换成Dalvik byte code才可以,所以在安卓中动态加载java代码,需要使用DexClassLoader或者是PathClassLoader,但是PathClassLoader只能加载安装到系统中的APK文件,而DexClassLoader能够加载jar、dex和apk文件,而且能够从SD卡中加载这些文件,故而选用DexClassLoader。这种方式也是实现安卓插件化机制的主要方式。
[0021]5、启动用的 Applicat1n
所有的工具和模块已经安排就绪,剩下的就是在主Activity中构建业务逻辑,首先加载两个S0文件,然后通过JNI调用S0中的代码解密释放模块的方法,先释放加密后的应用的Dex执行文件,然后再通过JNI调用另一个S0中解密算法下载模块,下载每个游戏或应用不同的解密Dex执行文件,接着使用插件化机制调用解密Dex执行文件解密应用Dex文件,最后使用插件化机制启动应用的Dex文件,应用启动完成,当然同时会调用S0文件删除所有已经完成历史使命的Dex执行文件。
【主权项】
1.一种反破解安卓APP,其特征是包括JAVA源代码加密编译得到的加密源码,SO文件、认证校验模块、代码解密释放模块、解密算法下载模块、动态加载模块DexClassLoader和启动用的Applicat1n,其中加密源码存储在SO文件。2.根据权利要求1所的反破解安卓APP,其特征是所述的加密源码是源代码中的字符串变量。3.一种如权利要求1所的反破解安卓APP的运行方式,其特征是包含以下步骤:a.首先APK启动,加载SO文件,通过代码解密释放模块得到一次解密的程序,b.SO文件连接网络通过认证校验模块与服务器端校验签名,校验通过后下载JAVA 二次解密算法,c.通过DexClassLoader加载DEX加密算法二次解密从SO文件中得到的一次解密的程序,最终通过DexClassLoader加载执行代码运行安卓程序。4.根据权利要求1所述的反破解安卓APP的运行方式,其特征是在最终DexClassLoader加载执行代码运行程序时,程序自动删除从服务器端下载的JAVA 二次解密算法。
【专利摘要】本发明所设计的反破解安卓APP及其运行方式首先通过字符串加密方式增加了破解难度,其次把JAVA代码放到SO文件中,加强了对JAVA层代码的保护,最后把重要的加密算法放到服务器端下发,然后解密完成之后删除之,加强了对加密算法的保护,使得破解难度和成本大大提高,可以用以保护安卓APK的代码安全。另一方面,由于需要通过服务器下载核心解密算法,使得服务器校验步骤无法被跳过,避免了直接现有的更改代码以跳过服务器校验的破解手段。
【IPC分类】G06F9/445, G06F9/44, G06F21/14, H04M1/725
【公开号】CN105278954
【申请号】CN201510619550
【发明人】卢锡合, 翟惠林, 姚伟涛
【申请人】杭州哲信信息技术有限公司
【公开日】2016年1月27日
【申请日】2015年9月25日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1