我遇到了一个问题,我试图在一个 Android 应用程序中跟踪一些函数调用,该应用程序使用 JNI 来完成它的所有工作。更具体地说,在 JNI 中的一个函数调用使(IIRC Android 本身“调用”它,而不是应用程序,应用程序只是使它)一个特定的Toast. 并尝试挂钩实现它的功能,例如使用 Frida 的 Interceptor。
问题是,我还没有找到跟踪所有函数调用的方法。我使用了一些技巧,例如使用 frida-trace 和跟踪“Java_*”(其中 * 是通配符)调用。但是因为这个应用程序可能有非标准的 JNI 调用(IIRC 动态加载 JNI 库,其中函数名可以有任何名称)。
然后我使用了一个名为 jnitrace 的工具,我在 GitHub 上找到了可用的开源工具。这个工具根本没有报告任何功能。直到我在应用程序中打开了一个 WebView。然后它开始打印出大量引用 Chromium 库的数据,即使在我停止使用 WebView 之后也是如此。
我发现了 Frida 的 Stalker,但是使用一些写着“打印所有函数调用”的脚本只会使应用程序崩溃。任何应用程序,所以我认为这不是我逆向工程的特定应用程序的问题。