用途:在 iOS 上对 Objective-C、Swift 或原生行为进行运行时插桩,创建并调试 Frida hook。
主要能力:支持 Objective-C 方法 hook(如 NSURLSession 的 dataTaskWithRequest:completionHandler:)、Swift 与原生符号解析、模块枚举、Interceptor 附加、TLS pinning 相关路径排查、无根越狱环境适配,以及用 Gadget 在无法正常 attach 时注入。
使用方式:先做环境检查,运行 frida --version、frida-ps -Uai,并用 frida -U -f com.example.app -l agent.js --no-pause 启动。脚本内可确认运行时:console.log("ObjC.available =", ObjC.available); console.log(Process.platform, Process.arch);。若 iOS 应用里 ObjC.available 为 false,先走 frida-troubleshooting,不要直接判定脚本有误。Objective-C hook 可用 ObjC.classes 取类与方法,再 Interceptor.attach(method.implementation, {...})。Swift 与原生部分应先枚举模块和符号,再猜测 Swift 混淆名;能通过 ObjC 暴露的 Swift 优先走 ObjC 类,纯 Swift/原生函数则解析符号并用 frida-native-hooks。需要在 AppDelegate、网络栈或反篡改初始化前生效时使用 spawn。
适用场景:观察委托、URL 加载、钥匙串、剪贴板、文件 API、加密包装、越狱检测选择器等;排查 pinning 位于 NSURLSession、SecTrustEvaluate*、第三方框架还是原生自定义代码;Swift 为主的应用结合模块/符号枚举与调用栈追踪。
限制与注意:不要假设 Swift 一定暴露 selector;pinning 常混合 Objective-C 与原生 Security/BoringSSL/CommonCrypto 路径,需两边都查。无根越狱可能需要匹配的 Frida 包、正确的 bootstrap 路径和更新工具,版本不一致常表现为 attach 失败或 ObjC 桥缺失。建议先用 CodeShare 工具做发现,再替换为窄范围 hook;把“运行时可用”脚本与真实 agent 分开,避免把环境问题误判为 hook 缺陷。更多模式见 references/ios-patterns.md。