我们做APP开发的一般都会遇到如何保护应用APK代码的问题。Java APK语言是基于jvm上面,反编译APK源代码很很容易。包括所有的class文件、src文件和jsp文件等等。
到目前为止,对于APK的保护,混淆技术是最为基本的保护方法。JAVA混淆工具也非常多,包括商业的、免费的、开放源代码的,大多是对Class文件进行混淆处理,也有少量工具首先对源代码进行处理,然后再对Class进行处理,这样加大了混淆处理的力度。
目前主要的混淆技术按照混淆目标主要可分为分别为:符号混淆、数据混淆、控制混淆、控制流重组、预防性混淆。对此,小编集中对其进行简单的分析。
一、符号混淆
Class文件中有许多与程序执行本身无关的信息,例如变量名称、方法名称,并带有一定的含义,例如某个方法名为getKeyLength(),那么这个方法很可能就是用来返回Key的长度。符号混淆就是打乱这些信息,将其变成无任何意义的表示,例如:对于所有的方法从method_001开始编号;将所有的变量从vairant_001开始编号。符号混淆可对APK反编译带来一定的困难,从而达到保护APP安全的作用。
对于私有函数、局部变量,可改变它们的符号,也不影响程序的运行。但是一些接口名称、公有函数、成员变量,若有其它外部模块需要引用这些符号,往往需要保留这些名称,否则外部模块找不到这些名称的方法和变量。
二、数据混淆
数据混淆是对程序使用的数据进行混淆,可分为改变数据存储及编码和改变数据访问。
改变数据存储和编码可以打乱程序使用的数据存储方式。例如将一个有10个成员的数组,拆开为10个变量,并且打乱这些变量的名字;将一个两维数组转化为一个一维数组等。另外,一些复杂的数据结构,我们将打乱它的数据结构,例如用多个类代替一个复杂的类等。
改变数据访问,例如访问数组的下标时,我们可以进行一定的计算。
在实践混淆处理中,这两种方法通常是综合使用的,在打乱数据存储的同时,也打乱数据访问的方式。经过对数据混淆,程序的语义变得复杂了,这样增大了APK反编译的难度。
三、控制混淆
控制混淆就是对程序的控制流进行混淆,使得应用APK更加难以反编译,通常控制流的改变需要增加一些额外的计算和控制流,因此在性能上会给程序带来一定的负面影响。有时,还需要在程序的性能和混淆程度之间进行权衡。
四、控制流重组
重组控制流也是重要的混淆方法。例如,程序调用一个方法,混淆后,可将该方法代码嵌入到调用程序当中。反过来,程序中的一段代码也可以转变为一个函数调用。另外,对于一个循环的控制流,为可以拆分多个循环的控制流,或者将循环转化成一个递归过程。这种方法最为复杂,研究的人员也非常多。
五、预防性混淆
这种混淆通常是针对一些专用的反编译器而设计的,一般来说,这些技术利用反编译器的弱点或者Bug来设计混淆方案。例如,有些反编译器对于Return后面的指令不进行反编译,而有些混淆方案恰恰将代码放在Return语句后面。这种混淆的有效性对于不同反编译器的作用也不太相同的。
爱加密是北京智游网安科技有限公司重磅推出的一个提供APP安全保护服务平台。目前提出的三层加密保护:DEX加壳保护,DEX指令动态加载保护,高级混淆保护,可以保证APP的动态安全和静态安全,黑客将没有机会进行任何破解。爱加密更在年前推出了SO库保护,C/C++层面的代码得到了专业保护,让APK包无懈可击。
爱加密推出的APK加固保护服务有效解决了开发者的应用被破解的问题,不仅保护开发者和广大用户的利益,而且能强力遏制打包党的不良行为,净化整个APP市场,打造一个绿色的APP生态链。希望更多的APP开发者能够意识到保护APP的重要性,保证APP应用的安全度,可以保护用户的利益,也大大增加用户粘度,提升产品的品牌力度。
共同学习,写下你的评论
评论加载中...
作者其他优质文章