mcpField
F
frida-ios-hooks

frida-ios-hooks

github.com/rudra-ravi安全7104 次安装25 周前更新
代码仓库

关于 frida-ios-hooks

用于检查和插桩 Objective-C、Swift 或原生代码 iOS 应用的 Frida 技能,为安全从业者提供运行时检查、Hook 发现及证书固定和越狱环境排查方法。

主要功能

  1. 01Objective-C 运行时 Hook
  2. 02Swift 与原生符号发现
  3. 03模块和类枚举
  4. 04网络证书固定调查
  5. 05无根越狱环境配置提示

适用场景

  1. 01检查 iOS 应用网络请求
  2. 02定位 Swift 或原生函数
  3. 03调查证书固定路径
  4. 04诊断 Frida 附加问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rudra-ravi/frida-skills --skill frida-ios-hooks

安装后在 Claude Code 中输入/frida-ios-hooks确认已加载。

附带文件agents/openai.yamlreferences/ios-patterns.md

详细介绍

Frida iOS 钩子

在对 iOS Objective-C、Swift 或原生行为进行插桩时使用此技能。

设置检查

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 钩子模式

if (ObjC.available) {
  const cls = ObjC.classes.NSURLSession;
  const method = cls["- dataTaskWithRequest:completionHandler:"];
  Interceptor.attach(method.implementation, {
    onEnter(args) {
      const request = new ObjC.Object(args[2]);
      console.log("[NSURLSession]", request.URL().toString());
    }
  });
}

Swift 和原生规则

  • 先枚举模块和符号,再猜测 Swift 修饰名称。
  • 尽可能通过 ObjC 类对 Objective-C 可见的 Swift 代码进行钩取。
  • 对于纯 Swift/原生函数,解析符号并使用 frida-native-hooks。
  • 如果钩子必须在应用代理、网络栈或防篡改初始化之前运行,请使用 Spawn。
  • 对信任评估、加密、签名生成和请求构建,优先使用观察型钩子,再修改结果。

实践模式

  • 如果运行时可用,先从 Objective-C 运行时接口入手:代理、URL 加载、钥匙串、剪贴板、文件 API、加密封装和越狱检测选择器。
  • 对于 Swift 占比较高的应用,使用模块/符号枚举以及调用方堆栈跟踪;除非 Swift 将选择器暴露给 Objective-C,否则不要假定选择器存在。
  • 对于证书固定,同时检查 Objective-C 框架和原生 Security/BoringSSL/CommonCrypto 路径。应用通常会混用这些路径。
  • 使用 ObjC 方法观察器等 CodeShare 工具进行探查,然后在确认类/方法名称后将其替换为范围更窄的钩子。
  • 在无根越狱环境中,将最小化的“运行时可用”脚本与实际 Agent 分开,以免把设置失败误认为钩子错误。

探查代码片段

if (ObjC.available) {
  for (const name of Object.keys(ObjC.classes).filter(n => n.includes("Trust"))) {
    console.log(name);
  }
}
for (const m of Process.enumerateModules()) {
  if (m.name.includes("Target")) console.log(m.name, m.base, m.path);
}

证书固定和无根环境说明

  • 确认证书固定是在 NSURLSession、SecTrustEvaluate*、第三方框架还是原生自定义代码中实现的。
  • 无根越狱环境可能需要匹配的 Frida 软件包、正确的引导程序路径以及更新的工具。版本不匹配往往表现为附加失败或缺少 ObjC 桥接。
  • 如果正常附加受到阻止,但可以修改应用,请使用 Gadget。

参考资料

阅读 references/ios-patterns.md,了解 Objective-C、Swift 符号、SecTrust、模块和无根环境故障排查模式。

评论

支持 Markdown