一种apk应用加固的方法及系统的制作方法

文档序号:6525521阅读:273来源:国知局
一种apk应用加固的方法及系统的制作方法
【专利摘要】本发明提供了一种APK应用加固的方法及系统,所述方法为,导入待加固文件源码或APK文件,并对待加固文件进行预处理,分析其语义,针对不同的对象采取不同的加密方式,将加密后的对象进行JVM类初始化处理,将加密后的对象以静态成员、静态代码块等方式提取到类初始化过程中,最后将加固结果导出。通过本发明的方法,能够对Android下的APK应用程序进行加固处理,使反编译结果中不会出现任何明文字符串和库函数的显示调用,并隐藏了核心代码功能,极大提增加了对APK文件逆向分析的难度,从而起到对开发者的应用代码的保护作用。
【专利说明】—种APK应用加固的方法及系统
【技术领域】
[0001]本发明涉及移动终端应用安全领域,特别涉及一种APK应用加固的方法及系统。【背景技术】
[0002]随着Android移动终端平台的日益发展,第三方应用程序大量涌现,对第三方应用的盗版和重打包现象日益严重。由于Android下APK能够很容易的由dex2 jar和JD-GU1、JAD等反编译工具反编译为易于阅读的JAVA代码,从而代码中的明文字符串、库函数调用、核心功能函数等都一目了然,使得非法开发者对第三方应用程序的盗版或者核心功能的逆向工程变得更加容易。

【发明内容】

[0003]本发明提供了一种APK应用加固的方法及系统,解决了 APK代码易于被反编译显示的问题,能够使第三方应用程序加固,最大化保护APK应用程序的安全。
[0004]一种APK应用加固的方法,包括:
向JVM中导入待加固的文件,所述文件为文件源码或打包的APK文件;基于源码的加固通常是导入类代码,通常为*.Java文件;
对待加固文件进行预处理,分析待加固文件代码的语义为字符串对象,或库函数调用,或核心功能代码块;
根据分析结果,对待加固文件加密:
如果为字符串对象,则根据用户自定义的加密方式加密;
如果为库函数调用,则加密被调用的类名、方法名、并进行反射调用;
如果为核心功能代码块,则加密并动态生成加密后的代码;
JVM类初始化,对加密后的字符串对象、库函数调用及核心功能代码块以静态成员、静态代码块方式提取到类初始化过程中;
待加固文件的加固结果导出,分别导出加固后的源文件或APK文件。基于源码的导出结果为加固后的*.java源文件,基于打包APK的导出结果为加固后的APK文件。
[0005]所述的方法中,所述用户自定义的加密方式为标准加密方式或已知的任一字符串加密方式。
[0006]本发明还提供一种APK应用加固的系统,包括:
加载模块,用于向JVM中导入待加固的文件,所述文件为文件源码或打包的APK文件;分析模块,用于对待加固文件进行预处理,分析待加固文件代码的语义为字符串对象,或库函数调用,或核心功能代码块;
加固模块,用于根据分析结果,对待加固文件加密:
如果为字符串对象,则根据用户自定义的加密方式加密;
如果为库函数调用,则加密被调用的类名、方法名、并进行反射调用;
如果为核心功能代码块,则加密并动态生成加密后的代码; 初始化模块,用于JVM类初始化,对加密后的字符串对象、库函数调用及核心功能代码块以静态成员、静态代码块方式提取到类初始化过程中;
文件生成模块,用于待加固文件的加固结果导出,分别导出加固后的源文件或APK文件。
[0007]所述的系统,所述用户自定义的加密方式为标准加密方式或已知的任一字符串加密方式。
[0008]本发明方法及系统的优势在于,提供了一种APK应用的加固方案,利用JVM中类初始化的特性和JAVA反射机制,对代码中的字符串、库函数的调用以及部分代码块进行加固保护,并且提供基于源码的加固方式和基于打包APK的加固方式,极大降低了对加固后应用程序的逆向工程的可能性,从而达到最大化保护应用开发者版权的目的。
[0009]本发明提供了一种APK应用加固的方法及系统,主要针对Android下APK应用的代码加固方案,并且提供了源码级和非源码级的两种加固方式。所述方法为,导入待加固文件源码或APK文件,并对待加固文件进行预处理,分析其语义,针对不同的对象采取不同的加密方式,将加密后的对象进行JVM类初始化处理,将加密后的对象以静态成员、静态代码块等方式提取到类初始化过程中,最后将加固结果导出。通过本发明的方法,能够对Android下的APK应用程序进行加固处理,使反编译结果中不会出现任何明文字符串和库函数的显示调用,并隐藏了核心代码功能,极大提增加了对APK文件逆向分析的难度,从而起到对开发者的应用代码的保护作用。
【专利附图】

【附图说明】
[0010]为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0011]图1为本发明APK应用加固的方法流程图;
图2为本发明APK应用加固的系统结构示意图。
【具体实施方式】
[0012]为了使本【技术领域】的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明。
[0013]本发明提供了一种APK应用加固的方法及系统,解决了 APK代码易于被反编译显示的问题,能够使第三方应用程序加固,最大化保护APK应用程序的安全。
[0014]一种APK应用加固的方法,如图1所示,包括:
5101:向JVM中导入待加固的文件,所述文件为文件源码或打包的APK文件;基于源码的加固通常是导入类代码,通常为*.java文件;
5102:对待加固文件进行预处理,分析待加固文件代码的语义为字符串对象,或库函数调用,或核心功能代码块;
根据分析结果,对待加固文件加密:如果为字符串对象,则执行S103:根据用户自定义的加密方式加密;这里可以将加密方式统称为ENCRYPT,其对应的解密方法统称为DECRYPT,需要加密的字符串对象统称为STRING,加固后的形态为 ENCRYPT (STRING);
如果为库函数调用,则执行S104:加密被调用的类名、方法名、并进行反射调用;加固后的形态为:
INVOKE(ENCRYPT(CLASSNAME), ENCRYPT(METHODNAME));
如果为核心功能代码块,则执行S105:加密并动态生成加密后的代码;所述的加密方式可以为已知的任一一种代码块加密方式;加固后的形态为:
NEW(ENCRYPT(CODE));
5106:JVM类初始化,对加密后的字符串对象、库函数调用及核心功能代码块以静态成员、静态代码块方式提取到类初始化过程中;
5107:待加固文件的加固结果导出,分别导出加固后的源文件或APK文件。基于源码的导出结果为加固后的*.java源文件,基于打包的APK的导出结果为加固后的APK文件。
[0015]所述的方法中,所述用户自定义的加密方式为标准加密方式或已知的任一字符串加密方式。
[0016]为更明确本发明的实施方式,对APK文件加固方式举例如下:
对导入的待加固文件预 处理后,分析得到类A下的字符串信息“aaa”,并且存在一个调用了类B的c方法。并且指定生成一对加密解密函数:encrypt和decrypt。
[0017]对字符串信息进行加密后,“aaa”被encrypt ( “aaa”)生成加密后的结果“xxx”。
[0018]对库函数调用信息进行加密,类名“B”被encrypt (“B”)加密为“X”,函数名“c”被encrypt (“c”)加密为“x”。将invoke (B,c)的方式置换为动态调用方式。
[0019]其中Class.forName (CLASSNAME)返回一个类名为CLASSNAME的类对象;其对象的getMethod (METHODNAME)方法返回该类下对应METHODNAME名字的方法对象。
[0020]JVM类初始化处理:添加类成员al赋值为加密的字符串结果“xxx” ;
添加类成员a2赋值为加密的调用类名结果“X” ;
添加类成员a3赋值为加密的调用方法名结果“X”。
[0021]置换加固结果:
“aaa” 替换为 decrypt (al);
invoke (B, c)替换为:
invoke (Class.forName(decrypt ( “X”));
Class.forName(decrypt ( “X”)).getMethod( “x”))。
[0022]导出加固后的APK文件,完成加固。
[0023]本实施例中的“X”或“X”为变量,可以由用户任意设定。
[0024]本发明还提供一种APK应用加固的系统,如图2所示,包括:
加载模块201,用于向JVM中导入待加固的文件,所述文件为文件源码或打包的APK文
件;
分析模块202,用于对待加固文件进行预处理,分析待加固文件代码的语义为字符串对象,或库函数调用,或核心功能代码块;
加固模块203,用于根据分析结果,对待加固文件加密: 如果为字符串对象,则根据用户自定义的加密方式加密;
如果为库函数调用,则加密被调用的类名、方法名、并进行反射调用;
如果为核心功能代码块,则加密并动态生成加密后的代码;
初始化模块204,用于JVM类初始化,对加密后的字符串对象、库函数调用及核心功能代码块以静态成员、静态代码块方式提取到类初始化过程中;
文件生成模块205,用于待加固文件的加固结果导出,分别导出加固后的源文件或APK文件。
[0025]所述的系统,所述用户自定义的加密方式为标准加密方式或已知的任一字符串加密方式。
[0026]本发明方法及系统的优势在于,提供了一种APK应用的加固方案,利用JVM中类初始化的特性和JAVA反射机制,对代码中的字符串、库函数的调用以及部分代码块进行加固保护,并且提供基于源码的加固方式和基于打包APK的加固方式,极大降低了对加固后应用程序的逆向工程的可能性,从而达到最大化保护应用开发者版权的目的。
[0027]本发明提供了一种APK应用加固的方法及系统,主要针对Android下APK应用的代码加固方案,并且提供了源码级和非源码级的两种加固方式。所述方法为,导入待加固文件源码或APK文件,并对待加固文件进行预处理,分析其语义,针对不同的对象采取不同的加密方式,将加密后的对象进行JVM类初始化处理,将加密后的对象以静态成员、静态代码块等方式提取到类初始化过程中,最后将加固结果导出。通过本发明的方法,能够对Android下的APK应用程序进行加固处理,使反编译结果中不会出现任何明文字符串和库函数的显示调用,并隐藏了核心代码功能,极大提增加了对APK文件逆向分析的难度,从而起到对开发者的应用代码的保护作用。
[0028]本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0029]本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
[0030]虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。
【权利要求】
1.一种APK应用加固的方法,其特征在于,包括: 向JVM中导入待加固的文件,所述文件为文件源码或打包的APK文件; 对待加固文件进行预处理,分析待加固文件代码的语义为字符串对象,或库函数调用,或核心功能代码块; 根据分析结果,对待加固文件加密: 如果为字符串对象,则根据用户自定义的加密方式加密; 如果为库函数调用,则加密被调用的类名、方法名、并进行反射调用; 如果为核心功能代码块,则加密并动态生成加密后的代码; JVM类初始化,对加密后的字符串对象、库函数调用及核心功能代码块以静态成员、静态代码块方式提取到类初始化过程中; 待加固文件的加固结果导出,分别导出加固后的源文件或APK文件。
2.如权利要求1所述的方法,其特征在于,所述用户自定义的加密方式为标准加密方式或已知的任一字符串加密方式。
3.—种APK应用加固的系统,其特征在于,包括: 加载模块,用于向JVM中导入待加固的文件,所述文件为文件源码或打包的APK文件;分析模块,用于对待加固文件进行预处理,分析待加固文件代码的语义为字符串对象,或库函数调用,或核心功能代码块; 加固模块,用于根据分析结果,对待加固文件加密: 如果为字符串对象,则根据用户自定义的加密方式加密; 如果为库函数调用,则加密被调用的类名、方法名、并进行反射调用; 如果为核心功能代码块,则加密并动态生成加密后的代码; 初始化模块,用于JVM类初始化,对加密后的字符串对象、库函数调用及核心功能代码块以静态成员、静态代码块方式提取到类初始化过程中; 文件生成模块,用于待加固文件的加固结果导出,分别导出加固后的源文件或APK文件。
4.如权利要求3所述的系统,其特征在于,所述用户自定义的加密方式为标准加密方式或已知的任一字符串加密方式。
【文档编号】G06F21/14GK103902858SQ201310725091
【公开日】2014年7月2日 申请日期:2013年12月25日 优先权日:2013年12月25日
【发明者】潘博文, 乔伟, 肖新光 申请人:武汉安天信息技术有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1