大公司怎么作Android代码混淆的?

3月17日,网易资深安全工程师钟亚平在安卓巴士全球开发者论坛上作了《安卓APP逆向与保护》的演讲。其中就谈到了关于代码混淆的问题。现摘取部分重点介绍以下:html

 

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

混淆就是对发布出去的程序进行从新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即便反编译成功也很可贵出程序的真正语义。ProGuard就是一个混淆代码的开源项目,可以对字节码进行混淆、缩减体积、优化等处理。android

Proguard处理流程图以下所示,包含压缩、优化、混淆、预检四个主要环节:ios

 

 

1. 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute);安全

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

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

4. 预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。优化

在分享中,钟亚平展现了利用Proguard,对Dex2jar进行反编译处理后的Apk效果示例:网站

 

Proguard处理前
 Proguard处理后

Proguard混淆器不只可以保护代码,并且可以精简编译后的程序大小,减小内存占用。url

 

混淆代码逆向分析

若是想要反编译混淆代码,钟亚平分享了一个国外的工具DEGUADR,它可以经过统计的方式来解混淆。虽然这个工具的正确率达不到100%,可是能在必定程度上帮助反编译代码。

使用DEGUADR解混淆的示例:

com.xxxxx.common.util.CryptoUtil网站也提供了一种反编译服务,以下所示:
java.lang.String a(byte[]) -> encodeToString  
java.lang.String a(byte[],boolean,java.lang.String) -> a 
byte[] a(byte[],byte[]) -> encrypt 
byte[] b(byte[]) -> getKey 
byte[] b(byte[],byte[]) -> decrypt 
byte[] d(java.lang.String) -> getKey 
java.lang.String a(byte,char[]) -> a 
java.lang.String a(java.io.File) -> getHash 
java.lang.String a(java.lang.String) -> c 
java.lang.String b(java.lang.String) -> encode
 

完整演讲内容请见这里:一文了解安卓App逆向分析与保护机制

相关阅读:一文读懂加固apk的开发者是怎么想的

Android App的破解技术有哪些?如何防止反编译?

关于网易易盾的加固保护

当前安卓App加固到底该如何作到防篡改?

安卓App逆向保护做为开发工做中的重要内容,一直是网易云易盾致力于提供的应用服务。

网易云为您提iOS应用加固 Android应用加固服务,点击都可免费体验

相关文章
相关标签/搜索