首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将DEX反编译成Java源代码

将DEX反编译成Java源代码
EN

Stack Overflow用户
提问于 2009-08-08 21:39:45
回答 16查看 602.6K关注 0票数 752

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

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2010-11-14 21:02:54

很简单

获取这些工具:

用于将dex文件转换为jar文件的

  1. dex2jar

在jar中查看java文件的

  1. jd-gui

源代码可读性很好,因为dex2jar做了一些优化。

操作步骤:

下面是反编译的步骤:

步骤1:

将test_apk-debug.apk中的classes.dex转换为test_apk-debug_dex2jar.jar

代码语言:javascript
运行
复制
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex

注1:在Windows机中,所有的.sh脚本都被.bat脚本替换注2:在linux/mac上不要忘记shbash。完整的命令应该是:

代码语言:javascript
运行
复制
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk 

注意3:另外,记得向dex2jar-X.X目录添加执行权限,例如sudo chmod -R +x dex2jar-2.0

dex2jar documentation

第2步:

在JD-GUI中打开jar

票数 933
EN

Stack Overflow用户

发布于 2011-11-05 07:40:46

为了澄清一下,这里有两条主要路径,具体取决于您想要完成的任务:

将Dalvik字节码(dex)反编译成可读的Java源代码。您可以使用dex2jarjd-gui轻松做到这一点,就像弗雷德提到的那样。由此产生的源代码对于阅读和理解应用程序的功能很有用,但可能不会产生100%可用的代码。换句话说,您可以阅读源代码,但不能真正修改和重新打包它。请注意,如果源代码已经使用proguard进行了混淆,那么所得到的源代码将更加难以解开。

另一种主要的替代方法是将字节码反汇编为smali,这是一种专门为此目的而设计的汇编语言。我发现最简单的方法是使用apktool。一旦你安装了apktool,你只需要将它指向一个apk文件,你就会得到应用程序中包含的每个类的一个smali文件。您可以通过从新的Java源生成smali来读取和修改smali,甚至完全替换类(为此,您可以使用javac将您的.java源代码编译为.class文件,然后使用Android的dx编译器将.class文件转换为.dex文件,然后使用baksmali (smali反汇编程序)将.dex转换为.smali文件,如this question中所述。这里可能有一条捷径)。一旦你完成了,你可以很容易的用apktool重新打包apk。请注意,apktool不会对生成的apk进行签名,因此您需要处理该just like any other Android application

如果你走的是smali路线,你可能想试试APK Studio,它可以自动执行上面的一些步骤,帮助你反编译和重新编译apk,并将其安装在设备上。

简而言之,你的选择很大程度上要么是反编译成Java,它更具可读性,但可能是不可逆的;要么是反汇编成smali,它更难阅读,但更灵活地进行更改和重新打包修改后的应用程序。您选择哪种方法将取决于您希望实现的目标。

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

票数 141
EN

Stack Overflow用户

发布于 2009-08-09 10:48:17

实际上,我推荐在这里使用:https://github.com/JesusFreke/smali

它提供了BAKSMALI,这是一个非常优秀的DEX文件逆向工程工具。它是由JesusFreke制作的,他为安卓创造了著名的ROM。

票数 61
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1249973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档