如何将Android DEX(虚拟机字节码)文件反编译成相应的Java源代码?
当前回答
我用过
Dex2jar + jd-gui javadecompilers.com enjarify Apktool
但没有比谷歌自己的工具更好的了
1)Android Studio 2.x: 构建>分析apk
2)Android Studio 3.0: 配置文件或调试APK
其他回答
我建议大家去这里看看: https://github.com/JesusFreke/smali
它提供了BAKSMALI,这是用于DEX文件的最优秀的逆向工程工具。 它是由JesusFreke制作的,他为Android创造了著名的rom。
弗雷德回答的更完整版本:
手动方式
首先,您需要一个工具将DEX上的所有(已编译的)类提取到JAR中。 有一个叫dex2jar的,是一个中国学生做的。
然后,您可以使用jd-gui将JAR上的类反编译为源代码。 由于dex2jar应用了一些优化,因此得到的源代码应该非常易读。
自动方式
你可以使用APKTool。它将自动提取所有的类(.dex)、资源(.asrc),然后它将二进制XML转换为人类可读的XML,它还将为您分解类。 反汇编总是比反汇编更健壮,特别是使用 jar与Pro Guard混淆!
只需告诉APKTool解码APK到一个目录,然后修改你想要的, 最后编码回APK。这是所有。
重点:APKTool可以分解。它不会反编译。 生成的代码不是Java源代码。 但是如果您熟悉jasmin,您应该能够阅读它,甚至可以编辑它。 如果你想要Java源码,请参照手动方式。
如果您不打算下载dex2jar,那么只需使用apk_grabber python脚本将任何apk反编译到jar文件中。然后使用jd-gui读取它们。
这可以通过以下五个步骤来完成:
这个gem自动为您完成这些工作,甚至安装所需的工具
将apk文件转换为zip 解压缩文件 从中提取classes.dex 使用dex to jar将classes.dex转换为jar文件 使用jadx GUI打开jar文件作为Java源代码
使用Dedexer,您可以将.dex文件分解为dalvik字节码(.ddx)。
据我所知,向Java反编译是不可能的。 你可以在这里阅读dalvik字节码。
推荐文章
- 找到java类从哪里加载
- 从集合中随机选取一个元素
- 为什么x == (x = y)和(x = y) == x不一样?
- 什么Java 8流。收集等价物可在标准Kotlin库?
- 在Android 5棒棒糖中,通知栏图标变成白色
- 从URI获取真实路径,Android奇巧新的存储访问框架
- 等待未来的名单
- 如何检查JSON键是否存在?
- 为什么MongoDB Java驱动在条件中使用随机数生成器?
- 即使从未抛出异常,使用try-catch块的代价是否昂贵?
- 什么时候我们应该使用观察者和可观察对象?
- ImageView -有高度匹配宽度?
- 如何确定在android文件的MIME类型?
- Java中的split()方法对点(.)不起作用。
- Eclipse调试器总是阻塞在ThreadPoolExecutor上,没有任何明显的异常,为什么?