Wil*_*ill 697 java android reverse-engineering decompiler dex
如何将Android DEX(VM字节码)文件反编译成相应的Java源代码?
小智 867
获取这些工具:
1)dex2jar将dex文件转换为jar文件
2)jd-gui查看jar中的java文件
源代码非常易读,因为dex2jar进行了一些优化.
这是关于如何反编译的过程:
将test_apk-debug.apk中的classes.dex转换为test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
Run Code Online (Sandbox Code Playgroud)
注意:在Windows计算机中,所有
.sh脚本都将替换为.bat脚本
在JD-GUI中打开jar
Zac*_*ton 132
为了澄清一点,根据您想要完成的任务,您可以在此处使用两条主要路径:
将Dalvik字节码(dex)反编译为可读的Java源代码.您可以使用dex2jar和jd-gui轻松完成此操作,正如fred提到的那样.生成的源可用于阅读和理解应用程序的功能,但可能无法生成100%可用的代码.换句话说,您可以阅读源代码,但无法真正修改和重新打包它.请注意,如果使用proguard对源进行了混淆,则生成的源代码将难以解开.
另一个主要的替代方法是将字节码反汇编为smali,这是一种专为此目的而设计的汇编语言.我发现最简单的方法是使用apktool.一旦你安装了apktool,你就可以将它指向一个apk文件,你将获得应用程序中包含的每个类的smali文件.您可以通过从新Java源生成smali来完全读取和修改smali甚至替换类(为此,您可以使用javac将.java源代码编译为.class文件,然后使用Android将.class文件转换为.dex文件dx编译器,然后使用baksmali(smali反汇编程序)将.dex转换为.smali文件,如本问题所述.这里可能有一个快捷方式).完成后,您可以使用apktool轻松打包apk.请注意,apktool不会对生成的apk进行签名,因此您需要像其他任何Android应用程序一样处理它.
如果您选择了smali路线,您可能需要尝试使用APK Studio,这是一个自动执行上述某些步骤的IDE,可帮助您反编译和重新编译apk并将其安装在设备上.
简而言之,您的选择几乎要么是反编译成Java,哪个更具可读性,但可能是不可逆转的,或者反汇编为smali,这更难以阅读,但更灵活地进行更改并重新打包修改后的应用程序.您选择哪种方法取决于您希望实现的目标.
最后,敢于提出的建议也值得注意.它是一个重定向工具,可将.dex和.apk文件转换为java .class文件,以便使用典型的java静态分析工具对其进行分析.
ref*_*log 60
我实际上建议你去这里:https: //github.com/JesusFreke/smali
它提供了BAKSMALI,这是DEX文件最优秀的逆向工程工具.它是由JesusFreke制作的,他为Android创造了成名的ROM.
Alb*_*dez 28
首先,您需要一个工具将DEX上的所有(已编译)类提取到JAR.
有一个名为dex2jar,由中国学生制作.
然后,您可以使用JD-GUI来反编译的JAR源代码的类.
结果源应该是可读的,因为dex2jar应用了一些优化.
你可以使用APKTool.它将自动提取所有类(.dex),资源(.asrc),然后它将二进制XML转换为人类可读的XML,它也 将为您解组类.
反编译总是比反编译更强大,特别是对于
使用Pro Guard进行模糊处理的JAR!
只需告诉APKTool 将APK 解码为目录,然后修改您想要的内容,
最后将其编码回APK.就这样.
重要提示: APKTool 无法解决.它不反编译.
生成的代码不是Java源代码.
但是你应该能够阅读它,如果你熟悉jasmin,甚至可以编辑它.
如果您需要Java源代码,请查看手动方式.
小智 15
由于没有人提到这一点,还有一个工具:DED主页
安装方法和一些说明:安装.
它用于一个非常有趣的顶级市场应用程序的安全性研究(并不真正相关,只是如果你很好奇):Android应用程序安全性调查
ish*_*007 15
我用过
但没有人比谷歌自己的工具更好
1)Android Studio 2.x:
build> analyze apk

2)Android Studio 3.0:
配置文件或调试APK

小智 13
下载APK文件后,您需要执行以下步骤以获取可编辑的Java代码/文档.
Android逆向工程是可能的 .按照以下步骤从apk文件中获取.java文件.
步骤1 .使用dex2jar
dex2jar sampleApp.apk第2步 .使用JD-GUI反编译.jar
Since Dheeraj Bhaskar's answer is relatively old as many years past.
Here is my latest (2019 year) answer:
from dex to java sourcecode, currently has two kind of solution:
One Step: directly convert dex to java sourcecodeTwo Step: first convert dex to jar, second convert jar to java sourcecodedex directly to java sourcecodebin folder can see command line jadx or GUI version jadx-gui, double click to run GUI version: jadx-gui
dex file
then can show java source code:

File -> save as gradle project
then got java sourcecode:

dex to jardownload dex2jar zip, unzip got d2j-dex2jar.sh, then:
apk to jar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apkdex to jar: sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dexexample:
? 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
Run Code Online (Sandbox Code Playgroud)
jar to java sourcecodemany code will decompile errorminor code will decompile errorno code decompile error
Procyon
here demo Procyon convert jar to java source code:
download procyon-decompiler-0.5.34.jar
then using syntax:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName
example:
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
using editor VSCode to open exported source code, look like this:

Conversion correctness : Jadx > Procyon > CRF > JD-GUI
Recommend use: (One step solution's) Jadx
for more detailed explanation, please refer my online Chinese ebook: ??????????
最近的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
Run Code Online (Sandbox Code Playgroud)
安装相应的包:
sudo apt-get install androguard python-networkx
Run Code Online (Sandbox Code Playgroud)
反编译DEX文件:
$ androdd -i classes.dex -o ./dir-for-output
Run Code Online (Sandbox Code Playgroud)
classes.dex从Apk + Decompile中提取:
$ androdd -i app.apk -o ./dir-for-output
Run Code Online (Sandbox Code Playgroud)
Apk文件不再是Java存档(JAR),您可以通过以下方式从存档中提取文件:
$ unzip app.apk -d ./dir-for-output
Run Code Online (Sandbox Code Playgroud)
自从大多数答案发布以来,已经发生了很多变化.现在有很多简单的GUI工具,如下所示:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
Run Code Online (Sandbox Code Playgroud)
找到它们的最佳位置是在XDA开发者论坛上.