DEX加固与反编译

2020-03-04  本文已影响0人  瑜小贤

编译

将java代码转换为Dalvik字节码
将res资源文件、AndroidManifest.xml等配置文件编译为二进制文件

反编译

将DEX文件转换为jar包或者Smali文件
将二进制资源文件还原为资源源码文件
工具:

1. ApkTool https://ibotpeaches.github.io/Apktool
2. dex2jar https://github.com/pxb1988/dex2jar
dex2jar示例
3. jd-gui http://jd.benow.ca/

源码阅读工具


jd-gui示例

应用安全与反编译

1.Android应用反编译的威胁
2.保护方案
3.应用开发安全生态链
应用开发安全生态链

DEX加固方案与原理

1. DEX加固方案演进(文件级--方法级--指令级)
dex加固方案演进
2. DEX内存加载实现原理
  • ProxyApplication:框架会提供一个ProxyApplication抽象基类,使用者需要继承这个类,并重载其initProxyApplication()方法,在其中改变surrounding,如替换ClassLoader等
  • DelegateApplication:即应用原有的Application,应用从getApplicationContext()等方法中取到的都是DelegateApplication
//old AndroidManifest.xml
<application
    android:name=".MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name">

//new AndroidManifest.xml
<application
    android:name=".MyProxyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name">
public abstract class ProxyApplication extends Application{
    /**
     *  initProxyApplication实现内容
     *  1.内存加载DEX:加载原Application
     *  2. ClassLoader设置
     *  3. Application引用替换
    **/
    protected abstract void initProxyApplication();
    
    @Override
    protected void attachBaseContext(Context context){
        super.attachBaseContext(context);
        initProxyApplication();
    }
    //...
}
壳启动流程
壳启动流程 DEX加固效果(内存加载方案)
3. 加壳方案

https://github.com/AndyGu/ProtectApp

4. 如何制定某个类在main dex中?
  1. multiDexKeepFile:手动加入要放到Main.dex中的类
    com.umeng,analytics.Abb.class
  2. multiDexKeepProguard:以Proguard的方式手动加入要放到main.dex中的类
    -keep public class com.tencent.bugly.**{*};
知识点 面试体系
熟练掌握Java IO相关代码 Java语言进阶 RandomAccessFile
深入研究Android apk的启动流程 精通Android FrameWork层
精通Multidex文件加载机制,精通类加载机制 精通Android FrameWork层,JVM,DVM ClassLoader
明确dex文件的基本构造,了解dex文件相关源码 精通Android FrameWork层dex
APK打包的基本流程需要理解 Gradle工具熟练
掌握C/C++语言及NDK开发 精通C/C++语言及NDK开发
上一篇下一篇

猜你喜欢

热点阅读