如何将Android DEX(虚拟机字节码)文件反编译成相应的Java源代码?
当前回答
最近Debian有Python包androguard:
Description-en: full Python tool to play with Android files
Androguard is a full Python tool to play with Android files.
* DEX, ODEX
* APK
* Android's binary xml
* Android resources
* Disassemble DEX/ODEX bytecodes
* Decompiler for DEX/ODEX files
安装相应的软件包:
sudo apt-get install androguard python-networkx
反编译DEX文件:
$ androdd -i classes.dex -o ./dir-for-output
从Apk +反编译中提取classes.dex:
$ androdd -i app.apk -o ./dir-for-output
Apk文件就是Java的JAR文件,你可以通过以下方法从JAR文件中提取文件:
$ unzip app.apk -d ./dir-for-output
其他回答
我建议大家去这里看看: https://github.com/JesusFreke/smali
它提供了BAKSMALI,这是用于DEX文件的最优秀的逆向工程工具。 它是由JesusFreke制作的,他为Android创造了著名的rom。
反编译android应用程序最简单的方法是从playstore下载一个名为ShowJava的应用程序。只需从应用程序列表中选择需要反编译的应用程序。你可以使用三种不同的反编译器来反编译应用程序,即-
CFR 0.110, JaDX 0.6.1或FernFlower(分析反编译器)。
Android逆向工程是可能的 . 按照以下步骤从apk文件中获取.java文件。
步骤1。使用dex2jar
从。apk文件生成。jar文件 命令:dex2jar sampleApp.apk
步骤2。使用JD-GUI反编译.jar
它会反编译。class文件,也就是说,我们会从apk中得到模糊的。java文件。
使用Dedexer,您可以将.dex文件分解为dalvik字节码(.ddx)。
据我所知,向Java反编译是不可能的。 你可以在这里阅读dalvik字节码。
因为Dheeraj Bhaskar的答案在很多年前就已经过时了。
以下是我最新的答案(2019年):
主逻辑
从dex到Java源代码,目前有两种解决方案:
一步:直接转换dex到java源代码 两步:首先将dex转换为jar,然后将jar转换为java源代码
一步解决方案:dex直接到java源代码
工具
jadx
过程
下载jadx-0.9.0.zip,解压,在bin文件夹中可以看到命令行jadx或GUI版本jadx- GUI,双击运行GUI版本:jadx- GUI
打开dex文件
然后可以显示Java源代码:
文件->保存为gradle项目
然后得到Java源代码:
两步解决方案
步骤1:dex到jar
工具
dex2jar
过程
下载dex2jar zip,解压得到d2j-dex2jar.sh,然后:
Apk到jar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk .sh Dex to jar: sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
例子:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
Step2: jar到java源代码
工具
Jd-gui:最流行的,但许多代码会反编译错误 CRF:流行,次要代码会反编译错误 Procyon:流行,没有代码反编译错误 基于Procyon的GUI工具 Luyten: 字节码查看器 其他人 喀拉喀托火山 Fernflower 旧的:AndroChef 等。
过程
这里演示Procyon转换jar到java源代码:
下载procyon-decompiler-0.5.34.jar
然后使用语法:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName .jar
例子:
java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/ Procyon -decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612
使用编辑器VSCode打开导出的源代码,如下所示:
结论
转换正确性:Jadx > Procyon > CRF > JD-GUI
推荐使用:(一步解决方案)Jadx
for more detailed explanation, please refer my online Chinese ebook: Security and Cracking of Android Apps
推荐文章
- Manifest合并失败:uses-sdk:minSdkVersion 14
- 到底是什么导致了堆栈溢出错误?
- 为什么Android工作室说“等待调试器”如果我不调试?
- Java:路径vs文件
- 如何检查我的EditText字段是否为空?
- Android从图库中选择图像
- 后台任务,进度对话框,方向改变-有任何100%工作的解决方案吗?
- ExecutorService,如何等待所有任务完成
- Android:垂直对齐多行EditText(文本区域)
- Maven依赖Servlet 3.0 API?
- Android无尽列表
- 如何在IntelliJ IDEA中添加目录到应用程序运行概要文件中的类路径?
- getter和setter是糟糕的设计吗?相互矛盾的建议
- Android room persistent: AppDatabase_Impl不存在
- Java的String[]在Kotlin中等价于什么?