怎么做android代码混淆?-凯发app官网

android应用安全是应用不可缺少的一部分,稍有不慎可能会被不法分子利用,会给企业带来极大损失,因此保护android app不被破解和逆向分析非常重要,通过对android代码进行混淆,可以加大android app反编译的成本,从而提升app的安全性。

java代码是相对比较容易被反编译的,作为一种跨平台的、解释型语言,java 源代码被编译成中间“字节码”存储于class文件中。因为跨平台的需要,这些字节码带有许多的语义信息,比较容易被反编译成java源代码。为了较好的保护java源代码,开发者往往会对编译好的class文件进行混淆处理。

android应用代码混淆的目的是使反编译工具反编译出来的代码难以阅读,从而增加代码被逆向破解的难度。常用的代码混淆方法包括:java代码混淆、类名/方法名混淆、 字节码混淆等。

混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。

proguard就是一个混淆代码的开源项目,能够对字节码进行混淆、缩减体积、优化等处理。proguard处理流程图如下所示,包含压缩、优化、混淆、预检四个主要环节:

 

 proguard进行代码混淆流程图

压缩(shrink):检测并移除代码中无用的类、字段、方法和特性(attribute);

优化(optimize):对字节码进行优化,移除无用的指令。优化代码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码;

混淆(obfuscate):使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名;

预检(preveirfy):在java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。

利用proguard,对dex2jar进行反编译处理后的apk效果示例: 

proguard处理后:

proguard混淆器不仅能够保护代码,而且能够精简编译后的程序大小,减少内存占用。 

混淆代码是最原始也是android应用保护最基础的保护措施,在逆向对抗中,建议开发者将核心逻辑置于native层,且借助llvm对native层代码进行保护;如无多余人力物力投入安全,也可直接使用第三方安全加固产品,比如说网易易盾的加固。

相关阅读:



代码混淆原理和常见代码混淆方式介绍

网站地图