将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代码/文档。
- 转换你的apk文件到zip(而开始下载不去与“保存”选项,只要去与“另存为”,并提及你的扩展名为.zip)通过这样做,你可以避免APKTOOL …
- 解压zip文件,在那里你可以findsomefilename.dex。 所以现在我们需要转换dex – > .class
- 要做到这一点,你需要“dex2jar”(你可以从http://code.google.com/p/dex2jar/下载,提取后,在命令提示符下,你必须提到像;[D:\ dex2jar-0.09> (请记住,你的somefilename.dex必须在你保留dex2jar的同一个文件夹中。)
- 从http://www.viralpatel.net/blogs/download/jad/jad.zip下载jad并解压缩。; 一旦提取,你可以看到两个文件,如“jad.exe”和“Readme.txt”(有时可能会有“jad.txt”而不是“jad.exe”,所以只需将其扩展名改为as.exe即可运行)
- 最后,在命令提示符下,你必须提到像[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自动完成这些东西,甚至安装所需的工具
- 转换apk文件到zip
- 解压文件
- 从中提取classes.dex
- 使用dex将jar转换成jar文件
- 用jadx gui打开jar文件作为java源代码
如果你不想下载dex2jar,那么只需使用apk_grabber
python脚本将任何apk反编译成jar文件即可。 然后你用jd-gui阅读
反编译android应用程序最简单的方法是从playstore下载一个名为ShowJava的应用程序。 只需从应用程序列表中select需要反编译的应用程序即可。 有三种不同的反编译器可以用来反编译应用程序 –
CFR 0.110,JaDX 0.6.1或FernFlower(分析反编译器)。
我用过了
- dex2jar + jd-gui
- javadecompilers.com
- enjarify
- Apktool
但是没有一个能打败谷歌自己的工具
1) Android Studio 2.x: build> analyze apk
2) Android Studio 3.0:configuration文件或debuggingAPK