如何将Android DEX(虚拟机字节码)文件反编译成相应的Java源代码?
当前回答
弗雷德回答的更完整版本:
手动方式
首先,您需要一个工具将DEX上的所有(已编译的)类提取到JAR中。 有一个叫dex2jar的,是一个中国学生做的。
然后,您可以使用jd-gui将JAR上的类反编译为源代码。 由于dex2jar应用了一些优化,因此得到的源代码应该非常易读。
自动方式
你可以使用APKTool。它将自动提取所有的类(.dex)、资源(.asrc),然后它将二进制XML转换为人类可读的XML,它还将为您分解类。 反汇编总是比反汇编更健壮,特别是使用 jar与Pro Guard混淆!
只需告诉APKTool解码APK到一个目录,然后修改你想要的, 最后编码回APK。这是所有。
重点:APKTool可以分解。它不会反编译。 生成的代码不是Java源代码。 但是如果您熟悉jasmin,您应该能够阅读它,甚至可以编辑它。 如果你想要Java源码,请参照手动方式。
其他回答
下载APK文件后,您需要执行以下步骤以获得可编辑的java代码/文档。
Convert your apk file to zip (while start your download don't go with "save" option , just go with "save as" and mention your extension as .zip) by doing like this you may avoid APKTOOL... Extract the zip file , there you can find somefilename.dex. so now we need to convert dex -> .class To do that, you need "dex2jar"(you can download it from http://code.google.com/p/dex2jar/ , after extracted, in command prompt you have to mention like, [D:\dex2jar-0.09>dex2jar somefilename.dex] (Keep in mind that your somefilename.dex must be inside the same folder where you have keep your dex2jar.) Download jad from http://www.viralpatel.net/blogs/download/jad/jad.zip and extract it. Once extracted you can see two files like "jad.exe" and "Readme.txt" (sometimes "jad.txt" may there instead of "jad.exe", so just rename its extension as.exe to run) Finally, in command prompt you have to mention like [D:\jad>jad -sjava yourfilename.class] it will parse your class file into editable java document.
我建议大家去这里看看: https://github.com/JesusFreke/smali
它提供了BAKSMALI,这是用于DEX文件的最优秀的逆向工程工具。 它是由JesusFreke制作的,他为Android创造了著名的rom。
自从这些答案被发布以来,很多事情都发生了变化。现在有很多简单的GUI工具,比如:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
找到他们最好的地方是在XDA开发者论坛上。
最近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
我用过
Dex2jar + jd-gui javadecompilers.com enjarify Apktool
但没有比谷歌自己的工具更好的了
1)Android Studio 2.x: 构建>分析apk
2)Android Studio 3.0: 配置文件或调试APK
推荐文章
- 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中等价于什么?