与阅读 smali 代码相比,逆向的替代方法?

Alternate method to reversing than reading smali code?

我正在撤销一个 android 应用程序。我想修改并重建它。我使用 APK Studio(这几乎是 apktool 的 GUI 版本)来获取 apk 中的文件。现在读smali代码很吃力

我也尝试解压,得到classes.dex,然后得到jar文件(使用dex2jar)并打开它在 jd-gui 中,但该方法没有获得完整的源代码,是的,一些 java 代码显然丢失了。所以我不能用它来重建它。

所以我可以使用任何替代方法来重建应用程序而无需通过 smali 代码?

我确切地知道我必须更改哪些 class 和哪些代码。但是我无法在 smali 文件中找到相同的代码。

无法以 100% 正确的 java 代码反编译项目。这意味着你必须 adjust/modify 大部分反编译源代码才能重新编译回来,这对于大型项目来说几乎是不可能的(或者非常昂贵)。 最好的方法是在 smali 代码中进行更改,它可以很容易地重新编译回来,没有任何麻烦。只需投入1-2个小时来学习smali,非常简单。

通过 dex2jar 进行两步转换,然后反编译 Java class 文件会产生问题。这样做的主要原因是 DEX 是基于寄存器的架构,而 Java 是基于堆栈的架构。两个系统之间的转换是复杂且容易出错的。

因此我更喜欢 "one-step" 反编译(直接 DEX 到 Java 源代码),因为它是由 Jadx 完成的 - Dex 到 Java反编译器

Jadx通常可以反编译大部分方法。然而,对于非常复杂的方法或最初不是从 Java 源代码编译的方法,反编译可能会失败。