【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )

简介: 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )

文章目录

一、Instrumentation 源码分析

二、Instrumentation 创建 Application 相关的部分源码



dex 解密时 , 需要将 代理 Application 替换为 真实 Application ; 替换 Application 首先要理解系统如何注册应用的 Application 的 ;






一、Instrumentation 源码分析


Instrumentation.java 类参考源码 : 6.0.1_r16/xref/frameworks/base/core/java/android/app/Instrumentation.java 常用方法 :


newActivity : 创建 Activity ;

newApplication : 创建 Application ;

sendKeyDownUpSync : 模拟按键 ;


上一篇博客中讲解了 LoadedApk 中调用 makeApplication 方法创建应用的 Application , 在该方法中通过调用 Instrumentation 的 newApplication 方法创建 Application ;


在 Application newApplication(ClassLoader cl, String className, Context context) 中 , 调用了其重载函数 Application newApplication(Class<?> clazz, Context context) , 前者包含 3 33 个参数 , 后者包含 2 22 个参数 ;


 

public Application newApplication(ClassLoader cl, String className, Context context)
            throws InstantiationException, IllegalAccessException, 
            ClassNotFoundException {
        return newApplication(cl.loadClass(className), context);
    }


完整源码参考 : 6.0.1_r16/xref/frameworks/base/core/java/android/app/Instrumentation.java



在 Application newApplication(Class<?> clazz, Context context) 函数中就执行了两行代码 , 调用 clazz.newInstance() 反射创建 Application 对象 , 然后调用 Application 的 attach 函数 , 传入 Context 上下文对象 ;


static public Application newApplication(Class<?> clazz, Context context)
            throws InstantiationException, IllegalAccessException, 
            ClassNotFoundException {
        Application app = (Application)clazz.newInstance();
        app.attach(context);
        return app;
    }


完整源码参考 : 6.0.1_r16/xref/frameworks/base/core/java/android/app/Instrumentation.java



Application 的 void attach(Context context) 方法中 , 调用了 attachBaseContext(context) 方法 , 由此可以看出在 Application 中 , attachBaseContext 函数要比 onCreate 先执行 ;


在 Application 使用反射方法创建出来之后 , 马上就会调用 attach 方法 , 进而先调用 attachBaseContext 方法 ;


public class Application extends ContextWrapper implements ComponentCallbacks2 {
    /**
     * @hide
     */
    /* package */ final void attach(Context context) {
        attachBaseContext(context);
        mLoadedApk = ContextImpl.getImpl(context).mPackageInfo;
    }
}


源码参考 : xref/frameworks/base/core/java/android/app/Application.java






二、Instrumentation 创建 Application 相关的部分源码


public class Instrumentation {
    /**
     * Perform instantiation of the process's {@link Application} object.  The
     * default implementation provides the normal system behavior.
     * 
     * @param cl The ClassLoader with which to instantiate the object.
     * @param className The name of the class implementing the Application
     *                  object.
     * @param context The context to initialize the application with
     * 
     * @return The newly instantiated Application object.
     */
    public Application newApplication(ClassLoader cl, String className, Context context)
            throws InstantiationException, IllegalAccessException, 
            ClassNotFoundException {
        return newApplication(cl.loadClass(className), context);
    }
    /**
     * Perform instantiation of the process's {@link Application} object.  The
     * default implementation provides the normal system behavior.
     * 
     * @param clazz The class used to create an Application object from.
     * @param context The context to initialize the application with
     * 
     * @return The newly instantiated Application object.
     */
    static public Application newApplication(Class<?> clazz, Context context)
            throws InstantiationException, IllegalAccessException, 
            ClassNotFoundException {
        Application app = (Application)clazz.newInstance();
        app.attach(context);
        return app;
    }
}



完整源码参考 : 6.0.1_r16/xref/frameworks/base/core/java/android/app/Instrumentation.java



目录
相关文章
|
3月前
|
安全 Linux Android开发
Android 安全功能
Android 安全功能
37 0
|
3月前
|
安全 Linux Android开发
Android安全启动学习(一):AVB校验是什么?
Android安全启动学习(一):AVB校验是什么?
98 0
|
3月前
|
存储 安全 Linux
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
121 0
|
4月前
|
数据库 Android开发
Android Studio开发之应用组件Application的讲解及实战(附源码,通过图书管理信息系统实战)
Android Studio开发之应用组件Application的讲解及实战(附源码,通过图书管理信息系统实战)
49 0
|
6月前
|
存储 安全 Java
Android DataStore:安全存储和轻松管理数据
Android DataStore:安全存储和轻松管理数据
|
2月前
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
18 1
|
2月前
|
Java 开发工具 Android开发
[Android AIDL] --- AIDL原理简析
[Android AIDL] --- AIDL原理简析
33 0
|
3月前
|
缓存 Java 数据库
Android 性能优化: 请解释ANR(Application Not Responding)是什么,如何避免它?
Android 性能优化: 请解释ANR(Application Not Responding)是什么,如何避免它?
47 0
|
3月前
|
安全 Java 数据安全/隐私保护
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
66 0
|
3月前
|
安全 算法 Android开发
Android安全启动学习(五):Android Verified Boot 2.0
Android安全启动学习(五):Android Verified Boot 2.0
212 0