【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 )
文章目錄
- 一、DEX 加密簡介
- 二、APK 文件分析
- 三、DEX 分割
一、DEX 加密簡介
Proguard 混淆弊端 : 之前使用 Proguard 混淆 后的代碼 , 雖然降低了代碼的可讀性 , 但是如果多花點時間和精力 , 還是可以讀懂的 , 因此這里繼續進行下一個操作 , DEX 加密 , 經過加密后的 DEX 文件 , 就 無法被反編譯工具反編譯出來了 ;
DEX 加密 : 經過加密后的 DEX 文件 , 就是被破壞了原有格式的 DEX 文件 , 該 DEX 文件不是標準的 DEX 文件 ;
Android 啟動從 Application 開始 , 然后會查找主 Activity 界面 啟動 ;
DEX 加密的情況下 Android 的工程結構 :
-
應用主工程 , 該工程中有一個開發者開發的 Application , MyApplication ;
-
依賴的庫 Library , 在該工程中有一個代理 Application , ProxyApplication ;
主工程中 , 不需要進入加密解密先關的庫 , 應用主工程的開發流程不變 ,
二、APK 文件分析
Android 安裝文件 APK 分析 : APK 文件本質是一個 ZIP 包 , 包含如下內容 ;
- AndroidManifest.xml : 應用/組件配置文件 ;
- resource.arsc
- classes.dex : 封裝 Java / Kotlin 代碼 ;
三、DEX 分割
classes.dex 可以進行分割 :
-
不分割的情況 : 一般情況下 所有代碼都在一個 DEX 下 ;
-
分割的情況 : 該 DEX 可以分割成兩部分 , 其中 一個只包含啟動 Application , 另一個 DEX 包含其他代碼 ;
DEX 加密解密 :
-
分割后加密 : 分割后的 DEX , 只包含啟動 Application 保持不變 , 另一個 DEX 可以拿去加密 ;
-
啟動時解密 : 啟動時 , 主 DEX 執行 Application 時 , 會解密另外一個被加密的 DEX , 并加載到 ClassLoader 中 ;
DEX 分割的必要性 : 如果在 主 DEX 中的 Application 中 , 引用了很多類 , 此時就必須將引用的類放在主 DEX 中 , 這樣就使得加密的類變少了 ;
上述問題解決方案 : 編寫一個額外的代理 Application , 該 Application 專門用于解密 DEX , 將該代理 Application 制作成主 DEX , 其它的所有代碼都放在另外一個 DEX 中 , 進行加密 ;
DEX 加密的優勢 : 這樣就可以將所有的功能性代碼放在加密后的 DEX 中 , 只有代理 Application 暴露在外面 , 反編譯該應用 , 只能看到用于解密的 代理 Application 類 , 其它的代碼都在加密的 DEX 中 ;
總結
以上是生活随笔為你收集整理的【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 安全】DEX 加密 (
- 下一篇: 【Android 安全】DEX 加密 (