问题
使用 Android Killer 进行 apk 文件反编译时,遇到“反编译失败,无法继续下一步源码反编译!” 报错。
报错内容:
当前 Apktool 使用版本:android 2.4.1
正在反编译 APK,请稍等…
I: Using Apktool 2.4.1 on chelaile_app.apk
I: Loading resource table…
I: Decoding AndroidManifest.xml with resources…
I: Loading resource table from file: C:\Users\Administrator\AppData\Local\apktool\framework\1.apk
I: Regular manifest package…
I: Decoding file-resources…
I: Decoding values / XMLs…
I: Baksmaling classes.dex…
I: Baksmaling classes2.dex…
I: Baksmaling classes3.dex…
I: Baksmaling classes4.dex…
I: Baksmaling assets/A3AEECD8.dex…
Exception in thread “main” org.jf.dexlib2.dexbacked.DexBackedDexFileNotADexFile: Not a valid dex magic value: cf 77 4c c7 9b 21 01 cd at org.jf.dexlib2.util.DexUtil.verifyDexHeader(DexUtil.java:93) at org.jf.dexlib2.dexbacked.DexBackedDexFile.getVersion(DexBackedDexFile.java:111) at org.jf.dexlib2.dexbacked.DexBackedDexFile.(DexBackedDexFile.java:78) at org.jf.dexlib2.dexbacked.DexBackedDexFile.(DexBackedDexFile.java:138) at org.jf.dexlib2.dexbacked.ZipDexContainer1.getDexFile(ZipDexContainer.java:181)
at brut.androlib.src.SmaliDecoder.decode(SmaliDecoder.java:90)
at brut.androlib.src.SmaliDecoder.decode(SmaliDecoder.java:39)
at brut.androlib.Androlib.decodeSourcesSmali(Androlib.java:96)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:164)
at brut.apktool.Main.cmdDecode(Main.java:170)
at brut.apktool.Main.main(Main.java:76)
APK 反编译失败,无法继续下一步源码反编译!
更新 APKTOOL
下载地址:https://connortumbleson.com/apktool/,此处下载最新版本 apktool_2.4.1.jar;
注意:如果 APKTOOL 已经是 apktool_2.4.1.jar 版本,则直接跳到第三步!
打开 AndroidKiller,依次点击 Android -> APKTOOL管理器 -> 添加,得到下图弹窗;
点击弹窗 路径 输入框尾部的文件及图标,根据前面的下载路径找到 apktool_2.4.1.jar,如下图:
3. 输入 APKTOOL 参数
报错中提示是由于非法 dex,这是因为 apk 里有加密过后的 dex 文件,比如有些 apk 的 assets 目录下有加密后的 dex 文件,添加 –only-main-classes 参数即可; 在 编辑 APKTOOL 弹窗 参数 输入框,输入参数 --only-main-classe; 注意:这一步是关键,一定不能省略!
在 APKTOOL 管理器 弹窗尾部,重新选择默认的 Apktool 版本为 apktool_2.4.1.jar;
4. 重启 AndroidKiller 并再次编译
重启AndroidKiller,并再次编译 apk 文件,得到下图,编译成功。