动态分析 (Frida) 揭示源代码中不存在的类的实例 (dex2jar)

逆向工程 静态分析 爪哇 动态分析 弗里达
2021-07-11 14:43:22

我一直在研究 apk 的源代码,使用 Jadx(与 dex2jar 相同)进行静态分析和使用 Frida 进行动态分析。

我正在尝试复制签署 HTTP 请求“signRequest”的方法。问题是它只在接口中声明,而在代码中没有任何地方有该方法的实际实现。当我使用 Frida 获取使用此方法的实例时,我可以运行该方法并使其工作。有问题的实例是这样的:com.xxx.yyy.zzz@24d6bf8 但问题是类com.xxx.yyy.zzz,甚至模块com.xxx.yyy,在源代码中都不存在。

你知道这是怎么发生的吗?

编辑:我有一种预感,并认为也许,因为我在源代码中遇到了“antidex2jar”类,也许有针对 dex2jar 的保护使其抛出错误,因此阻止它反编译类,正如我在某处读到的那样. 但是,即使是 Android-Studio 上的 smali 代码也不包含该类。

1个回答

这可能有多种可能性。

  1. 代码在运行时动态加载,例如对于 APK 文件中存在但不遵循标准命名方案的 [混淆/加密] dex 文件/classes*.dex如果整个应用程序代码位于此类外部代码文件中,则很可能已在应用程序上应用了“APK 打包程序”工具(如 DxShield、DexProtector 等)。您可以尝试使用APKiD来识别使用的打包程序

  2. 代码从网络服务器下载并动态加载。

  3. 代码是在运行时即时生成的。如果例如基于接口使用其他代码作为基础自动生成一些代理类(例如用于处理自动转换为方法调用的 HTTP-[JSON]-RPC 调用),就会发生这种情况。但通常此代码不在新包中。

由于您的问题包括 Frida 标签,您应该尝试使用它(如果它适用于该应用程序)并在运行时检查应用程序加载了哪些类。您可以挂钩各种类加载器方法,这些方法允许在运行时加载 (dex) 字节代码并转储/保存加载的字节代码。

或者,网上有一些工具和教程声称能够击败 Android 打包程序并转储所有 Dex 类。