MASTG-TECH-0086: 方法追踪

拦截 Objective-C 方法是一种有用的 iOS 安全测试技术。例如,您可能对数据存储操作或网络请求感兴趣。在下面的示例中,我们将编写一个简单的追踪器,用于记录通过 iOS 标准 HTTP API 发出的 HTTP(S) 请求。我们还将向您展示如何将追踪器注入到 Safari 网络浏览器中。

在以下示例中,我们将假定您正在越狱的设备上工作。如果不是这种情况,您首先需要按照 自动将 Frida Gadget 注入到 IPA 中 中概述的步骤,以使用 Frida Gadget 重新打包 Safari 应用程序。

Frida 附带 frida-trace,一个函数追踪工具。 frida-trace 通过 -m 标志接受 Objective-C 方法。 您也可以传递通配符 - 例如,给定 -[NSURL *]frida-trace 将自动在所有 NSURL 类选择器上安装钩子。我们将使用它来大致了解当用户打开 URL 时 Safari 调用哪些库函数。

在设备上运行 Safari,并确保设备通过 USB 连接。然后按如下所示启动 frida-trace

$ frida-trace -U -m "-[NSURL *]" Safari
Instrumenting functions...
-[NSURL isMusicStoreURL]: Loaded handler at "/Users/berndt/Desktop/__handlers__/__NSURL_isMusicStoreURL_.js"
-[NSURL isAppStoreURL]: Loaded handler at "/Users/berndt/Desktop/__handlers__/__NSURL_isAppStoreURL_.js"
(...)
Started tracing 248 functions. Press Ctrl+C to stop.

接下来,在 Safari 中导航到一个新网站。您应该在 frida-trace 控制台上看到追踪的函数调用。请注意,调用 initWithURL: 方法来初始化新的 URL 请求对象。

           /* TID 0xc07 */
  20313 ms  -[NSURLRequest _initWithCFURLRequest:0x1043bca30 ]
 20313 ms  -[NSURLRequest URL]
(...)
 21324 ms  -[NSURLRequest initWithURL:0x106388b00 ]
 21324 ms     | -[NSURLRequest initWithURL:0x106388b00 cachePolicy:0x0 timeoutInterval:0x106388b80