如何反编译kotlin android apk?

问题描述

我在 kotlin 中有自己开发的 Android 应用程序。我丢失了所有源代码(硬盘崩溃)之后,我使用以下 adb 命令从我的物理 android 设备中提取了我的 apk -

c:\> adb shell pm path com.digi

这个命令的响应是apk的完整路径。之后我使用下面的命令来获取实际的 apk-

c:\>adb pull /data/app/com.digi-ZF6WfmctELhsLvm4oICrAQ==/base.apk Destination\folder

之后我使用android studio并使用build -> 分析APK 这给出了一些文件夹结构,但没有得到我开发的任何 kotlin 类。

有没有办法至少获得 kotlin 源代码

解决方法

嗯,是和不是。你不能完全恢复你的源代码,但你至少可以得到一些。这将是部分胡言乱语,部分几乎没问题,您将丢失局部变量名称、注释、格式等,因此您需要检查所有文件并修复它们,甚至完全重写其中的一些。但这仍然比从头开始要好。

我很久没有反编译Android应用了,所以我的知识可能已经过时了,但标准程序是:

  1. 将代码从 dex 转换为 jar。
  2. 反编译为 Java。
  3. 就您而言:将 Java 转换为 Kotlin。

广告 1. AFAIK 有两个工具可以做到这一点:dex2jarenjarify。我建议使用 enjarify,它总是给我更好的结果。

广告 2. 有几个 Java 反编译器,其中一些可以更好地处理某些代码,而另一些则可以更好地处理其他代码。我建议至少尝试 FernflowerJD-CORE/JD-GUI,也许 Krakatau

我想结果远非完美,因为应用程序是用 Kotlin 编写的,而不是用 Java 编写的。暂停功能和其他 Kotlin 特有的功能会更糟。

您还可以使用 ByteCodeViewer,它是一个 GUI 应用程序,可简化 1. 和 2 的过程。它包含上述所有工具以及更多内容。也可以动态切换反编译器,查看不同的结果。

广告.3。 IntelliJ 有一些用于将 Java 转换为 Kotlin 的实用程序。我从来没有用反编译过的代码试过这个,我想这会有问题

如果您需要恢复资源(XML 文件等),您可以尝试使用 apktool