APP 开发完以后由测试工作人员进行测试,没有 bug 就会正式发布和推广,一般正规大一点的公司会有独立的市场推广部门进行推广,技术部门进行维护以及加密混淆打包,这里的加密混淆打包相信开发人员都清楚其中的含义。几维安全发现,还有一种方式可以打包混淆 APP,那就是安卓通过 eclipse 代码混淆技术 打包+Proguard 方式。
代码混淆技术的定义是什么?
代码混淆技术是把代码转换为一种功能,使破解者难以阅读和理解。比如把代码中的每一项元素改写为无意义的名字,使得破解人在阅读时无法根据名字得知其用途,也是增加反编译的阅读难度。
代码混淆技术的方式
为了避免出现盗版的情况,提高应用程序的安全性能,技术人员会对一款 APP 进行代码混淆技术操作。下图中就是对代码混淆前后的代码结构对比,右图是对源代码文件中的一些类名做了变换,改成了以英文字母命名的名称,这样破解者在阅读时就不容易理解其特指的含义。
代码混淆技术的利于弊
代码混淆技术的利是方法简单、便于操作。
代码混淆技术的弊是会给开发者的调试工作带来困难,开发人员通常需要保留原始的未混淆的代码用于调试,由于混淆是不可逆的,在混淆过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失会使程序变得更加难以理解。
混淆的分类
1、布局混淆
布局混淆是指删除或者混淆软件源代码或者中间代码中与执行无关的辅助文本信息,增加攻击者阅读和理解代码的难度。软件源代码中的注释文本、调试信息可以直接删除,用不到的方法和类等代码或数据结构也可以删除,这样即可以使攻击者难以理解代码的语义,也可以减小软件体积,提高软件装载和执行的效率。
2、数据混淆
数据混淆是修改程序中的数据域,而对代码段不作处理。常用的数据混淆方式有合并变量、分割变量、数组重组、字符串加密等。
3、控制混淆
控制混淆也称流程混淆,它是改变程序的执行流程,从而打断逆向分析人员的跟踪思路,达到保护软件的目的。一般采用的技术有插入指令、伪装条件语句、断点等。伪装条件语句是当程序顺序执行从 A 到 B,混淆后在 A 和 B 之间加入条件判断,使 A 执行完后输出 TRUE 或 FALSE,但不论怎么输出,B 一定会执行。
4、预防混淆
预防混淆一般是针对专用的反编译器设计的,目的就是预防被这类反编译器反编译。是利用特定的反编译器或反混淆器的弱点进行专门设计。预防混淆对于特定的反编译器非常有效,所以在使用时要综合利用各种反编译器的特点进行设计。
最后,几维安全告诉大家代码混淆技术并不是加密代码,它只是让代码看起来比较难懂,但是机器执行起来的逻辑是一样的,增加的是人为分析的难度和时间成本。更多相关知识阅读请关注几维安全官网。