如何将Android DEX(VM字节码)文件反编译成相应的Java源代码?

有帮助吗?

解决方案

可以很容易

获取这些工具:

1) dex2jar 翻译DEX文件以JAR文件

2) JD-GUI 以查看在罐中的java文件

的源代码是相当可读作为dex2jar使得一些优化。

步骤:

这是如何反编译的程序:

步骤1:

转换classes.dex在test_apk-debug.apk到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
  

注意:在Windows计算机上的所有的.sh脚本由.bat脚本代替

dex2jar文档

步骤2:

打开在JD-GUI罐

“反编译源”

其他提示

为了澄清一点,根据您想要实现的目标,您可能会采取两条主要路径:

将 Dalvik 字节码 (dex) 反编译为可读的 Java 源代码。您可以轻松地做到这一点 dex2jar京东GUI, ,正如弗雷德提到的。生成的源代码对于阅读和理解应用程序的功能很有用,但可能不会生成 100% 可用的代码。换句话说,你可以阅读源代码,但你不能真正修改和重新打包它。请注意,如果源代码已被混淆器混淆,则生成的源代码将更难以解开。

另一个主要替代方案是将字节码反汇编为 斯马利, ,一种专门为此目的而设计的汇编语言。我发现最简单的方法是使用 apk工具. 。一旦你安装了 apktool,你只需将它指向一个 apk 文件,你就会得到应用程序中包含的每个类的 smali 文件。您可以读取和修改 smali,甚至可以通过从新的 Java 源生成 smali 来完全替换类(为此,您可以使用 javac 将 .java 源编译为 .class 文件,然后使用 Android 的 .class 文件将 .class 文件转换为 .dex 文件dx编译器,然后使用baksmali(smali反汇编器)将.dex转换为.smali文件,如下所述 这个问题. 。这里可能有捷径)。完成后,您可以轻松地再次使用 apktool 将 apk 打包回来。请注意,apktool 不会对生成的 apk 进行签名,因此您需要注意这一点 就像任何其他 Android 应用程序一样.

如果你走 smali 路线,你可能想尝试一下 APK工作室, ,一个 IDE,可以自动执行上述一些步骤,以帮助您反编译和重新编译 apk 并将其安装到设备上。

简而言之,您的选择几乎是要么反编译为 Java(可读性更强,但可能不可逆),要么反汇编为 smali(更难阅读,但可以更灵活地进行更改并重新打包修改后的应用程序)。您选择哪种方法取决于您想要实现的目标。

最后,建议 也是值得注意的。它是一个重定向工具,可将 .dex 和 .apk 文件转换为 java .class 文件,以便可以使用典型的 java 静态分析工具对其进行分析。

其实我推荐去这里: https://github.com/JesusFreke/smali

它提供BAKSMALI,其是用于DEX文件最优秀的逆向工程工具。 它是由JesusFreke,谁创造了fameous ROM的针对Android的家伙做。

更完整的版本 弗雷德回答:

手动方式

首先你需要一个工具 提炼 将 DEX 上的所有(编译的)类复制到 JAR 中。
有一个叫 dex2jar, ,这是一个中国学生制作的。

然后,您可以使用 京东GUI反编译 JAR 上的类到源代码。
生成的源代码应该具有很好的可读性,因为 dex2jar 应用了一些优化。

自动方式

您可以使用 APK工具. 。它会 自动地 提取所有类(.dex), 资源 (.asrc),然后它将转换 二进制XML人类可读的 XML, ,并且它还将 拆解 为你准备的课程。
反汇编总是比反编译更强大, 尤其
JAR 被 Pro Guard 混淆了!

只需告诉 APKTool 解码 将 APK 放入目录中,然后 调整 你想要什么,
最后 编码 它返回到 APK。就这样。

重要的: APK工具 拆解. 。事实并非如此 反编译.
生成的代码将不是 Java 源代码。
但你应该能够阅读它,如果你熟悉的话甚至可以编辑它 茉莉花.
如果您想要 Java 源代码,请查看 手动方式.

有时你会断码,使用dex2jar / apktool时,特别是在循环。为了避免这种情况,使用 jadx ,该反编译字节码的Dalvik成Java源代码,而不创建.jar / .class文件首先作为dex2jar确实( apktool使用dex2jar我认为)。这也是开源的,并在积极发展。它甚至有一个图形用户界面,对于GUI的狂热分子。试试吧!

由于没有人提到这一点,还有一个工具: DED主页

安装使用说明和一些说明:安装

这是在一个相当有趣的高端市场应用的安全性研究中使用(不是真的有关,只是如果你好奇)的 Android的应用安全的调查

我用过

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. 使
  4. Apk工具

但没有比谷歌自己的工具更好的了

1)Android Studio 2.x:构建 > 分析 apkenter image description here

2)安卓工作室3.0:配置文件或调试 APKenter image description here enter image description here

下载 APK 文件后,您需要执行以下步骤来获取可编辑的 java 代码/文档。

  1. 将您的 apk 文件转换为 zip(在开始下载时,不要使用“保存”选项,只需使用“另存为”并将您的扩展名为 .zip)通过这样做,您可以避免 APKTOOL...
  2. 解压 zip 文件,您可以在其中找到 somefilename.dex。所以现在我们需要转换 dex -> .class
  3. 为此,您需要“dex2jar”(您可以从 http://code.google.com/p/dex2jar/ ,提取后,在命令提示符下你必须提到, [D:\dex2jar-0.09>dex2jar somefilename.dex] (请记住,您的 somefilename.dex 必须位于保存 dex2jar 的同一文件夹内。)
  4. 从 下载 jad http://www.viralpatel.net/blogs/download/jad/jad.zip 并提取它。解压后,您可以看到两个文件,例如“jad.exe”和“Readme.txt”(有时可能是“jad.txt”而不是“jad.exe”,因此只需将其扩展名重命名为.exe即可运行)
  5. 最后,在命令提示符下你必须提到 [D:\jad>jad -sjava yourfilename.class] 它将把你的类文件解析成可编辑的java文档。

使用 Dedexer ,则可以拆开.dex文件到的Dalvik字节码(.ddx)。

对Java的反编译是不可能的,因为据我所知。结果 你可以阅读有关的Dalvik字节码这里

Android 逆向工程是可能的 。按照以下步骤从 apk 文件获取 .java 文件。

步骤1 。使用 dex2jar

  • 从 .apk 文件生成 .jar 文件
  • 命令 : dex2jar sampleApp.apk

第2步 。使用JD-GUI反编译.jar

  • 它反编译 .class 文件,即我们会得到 混淆的 .java 从 apk 返回。

最近的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),您可以从档案中提取文件:

$ unzip app.apk -d ./dir-for-output

发生了很多变化,因为大多数这些答案被张贴。现在,一个天一个有很多简单的工具,GUI的,像这样的:

APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit

最好的地方,发现他们是在XDA开发者论坛。

自从 Dheeraj Bhaskar的答案是相对较旧的许多年前。

这是我最新的(2019年)答案:

主要逻辑

dexjava sourcecode, ,目前有两种解决方案:

  • One Step: :直接转换 dexjava sourcecode
  • Two Step: :首先转换 dexjar, 第二次转换 jarjava sourcecode

一步解决: dex 直接到 java sourcecode

工具

过程

  1. 下载 jadx-0.9.0.zip, ,解压,在 bin 文件夹可以看到命令行 jadx 或图形用户界面版本 jadx-gui, ,双击运行GUI版本: jadx-gui

  1. 打开 dex 文件

然后可以显示java源代码:

  1. File -> save as gradle project

然后得到java源代码:


两步解决方案

步骤1: dexjar

工具

过程

下载 dex2jar 压缩包,解压得到 d2j-dex2jar.sh, , 然后:

  • apkjar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
  • dexjar: 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

第2步: jarjava sourcecode

工具

过程

这里演示 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

例子:

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

使用编辑器 VS代码 要打开导出的源代码,如下所示:

结论

转换正确性: Jadx > Procyon > CRF > JD-GUI

推荐使用:(一步解决方案) Jadx


更详细的解释请参考我的网上 中国人 电子书: Android应用程序的安全性和破解

您可以尝试JADX( https://bitbucket.org/mstrobel/procyon/wiki /爪哇%20Decompiler ),这是用于DEX反编译的完美工具。

是的,它也可以在线上(我:0))的新网站: HTTP:// WWW .javadecompilers.com / APK /

这可以通过以下五个步骤完成:

这个 gem 自动为你做这些事情,甚至安装所需的工具

  1. 将 apk 文件转换为 zip
  2. 解压缩文件
  3. 从中提取classes.dex
  4. 使用dex to jar将classes.dex转换为jar文件
  5. 使用jadx gui打开jar文件作为java源代码

反编译Android应用最简单的方法是下载命名的 ShowJava 从Play商店中的应用程序。只需选择需要从应用程序列表反编译的应用程序。有三种不同的反编译器,你可以用它来编译,即一个应用程序 -

  

CFR 0.110,JaDX 0.6.1或FernFlower(分析反编译器)。

如果你不希望下载dex2jar,那么就使用 apk_grabber python脚本以任何反编译APK成jar文件。然后你用JD-GUI阅读。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top