【问题标题】:Decompile .smali files on an APK [duplicate]反编译 APK 上的 .smali 文件 [重复]
【发布时间】:2011-07-31 18:26:50
【问题描述】:

我下载了APK Manager,它可以让我解压 APK 文件。

但它只是将其解包,不会将 .smali 文件反编译为 .java。

.smali可以反编译成.java吗?

【问题讨论】:

    标签: java android apk smali


    【解决方案1】:

    不,APK 管理器将.dex 文件反编译.smali 和二进制.xml 为人类可读的xml。

    顺序(基于APK Manager 4.9)是22选择包,然后9反编译。如果您按 1 而不是 9,那么您只需解压它(仅当您想交换 .png 图像时才有用)。

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

    dex2jar:https://github.com/pxb1988/dex2jar

    jd-gui:http://jd.benow.ca/

    编辑:我知道这里有一个问题的答案非常相似...decompiling DEX into Java sourcecode

    【讨论】:

    • 那么如何将编辑后的文件(.java/.class/.smali/.jar)再次打包成一个apk文件..请帮助。
    • JD-GUI 非常接近,但还不够接近。
    • @Aleadam 你是指 APK Manager 还是 APKTool?我没有在任何地方找到 APK 管理器的安装页面。但是,APKTool“将 .dex 文件反编译为 .smali 并将二进制 .xml 反编译为人类可读的 xml”——就像你说的那样。
    • JD-GUI 现在有点过时了。尝试一些命令行工具,例如 CFR 或 Krakatau,用于较新版本的 java。
    【解决方案2】:

    有一个新的跨平台 (java) 和开源工具,让您能够做到这一点,只需结帐https://bytecodeviewer.com

    =========

    编辑: 截至 2017 年 4 月,谷歌开发了一个新的开源工具,这就是我们一直在寻找的东西 => https://github.com/google/android-classyshark

    【讨论】:

    • 这个工具在启动时弹出Java exception
    • Java exception 在启动时的一个简单解决方法是在命令行中使用 jdk7 运行:java -jar BytecodeViewer x.y.z.jar 。为确保您使用的是 jdk7,请检查 java -version 的输出
    • Classyshark 不输出 Java 代码。引用描述:“它可以可靠地浏览任何 Android 可执行文件并显示重要信息,例如类接口和成员、dex 计数和依赖项。”
    • classyshark 的正确链接是这个:github.com/google/android-classyshark
    • Classyshark 根本不起作用。它向我展示了没有主体的所有功能。所有函数都显示为 function Name() { ... } 非常没用。而且 BytecodeViewer 非常慢,并且在反编译几个函数时遇到很多问题,说“无法反编译”我对 JADX 有更好的体验。它非常快,有一个很棒的彩色文本编辑器,一个很好的搜索功能,虽然它也不能反编译一些函数,但它工作得更好。
    【解决方案3】:

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

    【讨论】:

    • 请解释一下,为什么我的回答被否决了?
    • 我不知道为什么其他人不赞成,但这可能是因为该链接用于下载没有源的 windows .exe 文件。任何人执行这个文件都是非常不负责任的。
    • 谢谢,这救了我,因为我的 comp 在保存过程中崩溃了,丢失了 2 个类!!,得到了构建 apk 并保存了我重写
    • 该网站已被 firefox 和 norton/symantac for windows search.norton.com 视为恶意网站
    • 下载链接失效了。
    【解决方案4】:

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

    将 smali 反编译为 Java 是一个不精确的过程,尤其是当 smali 工件经过混淆器时。你可以在网上找到几个反编译器,但只有其中一些仍在维护。有些会给你比其他更好的反编译代码。将“更好”理解为“比其他人更容易理解”。不要指望逆向工程的 Java 代码可以直接编译。 Virtuous Ten Studio 内置了多个免费的 Java 反编译器,因此您可以轻松尝试不同的反编译器(“生成 Java 源”步骤),看看哪一个给您最好的结果,节省您自己查找这些反编译器并计算的时间出如何使用它们。其中包括 CFR,它是为数不多的免费且仍在维护的反编译器之一。

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

    【讨论】:

    • Christoph,德十工作室支持 in-smali 方法/类重构吗?
    • 您能说明您与 Virtuous 的关系吗?
    • Virtous 不能正确地将 smali 转换为 java。给出错误,指出 .java 文件在它应该自行生成的位置找不到。浪费时间
    • @Sirens:我与 Virtuous 没有任何关系。我只是碰巧使用了他们的工具,发现它非常有用。我还更新了我的答案,提供了更多关于反编译的信息。
    • @Dennis:是的,确实如此。然后,您只需按一下按钮即可创建更新的 APK。
    【解决方案5】:

    我同意。

    Dex2jar 将生成一个 WORKING jar,您可以将其添加为您的项目源代码,其中包含您从 apktool 获得的 xml。

    但是,JDGUI 生成的 .java 文件通常会出现错误。

    我猜这与代码混淆有关。

    【讨论】:

      【解决方案6】:

      要获得将 .apk 文件转换为 .java 文件的实用视图,请查看 https://www.youtube.com/watch?v=-AX4NYE-9V8 视频。你会得到更多的好处并清楚地理解。如果您使用mac OS,它清楚地展示了您所需的步骤。

      完成这项工作的基本要求。 1.http://code.google.com/p/dex2jar/
      2.http://jd.benow.ca/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多