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