目的将dex文件反编译成jar
步骤如下:
(1) 将apk重命名为zip;
(2) 用zip解压classes.dex;
(3) 执行 d2j-dex2jar classes.dex //将classes.dex反编译成classes-dex2jar.jar
dex2jar classes.dex -> .\classes-dex2jar.jar
可选参数如下:
usage: d2j-dex2jar [options] <file0> [file1 ... fileN]
options:
-d,--debug-info translate debug info //转 debug信息
-e,--exception-file <file> detail exception file, default is $current_dir/[file-name]-error.zip //指定报错文件路径文件名
-f,--force force overwrite //强制覆盖目标文件
-h,--help Print this help message //帮助
-n,--not-handle-exception not handle any exception throwed by dex2jar //不处理异常
-nc,--no-code
-o,--output <out-jar-file> output .jar file, default is $current_dir/[file-name]-dex2jar.jar //指定输出jar包文件路径文件名
-os,--optmize-synchronized optmize-synchronized//??
-p,--print-ir print ir to Syste.out
-r,--reuse-reg reuse regiter while generate java .class file //复用寄存器?
-s same with --topological-sort/-ts
-ts,--topological-sort sort block by topological, that will generate morereadable code, default enabled
支持直接decode apk文件,命令如下:
d2j-dex2jar xxx.apk
FAQ
1 遇到 "not support version"问题?
E:\Decompilation\Dex2jar\dex2jar-2.0>d2j-dex2jar.bat classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar
com.googlecode.d2j.DexException: not support version.
at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java
at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java
at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.
at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:288)
at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:32)
解决办法:将dex文件以16进制打开(例如用Ultra Edit), 若前八位是不是“64 65 78 0A 30 33 35 00”(字符串格式为“dex.035."),
则将其修改为“64 65 78 0A 30 33 35 00”保存好再进行反编译即可
2 关键代码解不出来?
可以尝试使用Jadx-gui工具打开,大部分java代码都能自动反解出来,但是仍然有些反解不出。
Jadx-gui工具
使用简单,只用把apk或dex文件拖拽到界面上,自动反解,用时较慢。
luyten 工具
该工具只能打开jar包,只用把jar文件拖拽到界面上,自动反解。