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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件签名 )

發(fā)布時(shí)間:2025/6/17 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件签名 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、生成 jks 文件
  • 二、簽名命令
  • 三、執(zhí)行結(jié)果
  • 四、處理 Unsupported major.minor version 52.0 錯(cuò)誤



參考博客 :

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

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

app 是主應(yīng)用 , 其 Module 類型是 “Phone & Tablet Module” ,

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

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


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

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

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

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

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

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

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

在 【Android 安全】DEX 加密 ( Java 工具開發(fā) | 生成 dex 文件 | Java 命令行執(zhí)行 ) 博客中介紹 使用 SDK 中的 dx 工具生成 dex 文件 ;


在 【Android 安全】DEX 加密 ( Java 工具開發(fā) | 解壓 apk 文件 | 加密生成 dex 文件 | 打包未簽名 apk 文件 | 文件解壓縮相關(guān)代碼 ) 博客中講解 將 app 主應(yīng)用的 apk 文件解壓 , 加密其中的 classes.dex 文件 , 并將代理 Application 依賴庫(kù)中的 classes.dex 打包到未簽名的 apk 文件中 ;

在 【Android 安全】DEX 加密 ( Java 工具開發(fā) | apk 文件對(duì)齊 ) 博客中講解 apk 文件對(duì)齊操作 ;


本博客中講解 apk 簽名 ;





一、生成 jks 文件



選擇 菜單欄/Build/Generate Signed Bundle / APK 選項(xiàng) ,

在后續(xù)彈出的 Generate Signed Bundle or APK 對(duì)話框中 , 點(diǎn)擊 Create new 按鈕 ,

在下面的對(duì)話框中輸入 jks 的密碼 , Key 名稱 , 及 Key 的密碼 ;

密碼都是 000000000000000000

生成結(jié)果 :





二、簽名命令



參考 【Android 安全】DEX 加密 ( DEX 加密使用到的相關(guān)工具 | dx 工具 | zipalign 對(duì)齊工具 | apksigner 簽名工具 ) 博客中的 apksigner 簽名工具使用方法 ,


簽名命令參考 :

apksigner sign --ks jks文件路徑 --ks-key-alias 別名名稱 --ks-pass pass:jsk密碼 --key-pass pass:別名密碼 --out out.apk in.apk

實(shí)際運(yùn)行的簽名命令 :

D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign –ks D:\002_Project\002_Android_Learn\DexEncryption\dex.jks –ks-key-alias Key0 –ks-pass pass:000000 –key-pass pass:000000 –out D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-signed-aligned.apk D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk


  • D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner 是完整的命令工具路徑 ;
  • sign 表示操作選項(xiàng) , 簽名 ;
  • –ks D:\002_Project\002_Android_Learn\DexEncryption\dex.jks 指定簽名 jks 文件路徑 ;
  • –ks-key-alias Key0 指定別名 ;
  • –ks-pass pass:000000 指定別名密碼 ;
  • –key-pass pass:000000 指定 jks 密碼 ;
  • –out D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-signed-aligned.apk 指定輸出文件路徑 ;
  • D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk 指定輸入文件路徑 ;

完整代碼示例 :

/*5 . 簽名操作*/// 簽名 apk 輸出結(jié)果, 將 app-unsigned-aligned.apk 簽名, 簽名后的文件輸出到 app-signed-aligned.apk 中var signedAlignApk = File("app/build/outputs/apk/debug/app-signed-aligned.apk")// 獲取簽名 jks 文件var jksFile = File("dex.jks")// 打印要執(zhí)行的命令println("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign --ks ${jksFile.absolutePath} --ks-key-alias Key0 --ks-pass pass:000000 --key-pass pass:000000 --out ${signedAlignApk.absolutePath} ${unSignedAlignApk.absolutePath}")/*將 app-unsigned.apk 對(duì)齊使用 zipalign 工具命令注意 : Windows 命令行命令之前需要加上 "cmd /c " 信息 , Linux 與 MAC 命令行不用添加*/process = Runtime.getRuntime().exec("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign --ks ${jksFile.absolutePath} --ks-key-alias Key0 --ks-pass pass:000000 --key-pass pass:000000 --out ${signedAlignApk.absolutePath} ${unSignedAlignApk.absolutePath}")// 打印錯(cuò)誤日志var br = BufferedReader(InputStreamReader(process.errorStream))while ( true ){var line = br.readLine()if(line == null){break}else{println(line)}}br.close()// 等待上述命令執(zhí)行完畢process.waitFor()// 執(zhí)行結(jié)果提示if(process.exitValue() == 0){println("簽名操作 執(zhí)行成功");} else {println("簽名操作 執(zhí)行失敗");}



三、執(zhí)行結(jié)果



生成的簽名文件結(jié)果 : 紅色矩形框中的 app-signed-aligned.apk 就是生成的 apk 簽名文件 ;

命令行輸出 : 主要是展示完整的命令 ;

cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign --ks D:\002_Project\002_Android_Learn\DexEncryption\dex.jks --ks-key-alias Key0 --ks-pass pass:000000 --key-pass pass:000000 --out D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-signed-aligned.apk D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk 簽名操作 執(zhí)行成功



四、處理 Unsupported major.minor version 52.0 錯(cuò)誤



處理 Unsupported major.minor version 52.0 錯(cuò)誤 :

出現(xiàn)的錯(cuò)誤 : 由于 電腦 上的 Java 版本低于 Android Studio 中的 Java 版本 ;

C:\Users\octop>D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/apksigner sign --ks D:\002_Project\002_Android_Learn\DexEncryption\dex.jks --ks-key-alias Key0 --ks-pass pass:000000 --key-pass pass:000000 --out D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-signed-aligned.apk D:\002_Project\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/apksigner/ApkSignerTool : Unsupported major.minor version 52.0at java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:800)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)at java.net.URLClassLoader.access$100(URLClassLoader.java:71)at java.net.URLClassLoader$1.run(URLClassLoader.java:361)at java.net.URLClassLoader$1.run(URLClassLoader.java:355)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:354)at java.lang.ClassLoader.loadClass(ClassLoader.java:425)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)at java.lang.ClassLoader.loadClass(ClassLoader.java:358)at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) C:\Users\octop>java -version java version "1.8.0_231" Java(TM) SE Runtime Environment (build 1.8.0_231-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

將電腦本身的 JDK 更新成 1.8 即可 ;

總結(jié)

以上是生活随笔為你收集整理的【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件签名 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。