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

歡迎訪問 生活随笔!

生活随笔

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

Android

【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 )

發布時間:2025/6/17 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、生成 dex 文件
  • 二、生成 dex 文件代碼示例
  • 三、生成 dex 結果



參考博客 :

  • 【Android 安全】DEX 加密 ( 常用 Android 反編譯工具 | apktool | dex2jar | enjarify | jd-gui | jadx )
  • 【Android 安全】DEX 加密 ( Proguard 簡介 | Proguard 相關網址 | Proguard 混淆配置 )
  • 【Android 安全】DEX 加密 ( Proguard 簡介 | 默認 ProGuard 分析 )
  • 【Android 安全】DEX 加密 ( Proguard keep 用法 | Proguard 默認混淆結果 | 保留類及成員混淆結果 | 保留注解以及被注解修飾的類/成員/方法 )
  • 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的報錯信息 | Proguard 混淆映射文件 mapping.txt )
  • 【Android 安全】DEX 加密 ( Proguard 混淆 | 將混淆后的報錯信息轉為原始報錯信息 | retrace.bat 命令執行目錄 | 暴露更少信息 )
  • 【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密簡介 | APK 文件分析 | DEX 分割 )
  • 【Android 安全】DEX 加密 ( 多 DEX 加載 | 65535 方法數限制和 MultiDex 配置 | PathClassLoader 類加載源碼分析 | DexPathList )
  • 【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加載 | Android 8.0 版本 DEX 加載分析 | Android 5.0 版本 DEX 加載分析 )
  • 【Android 安全】DEX 加密 ( DEX 加密使用到的相關工具 | dx 工具 | zipalign 對齊工具 | apksigner 簽名工具 )
  • 【Android 安全】DEX 加密 ( 支持多 DEX 的 Android 工程結構 )
  • 【Android 安全】DEX 加密 ( 代理 Application 開發 | multiple-dex-core 依賴庫開發 | 配置元數據 | 獲取 apk 文件并準備相關目錄 )
  • 【Android 安全】DEX 加密 ( 代理 Application 開發 | 解壓 apk 文件 | 判定是否是第一次啟動 | 遞歸刪除文件操作 | 解壓 Zip 文件操作 )
  • 【Android 安全】DEX 加密 ( 代理 Application 開發 | 加載 dex 文件 | 反射獲取系統的 Element[] dexElements )
  • 【Android 安全】DEX 加密 ( 代理 Application 開發 | 加載 dex 文件 | 使用反射獲取方法創建本應用的 dexElements | 各版本創建 dex 數組源碼對比 )
  • 【Android 安全】DEX 加密 ( Java 加密工具開發 | 加密解密算法 API | 編譯代理 Application 依賴庫 | 解壓依賴庫 aar 文件 ) )

在 【Android 安全】DEX 加密 ( 支持多 DEX 的 Android 工程結構 ) 博客中介紹了 DEX 加密工程的基本結構 ,

app 是主應用 , 其 Module 類型是 “Phone & Tablet Module” ,

multiple-dex-core 是 Android 依賴庫 , 其作用是解密并加載多 DEX 文件 , 其 Module 類型是 “Android Library” ,

multiple-dex-tools 是 Java 依賴庫 , 其類型是 “Java or Kotlin Library” , 其作用是用于生成主 DEX ( 主 DEX 的作用就是用于解密與加載多 DEX ) , 并且還要為修改后的 APK 進行簽名 ;


在 【Android 安全】DEX 加密 ( 代理 Application 開發 | multiple-dex-core 依賴庫開發 | 配置元數據 | 獲取 apk 文件并準備相關目錄 ) 博客中講解了 multiple-dex-core 依賴庫開發 , 每次啟動都要解密與加載 dex 文件 , 在該博客中講解到了 獲取 apk 文件 , 并準備解壓目錄 ;

在 【Android 安全】DEX 加密 ( 代理 Application 開發 | 解壓 apk 文件 | 判定是否是第一次啟動 | 遞歸刪除文件操作 | 解壓 Zip 文件操作 ) 博客中講解了 apk 文件解壓操作 ;

在 【Android 安全】DEX 加密 ( 代理 Application 開發 | 加載 dex 文件 | 反射獲取系統的 Element[] dexElements )博客中講解了 dex 文件加載第一階段 , 獲取系統中的 Element[] dexElements ;

在 【Android 安全】DEX 加密 ( 代理 Application 開發 | 加載 dex 文件 | 使用反射獲取方法創建本應用的 dexElements | 各版本創建 dex 數組源碼對比 ) 博客中講解了講解 dex 文件加載操作 第二階段 , 創建本應用的 dex 文件數組 Element[] dexElements ;

在 【Android 安全】DEX 加密 ( 代理 Application 開發 | 加載 dex 文件 | 將系統的 dexElements 與 應用的 dexElements 合并 | 替換操作 ) 博客中講解了剩余的兩個操作 :

  • 系統加載的 Element[] dexElements 數組 與 我們 自己的 Element[] dexElements 數組 進行合并操作 ;
  • 替換 ClassLoader 加載過程中的 Element[] dexElements 數組 ( 封裝在 DexPathList 中 )

在 【Android 安全】DEX 加密 ( Java 加密工具開發 | 加密解密算法 API | 編譯代理 Application 依賴庫 | 解壓依賴庫 aar 文件 ) ) 博客中介紹 加密解密算法 API , 編譯代理 Application 依賴庫 , 解壓依賴庫 aar 文件 ;


本博客中介紹 使用 SDK 中的 dx 工具生成 dex 文件 ;





一、生成 dex 文件



上一篇博客解壓了 代理 Application 依賴庫 multiple-dex-core-debug.aar , 并獲取了其中的 classes.jar 文件 ;

現在開始使用 dx 命令 , 將其轉為 dex 文件 ;

dx 具體用法參考 【Android 安全】DEX 加密 ( DEX 加密使用到的相關工具 | dx 工具 | zipalign 對齊工具 | apksigner 簽名工具 ) 博客 ;


查看在 Android 應用 Module 下的 build.gradle 中使用的 buildToolsVersion 版本 , 30.0.2 , 之后我們要去 SDK 的 build-tools\30.0.2 目錄下查找 dx.bat 工具 , 使用該工具將 classex.jar 轉為 classes.dex 文件 ;


dx 工具的實際路徑 : D:\001_Programs\001_Android\002_Sdk\Sdk\build-tools\30.0.2\dx.bat


在我的電腦上執行的完整命令行命令是 : D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat –dex –output D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.dex D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.jar

D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat --dex --output D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.dex D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.jar

上述命令中所有的 指令 文件 均沒有使用環境變量 , 全部都是實際的絕對路徑 ;

dx 工具路徑 : D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat

classes.jar 路徑 ( 轉換前的文件 ) : D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.jar

classes.dex 路徑 ( 轉換后的文件 ) : D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.dex


Windows 執行 DOS 命令行注意 : 命令之前需要加上 "cmd /c " 信息

Linux 與 MAC 命令行不用添加 , 直接使用命令即可 ;


Windows 中執行的完整命令是 :

cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat –dex –output D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.dex D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.jar





二、生成 dex 文件代碼示例



創建 classes.jar ( dex 轉換前的文件 ) , classes.dex ( dex轉換后的文件 ) 文件對象 , 使用這兩個文件對象獲取完整路徑 ;

// 拿到 multiple-dex-core-debug.aar 中解壓出來的 classes.jar 文件var classesJarFile = File(aarUnzip, "classes.jar")// 創建轉換后的 dex 目的文件, 下面會開始創建該 dex 文件var classesDexFile = File(aarUnzip, "classes.dex")

Java 代碼中調用命令行執行 : 使用 Runtime.getRuntime().exec("") 執行命令行 ;

var process = Runtime.getRuntime().exec("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat --dex --output ${classesDexFile.absolutePath} ${classesJarFile.absolutePath}")

等待命令行執行完畢 : process.waitFor() 等待執行完畢 ;

// 等待上述命令執行完畢process.waitFor()

最后查看命令行執行結果 : 如果執行成功 , process.exitValue() 返回值為 0 , 反之不為 0 ;

// 執行結果提示if(process.exitValue() == 0){println("執行成功");}else{println("執行失敗");}

生成 dex 文件的完整代碼 :

fun main() {/*1 . 生成 dex 文件 , 該 dex 文件中只包含解密 其它 dex 的功能編譯工程會生成 Android 依賴庫的 aar 文件生成目錄是 module/build/outputs/aar/ 目錄下前提是需要在 菜單欄 / File / Setting / Build, Execution, Deployment / Compiler設置界面中 , 勾選 Compile independent modules in parallel (may require larger )將 D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-core\build\outputs\aar路徑下的 multiple-dex-core-debug.aar 文件后綴修改為 .zip解壓上述文件拿到 classes.jar 文件即可 ;*/// 獲取 multiple-dex-core-debug.aar 文件對象var aarFile = File("multiple-dex-core/build/outputs/aar/multiple-dex-core-debug.aar")// 解壓上述 multiple-dex-core-debug.aar 文件到 aarUnzip 目錄中// 創建解壓目錄var aarUnzip = File("multiple-dex-tools/aarUnzip")// 解壓操作unZipAar(aarFile, aarUnzip)// 拿到 multiple-dex-core-debug.aar 中解壓出來的 classes.jar 文件var classesJarFile = File(aarUnzip, "classes.jar")// 創建轉換后的 dex 目的文件, 下面會開始創建該 dex 文件var classesDexFile = File(aarUnzip, "classes.dex")// 打印要執行的命令println("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat --dex --output ${classesDexFile.absolutePath} ${classesJarFile.absolutePath}")/*將 jar 包變成 dex 文件 使用 dx 工具命令注意 : Windows 命令行命令之前需要加上 "cmd /c " 信息 , Linux 與 MAC 命令行不用添加*/var process = Runtime.getRuntime().exec("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat --dex --output ${classesDexFile.absolutePath} ${classesJarFile.absolutePath}")// 等待上述命令執行完畢process.waitFor()// 執行結果提示if(process.exitValue() == 0){println("執行成功");}else{println("執行失敗");}}



三、生成 dex 結果



控制臺打印結果 :

D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\bin\java.exe -javaagent:D:\001_Programs\001_Android\004_AndroidStudio_4.1\lib\idea_rt.jar=53488:D:\001_Programs\001_Android\004_AndroidStudio_4.1\bin -Dfile.encoding=UTF-8 -classpath D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\charsets.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\access-bridge-64.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\cldrdata.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\dnsns.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\jaccess.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\localedata.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\nashorn.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\sunec.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\sunjce_provider.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\sunmscapi.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\sunpkcs11.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\ext\zipfs.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\jce.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\jsse.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\management-agent.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\resources.jar;D:\001_Programs\001_Android\004_AndroidStudio_4.1\jre\jre\lib\rt.jar;D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\build\classes\kotlin\main;D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\build\libs\multiple-dex-tools.jar;C:\Users\octop\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-jdk7\1.3.61\70dffc5f8ac5ea7c34f30deac5b9d8b1d48af066\kotlin-stdlib-jdk7-1.3.61.jar;C:\Users\octop\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\1.3.61\4702105e97f7396ae41b113fdbdc180ec1eb1e36\kotlin-stdlib-1.3.61.jar;C:\Users\octop\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib-common\1.3.61\65abb71d5afb850b68be03987b08e2c864ca3110\kotlin-stdlib-common-1.3.61.jar;C:\Users\octop\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar kim.hsl.multiple_dex_tools.AESKt cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat --dex --output D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.dex D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.jar 執行成功Process finished with exit code 0

aar 文件解壓及 dx 轉換 :

下圖中的 aarUnzip 是解壓的結果 ; ( 藍色矩形框 )

classes.dex 是將 aar 解壓后的 classes.jar 轉為 dex 的結果 , ( 紅色矩形框 ) , 執行的命令是

cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat –dex –output D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.dex D:\002_Project\002_Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.jar

總結

以上是生活随笔為你收集整理的【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黄色av影院 | 人人妻人人澡人人爽国产一区 | 色羞羞 | 日韩精品91 | 国产亚洲综合在线 | 亚洲午夜精品视频 | 国产尤物av尤物在线看 | 男女视频一区 | 亚洲天堂av网站 | 日本做爰全过程免费看 | 精品久久网 | 日韩av综合网站 | 在线a毛片 | 亚洲经典久久 | 狂野欧美性猛交xxxx | 久久久免费观看视频 | 欧美成人免费高清视频 | 久久久久无码国产精品一区 | 亚洲日本护士毛茸茸 | 日韩av毛片在线观看 | 欧美女优视频 | 久久久久亚洲av成人无码电影 | 在线观看国产精品视频 | 欧美日韩精品久久久 | 国产乱人乱偷精品视频a人人澡 | 午夜少妇影院 | 亚洲网站在线 | 成人免费视频国产 | 黄色高清在线观看 | 99这里只有精品视频 | 蜜桃香蕉视频 | 国产精品天天干 | 日韩一区二区视频在线播放 | 黄色录像网址 | 国产综合精品一区二区三区 | 国产无遮挡18禁无码网站不卡 | 日韩人妻精品一区二区三区 | 亚洲 国产 欧美 日韩 | 久草精品在线观看视频 | 高清日韩一区 | 欧美日韩一区三区 | 91视频综合网 | 超碰男人天堂 | 欧美性色网 | 天天操天天插天天射 | 亚洲av网址在线 | 天堂а√在线中文在线新版 | 国产精品无码一本二本三本色 | 婷婷综合六月 | 在线播放黄色av | 狠狠干狠狠干 | 国产一区二区在线播放视频 | 国产色无码精品视频国产 | 在线天堂中文字幕 | 中文字幕在线一区 | 98av视频| 午夜精品久久久久 | √天堂中文官网8在线 | www.黄色大片 | 正在播放adn156松下纱荣子 | 丁香六月啪啪 | 人人狠狠综合久久亚洲 | 国产二区精品视频 | 免费大片黄在线观看视频网站 | 97自拍网| 豆花在线观看 | 黄色a视频 | 少妇做爰xxxⅹ性视频 | 在线观看av免费 | 秋霞一级视频 | 青草一区二区 | 国产乱叫456在线 | 亚洲伦理在线视频 | 丰满的女人性猛交 | 久久我不卡 | 91 高清 在线 制服 偷拍 | 亚洲男同视频 | 亚洲天堂网络 | 欧美一区国产一区 | 日韩精品一区二区三区高清免费 | 内射一区二区三区 | 亚洲精品视频免费在线观看 | 日韩电影一二三区 | 国产成人片 | а√天堂资源官网在线资源 | 亚洲天堂麻豆 | 日韩在线看片 | 亚洲一区二区三区成人 | 黄色片a级| 玖草在线视频 | 夜夜夜夜爽 | 久久在线观看 | ts人妖另类精品视频系列 | 女人被男人操 | 日本黄色特级片 | 岛国大片在线观看 | 亚洲色图在线观看视频 | 亚洲一区二区三区不卡视频 | 免费看黄色一级视频 |