90

用户是否能够将我的应用程序的 apk 文件转换回实际代码?如果他们这样做了 - 有什么办法可以防止这种情况发生吗?

4

7 回答 7

83

首先,apk 文件只是一个修改后的 jar 文件。所以真正的问题是他们能不能反编译里面的dex文件。答案有点像。已经有反汇编程序,例如dedexersmali。您可以期望这些只会变得更好,理论上它最终应该可以反编译为实际的 Java 源代码(至少有时)。请参阅上一个问题将DEX 反编译为 Java 源代码

你应该记住的是,混淆永远不会奏效。选择一个好的许可证,并尽力通过法律强制执行。不要在不可靠的技术措施上浪费时间。

于 2010-06-26T03:55:21.500 回答
37

APK文件的反编译是可能的。但是如果代码被混淆,可能很难理解。

使用Aapt(Android SDK 的一部分)或AXMLParser(来自 AndroGuard)来分析和查看 APK 文件的信息

  • 检索 AndroidManifest.xml 文件的内容

  • 显示各种信息(例如权限、活动、服务、广播接收器……)

  • 命令:

    适应症

     aapt dump badging sampleApp.apk
     aapt dump permissions sampleApp.apk
     aapt dump xmltree sampleApp.apk
    

    AXML解析器

     apkinfo sampleApp.apk
    

使用ApkToolNinjaDroid反汇编查看APK文件资源

  • 将字节码反汇编为 smali/assembly

  • 提取 AndroidManifest.xml、CERT.RSA 文件和 res 文件夹中的所有内容(布局 xml 文件、图像、webview 上使用的 html 等)

  • 命令:

    APK工具

    apktool.bat d sampleApp.apk
    
    java -jar apktool.jar -q decode -f sampleApp.apk -o myOutputDir
    

    忍者机器人

    ninjadroid MyApk.apk --all --extract myOutputDir/
    
  • 注意:您可以使用 7-zip 之类的 zip 实用程序来实现类似的效果。但是,这些工具也会提取所有 .class 文件的 .smali 文件。

使用dex2jar将APK文件的DEX文件反编译成Java代码

  • 从 .apk 文件生成 .jar 文件(请注意,Android 应用程序的 Java 代码通常会被混淆)

  • 需要 JD-GUI 从输出的 .jar 文件中查看源代码

  • 命令:

    dex2jar sampleApp.apk
    
    d2j-dex2jar.sh -f sampleApp.apk -o myOutputDir/sampleApp.jar
    

使用JD-GUI查看.jar​​文件

  • 反编译 .class 文件(在 Android 应用程序中被混淆,但在其他 .jar 文件中不被混淆)并显示相应的 Java 代码
于 2012-02-09T16:26:24.570 回答
3

我还可以补充一点,现在可以在线反编译Android应用程序,无需软件!

这里有 2 个选项供您选择:

于 2015-12-12T11:27:07.887 回答
1

用户是否能够将我的应用程序的 apk 文件转换回实际代码?

是的。

人们可以使用各种工具:

  • 分析:你的apk
  • 解码/破解你的apk
    • 用于FDex2转储dex文件
      • 然后使用dex2jar转换为jar
        • 然后使用jadx转换为java源代码

如果他们这样做了 - 有什么办法可以防止这种情况发生吗?

是的。几种(可以组合)方法来防止(一定程度)这种情况:

更多细节可以参考我的中文教程:安卓应用的安全和破解

于 2019-04-29T08:35:42.577 回答
1

下载这个 jadx 工具https://sourceforge.net/projects/jadx/files/

解压缩它,然后在 lib 文件夹中运行 jadx-gui-0.6.1.jar 文件,现在浏览您的 apk 文件。完成。apk 将自动反编译并按保存按钮保存。希望它对你有用。谢谢

于 2017-05-02T17:24:03.577 回答
0

dex2jar有时你会在使用/时遇到错误的代码,apktool尤其是在循环中。为避免这种情况,请使用jadx,它将 dalvik 字节码反编译为 java 源代码,而无需像之前那样先创建.jar/.class文件dex2jar(我认为 apktool 使用 dex2jar)。它也是开源的并且正在积极开发中。它甚至有一个 GUI,供 GUI 狂热者使用。试试看!

于 2015-03-04T21:08:03.067 回答
0

是的,有大量软件可用于反编译 .apk 文件。

最近,我在我的网站上编制了 47 个最佳 APK 反编译器的最终列表。我把它们分成4个不同的部分。

  1. 开源 APK 反编译器
  2. 在线 APK 反编译器
  3. 适用于 Windows、Mac 或 Linux 的 APK 反编译器
  4. APK 反编译器应用

我希望这个合集对你有所帮助。

链接:https ://www.epedia.com/blog/best-apk-decompilers/

于 2020-06-11T11:51:19.337 回答