decompiling DEX into Java sourcecode
如何将Android DEX(VM字节码)文件分解成相应的Java源代码?
这很容易
获取这些工具:
1)dex2jar将dex文件转换为jar文件
2)JD GUI查看JAR中的Java文件
由于dex2jar进行了一些优化,所以源代码非常可读。
程序:下面是如何反编译的过程:
步骤1:将test_apk-debug.apk中的classes.dex转换为test_apk-debug_dex2jar.jar
1 2 | d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex |
Note: In the Windows machines all the
.sh scripts are replaced by.bat scripts
号
DEX2JAR文档
第2步:在jd-gui中打开罐子
。
为了稍微澄清一下,根据您想要完成的任务,这里有两条主要的路径:
将Dalvik bytecode(DEX)反编译成可读Java源代码。正如弗雷德提到的,使用dex2jar和jd gui可以很容易地做到这一点。结果源对于读取和理解应用程序的功能很有用,但可能不会生成100%可用的代码。换句话说,您可以阅读源代码,但不能真正修改和重新打包它。请注意,如果源代码被proguard混淆了,那么产生的源代码将更加难以解开。
另一个主要的选择是将字节码分解为smali,这是一种专门为此目的而设计的汇编语言。我发现最简单的方法是使用apktool。一旦安装了apktool,就可以将其指向apk文件,然后为应用程序中包含的每个类返回一个smali文件。您可以通过从新Java源生成SMALI来完全读取和修改SMALI或甚至替换类(这样做),您可以用Javac编译您的.java源到.class文件,然后用Android的DX编译器转换.class文件到.DEX文件,然后使用BasMali(SMALI反汇编程序)将.DEX转换成.SML文件,如描述的那样。在这个问题上。这里可能有捷径)。完成后,您可以轻松地用apktool再次打包apk备份。请注意,apktool不会对生成的apk进行签名,因此您需要像其他Android应用程序一样处理这一问题。
如果你选择Smali路线,你可能想试试apk studio,它是一个自动执行上述步骤的IDE,帮助你解压和重新编译apk并将其安装到设备上。
简而言之,您的选择几乎可以分解成Java,它更可读,但可能不可逆,或者分解为SMALI,它更难阅读,但更灵活地进行修改和重新打包修改后的应用程序。你选择哪种方法取决于你想要达到的目标。
最后,大胆的建议也是值得注意的。它是将DEX和.APK文件转换为Java.class文件的重定向工具,以便可以使用典型的Java静态分析工具进行分析。
我真的建议你到这里来:https://github.com/jesusfreke/smali
它提供了baksmali,这是一个最优秀的DEX文件逆向工程工具。它是由杰苏斯弗雷克制作的,他为Android制作了著名的ROM。
弗雷德答案的更完整版本:
手动方式首先,您需要一个工具将dex上的所有(编译的)类提取到一个jar中。有一个叫dex2jar,是中国学生做的。
然后,您可以使用JDGUI将JAR上的类解压缩为源代码。结果源应该是可读的,因为dex2jar应用了一些优化。
自动方式你可以使用apktool。它将自动提取所有类(
只需告诉apktool将apk解码到一个目录中,然后修改您想要的,最后把它编码回一个apk。这就是全部。
重要事项:apktool分解。它不能反编译。生成的代码不是Java源代码。但是如果你熟悉茉莉花,你应该能够阅读它,甚至编辑它。如果您想要Java源代码,请使用手动方式。
有时,当使用
我用过
但没有人能比得上谷歌自己的工具。
1)安卓工作室2.x:构建>分析APK。
2)Android Studio 3.0版:配置文件或调试APK氧化镁氧化镁
因为没有人提到这个,所以还有一个工具:DED主页
安装方法和一些说明:安装。
它被用于一项非常有趣的顶级市场应用程序安全性研究中(如果你好奇的话,这并不真正相关):一项关于Android应用程序安全性的调查
一旦下载了APK文件,就需要执行以下步骤来获得可编辑的Java代码/文档。
Android逆向工程是可能的. 按照以下步骤从APK文件中获取.java文件。
第1步。使用dex2jar
- 从.apk文件生成.jar文件
- 指挥部:
dex2jar sampleApp.apk 。
第2步。使用jd-gui解压.jar
- 它会对.class文件进行反编译,也就是说,我们会从APK中得到混淆。
使用dedexer,可以将
据我所知,对Java进行反编译是不可能的。你可以在这里读到达尔维克字节码。
最近Debian有python包
1 2 3 4 5 6 7 8 | 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 |
安装相应的软件包:
1 | sudo apt-get install androguard python-networkx |
号
反编译DEX文件:
1 | $ androdd -i classes.dex -o ./dir-for-output |
从apk+反编译中提取
1 | $ androdd -i app.apk -o ./dir-for-output |
。
APK文件不再是Java存档(jar),您可以通过以下方式从存档中提取文件:
1 | $ unzip app.apk -d ./dir-for-output |
自从这些答案中的大部分被公布以来,已经发生了很大的变化。现在,有很多使用GUI的简单工具,如:
1 2 3 | APK Easy Tool for Windows (GUI tool, friendly) Bytecode Viewer - APK/Java Reverse Engineering Suite URET Android Reverser Toolkit |
找到它们的最佳位置是在xda开发人员论坛上。
因为
以下是我最新的(2019年)答案:
主逻辑从
One Step :直接将dex 转换为java sourcecode 。Two Step :先把dex 转换成jar ,再把jar 转换成java sourcecode 。
一步解决方案:
- JADX
过程
氧化镁
氧化镁
然后可以显示Java源代码:
1 2 3 4 5 | ? 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 |
号步骤2:
- JD-gui:最流行,但是
many 代码会反编译错误 - CRF:很流行,
minor 代码会反编译错误 - procyon:流行,
no 代码反编译错误- 基于
Procyon 的图形用户界面工具- 卢伊滕:
- 字节码查看器
- 基于
- 其他
- 克拉卡图
- 蕨类植物
- 老的:安德罗切夫
- 等。
过程
在这里演示EDCOX1 34将JAR转换成Java源代码:
下载procyon-decompiler-0.5.34.jar
然后使用语法:
埃多克斯1〔36〕
例子:
埃多克斯1〔37〕
使用编辑器vscode打开导出的源代码,如下所示:
对Android应用程序进行反编译的最简单方法是从PlayStore下载名为ShowJava的应用程序。只需从应用程序列表中选择需要反编译的应用程序。有三种不同的解压器可以用来解压应用程序,即-
CFR 0.110, JaDX 0.6.1 or FernFlower (analytical decompiler) .
号
如果您不想下载dex2jar,那么只需使用