手记

浅谈:APK混淆保护解析,如何保护APP应用安全

 我们做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应用的安全度,可以保护用户的利益,也大大增加用户粘度,提升产品的品牌力度。

原文链接:http://www.apkbus.com/blog-387135-58892.html

0人推荐
随时随地看视频
慕课网APP