zoukankan      html  css  js  c++  java
  • 大公司怎么做Android代码混淆的?

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

     

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

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

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

     

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

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

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

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

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

     

    Proguard处理前
     Proguard处理后

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

    混淆代码逆向分析

    如果想要反编译混淆代码,钟亚平分享了一个国外的工具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应用加固服务,点击均可免费体验

  • 相关阅读:
    人月神话阅读笔记03(完)
    人月神话阅读笔记02
    各种前端好用的在线工具、学习网站、插件
    垂直居中css
    输入框判断表情的输入js
    jq九宫格抽奖
    移动端中一像素的解决方案
    获取url地址栏中的参数数据
    ios中getTime()的兼容性问题
    清除Css中select的下拉箭头样式
  • 原文地址:https://www.cnblogs.com/163yun/p/9229574.html
Copyright © 2011-2022 走看看