2011-04-07 116 views

回答

89

没有,APK管理器反编译.dex文件到.smali和二进制.xml人类可读的XML。

序列(基于APK管理器4.9)是选择包,然后反编译它。如果您按1而不是9,那么您只需将其解压缩(仅在需要交换.png图像时才有用)。

有没有工具可用于反编译回.java文件,并且很可能它不会有任何工具。有一种替代方法,它使用dex2jar将dex文件转换为.class文件,然后使用jar反编译器(例如免费的jd-gui)将纯文本java。虽然这个过程并不是最优的,但它不会生成工作代码,但它足够体面以便能够读取它。

dex2jar:http://code.google.com/p/dex2jar/

JD-GUI:http://jd.benow.ca/

编辑:我所知道的是这里的某个地方有在SO一个非常相似的答案的问题... decompiling DEX into Java sourcecode

+13

**对不起,您的意思是jd-gui _won't_ generate _working code _?**反编译器应该生成工作代码;如果不是,那么我们并不是说反编译器。你不这么认为吗? – 2012-01-09 17:52:33

+0

所以如何将编辑后的文件(.java/.class/.smali/.jar)再次打包成apk文件..请帮助。 – 2012-04-13 12:51:18

+6

JD-GUI变得非常接近,但不够接近。 – 2012-06-05 19:21:36

1

我第二次说。

Dex2jar将生成一个WORKING jar,您可以将其作为项目源添加到您从apktool获得的xmls中。

但是,JDGUI会生成.java文件,这些文件通常具有错误。

我猜测它与代码混淆有关。

24

dex2jar有助于反编译你的apk,但不是100%。 .smali文件会有一些问题。 Dex2jar无法将其转换为java。我知道一个应用程序,可以反编译你的apk源文件,并没有与.smali文件的问题。这里是链接http://www.hensence.com/en/smali2java/

+1

请解释,为什么我的回答是downvoted? – Daryn 2014-01-31 05:15:11

+0

我希望我会对此投反对票投反对票。链接的应用程序就像一个魅力。这必须是比dex2jar最简单的选项。 – chedine 2014-03-14 18:42:09

+0

我无法保存反编译的文件 – 2014-03-18 12:17:30

4

我的推荐是Virtuous Ten Studio。该工具是免费的,但他们建议捐款。它将所有必要的步骤(解压APK,反编译,反编译等)合并为一个易于使用的基于UI的导入过程。在五分钟之内,您应该拥有Java源代码,比找出上述工具之一的命令行选项要少。

将smali编译为Java是一个不精确的过程,特别是如果smali构件经历了一个混淆器。你可以在网上找到几个反编译器,但其中只有一些仍然保留。有些会比别人给你更好的反编码。阅读“更好”,如“比较容易理解”。不要期望反向工程的Java代码可以直接编译出来。Virtuous Ten Studio附带了多个免费的Java内置反编译器,因此您可以轻松尝试不同的反编译器(“生成Java源代码”步骤),查看哪一个可以为您提供最佳结果,从而节省您自己查找这些反编译器的时间,了解如何使用它们。其中有CFR,它是少数几个免费且仍然保留的反编译器之一。

作为输出,您会收到包含所有已反编译的Java源代码的文件夹结构。然后,您可以将其导入到IntelliJ IDEA或Eclipse中以进行进一步编辑,分析(例如,定义,查找用法)等。

+0

Christoph,Virtuous Ten Studio支持in-smali方法/类重构? – 2015-05-25 14:00:38

+7

你能说出你与善良的关系吗? – Sirens 2015-08-16 16:50:17

+1

Virtous不能正确地将smali转换为java。给出错误,指出.java文件没有找到它自己应该生成的地方。浪费时间 – 2015-08-18 13:50:05

22

有一个新的交叉。平台(JAVA)和开源工具,使您能够做到这一点,只是结账https://bytecodeviewer.com

enter image description here

==== =====

编辑: 截至2017年4月,有一个由谷歌开发的新开源工具,意思是做我们一直在寻找的东西=>http://classyshark.com

+1

此工具在启动时弹出'Java异常' – fnc12 2016-09-18 10:27:43

+0

启动时Java异常的简单解决方法是在命令行中使用jdk7运行:java -jar BytecodeViewer xyz罐'。为确保您正在使用jdk7,请检查'java -version'的输出。 – denolk 2016-10-20 13:18:53

+0

Classyshark不输出Java代码。引用描述:“它可以可靠地浏览任何Android可执行文件并显示重要信息,例如类接口和成员,数量和依赖关系。” – 2018-01-31 06:22:59