日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/6/17 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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 , 在該方法中通過調用 InstrumentationnewApplication 方法創建 Application ;

Application newApplication(ClassLoader cl, String className, Context context) 中 , 調用了其重載函數 Application newApplication(Class<?> clazz, Context context) , 前者包含 333 個參數 , 后者包含 222 個參數 ;

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


總結

以上是生活随笔為你收集整理的【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。