将DEX反编译成Java源代码

如何将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

d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk 

注意:在Windows机器中,所有.sh脚本被replace为.bat脚本

dex2jar文档

第2步:

在JD-GUI中打开jar

反编译的源码

澄清一下,根据你想要完成的事情,你可以采取两种主要的途径:

将Dalvik字节码(dex)反编译为可读的Java源代码。 就像fred提到的那样,你可以用dex2jar和jd-gui轻松地做到这一点。 生成的源代码对于阅读和理解应用程序的function非常有用,但可能不会生成100%可用的代码。 换句话说,你可以阅读来源,但你不能真正修改和重新包装它。 请注意,如果使用proguard对源代码进行了混淆处理,则生成的源代码将更加难以解决。

另一个主要的select是将字节码反汇编为一个汇编语言smali ,正是为了这个目的而devise的。 我发现最简单的方法是使用apktool 。 一旦你已经安装了apktool,你可以将它指向一个apk文件,你将得到应用程序中包含的每个类的smali文件。 你可以阅读和修改smali,甚至可以通过从新的Java源生成smali来完全replace类(为此,可以使用javac将.java源文件编译为.class文件,然后将.class文件转换为.dex文件。 dx编译器,然后使用baksmali(smali反汇编程序)将.dex转换为.smali文件,就像这个问题所描述的那样。 一旦你完成了,你可以很容易地使用apktool重新打包apk。 请注意,apktool不会签署生成的apk,因此您需要像处理其他Android应用程序一样来处理 。

如果你走小路,你可能想试试APK Studio ,一个IDE,它可以自动执行上面的一些步骤来帮助你反编译和重新编译apk并安装到设备上。

简而言之,您的select几乎或者是反编译成Java,这是更可读,但可能不可逆转,或反汇编smali,这是很难阅读,但更灵活地进行更改和重新包装修改后的应用程序。 你select哪种方法取决于你想要达到的目标。

最后, 敢说的build议也是值得注意的。 这是一个将.dex和.apk文件转换为java .class文件的redirect工具,可以使用典型的Java静态分析工具对它们进行分析。

我实际上build议去这里: https : //github.com/JesusFreke/smali

它提供了BAKSMALI,这是DEX文件最好的反向工程工具。 它是由JesusFreke制作的,这个人为Android创造了名副其实的ROM。

fred 答案的更完整版本:

手动方式

首先,您需要一个工具来将DEX上的所有(编译)类提取到JAR。
有一个叫做dex2jar的 ,是由一个中国学生制作的。

然后,可以使用jd-gui将JAR上的类反编译为源代码。
由此产生的源代码应该是非常可读的,因为dex2jar应用了一些优化。

自动方式

你可以使用APKTool 。 它会自动提取所有的类( .dex ),资源( .asrc ),然后它将二进制XML转换为可读的XML ,并且还会为你分解类。
反汇编总是会比反编译更稳健, 特别是
JARs与Pro卫队混淆!

只要告诉APKTool将APK 解码成一个目录,然后修改你想要的,
最后将其编码回APK。 就这样。

重要: APKTool 拆卸 。 它不反编译
生成的代码将不是Java源代码。
但是如果你熟悉茉莉花 ,你应该可以阅读,甚至编辑它。
如果您想要Java源代码,请按照手动方式进行操作

有时你会使用dex2jar / apktool破坏代码,尤其是在循环中。 为了避免这种情况,请使用jadx ,它将dalvik字节码反编译成java源代码,而不是像dex2jar那样创build一个.jar / .class文件(我认为,apktool使用dex2jar)。 它也是开源的,正在积极发展。 它甚至有一个graphics用户界面,为GUI狂热分子。 尝试一下!

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

安装方法和一些解释: 安装 。

它被用于一个非常有趣的研究高端市场应用程序的安全性(不真正相关,只是如果你好奇): Android应用程序安全性调查

一旦你下载你的APK文件,你需要执行以下步骤来获得可编辑的Java代码/文档。

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

使用Dedexer ,您可以将.dex文件反汇编为.ddx字节码( .ddx )。

据我所知,对Java的反编译是不可能的。
你可以在这里阅读关于达尔维克字节码。

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

步骤1 。 使用dex2jar

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

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

  • 它会反编译.class文件,也就是说,我们将从apk中得到混淆的 .java。

这些答案大部分已经发布,很多已经发生了变化。 现在,使用GUI的许多简单工具就像这样:

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

最好的地方是在XDA开发者论坛上。

最近的Debian有Python软件包:

 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 + Decompile中提取classes.dex

 $ androdd -i app.apk -o ./dir-for-output 

Apk文件不过是Java归档(JAR),您可以通过以下方式从归档文件中提取文件:

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

你可以试试JADX( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ),这是DEX反编译的完美工具。

是的,它也可以在(我的:0))在新的网站: http : //www.javadecompilers.com/apk/

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

这个gem自动完成这些东西,甚至安装所需的工具

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

如果你不想下载dex2jar,那么只需使用apk_grabber python脚本将任何apk反编译成jar文件即可。 然后你用jd-gui阅读

反编译android应用程序最简单的方法是从playstore下载一个名为ShowJava的应用程序。 只需从应用程序列表中select需要反编译的应用程序即可。 有三种不同的反编译器可以用来反编译应用程序 –

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

我用过了

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. enjarify
  4. Apktool

但是没有一个能打败谷歌自己的工具

1) Android Studio 2.x: build> analyze apk 在这里输入图像描述

2) Android Studio 3.0:configuration文件或debuggingAPK 在这里输入图像描述 在这里输入图像描述