You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Frida JS API读取Objective-C指针指针(**)并访问对象

解决Frida拦截sendSynchronousRequest:returningResponse:error:时访问二级指针的问题

你的问题核心是未正确处理**NSURLResponse这种二级指针,且错误地在onEnter阶段访问输出参数,导致崩溃。以下是修复方案:

问题原因

  1. sendSynchronousRequest:returningResponse:error:的response参数是二级指针(NSURLResponse **),args[3]是这个二级指针的地址,直接用它初始化ObjC.Object会把二级指针当成对象指针,必然崩溃。
  2. onEnter阶段方法还未执行,response指向的内存还没被赋值为有效对象指针,此时访问会触发空指针错误。

修复代码

const className = 'NSURLConnection'
const methodName = 'sendSynchronousRequest:returningResponse:error:'

Interceptor.attach(ObjC.classes[className][`+ ${methodName}`].implementation, {
  onLeave: function (retval) {
    // 从二级指针中读取实际的对象指针
    const responsePtr = args[3].readPointer();
    // 检查指针有效性,避免空指针访问
    if (!responsePtr.isNull()) {
      const response = new ObjC.Object(responsePtr);
      console.log('URL', response.URL().toString());
    }
  }
})

关键说明

  • 用readPointer()从二级指针(args[3])中读取真正的NSURLResponse对象指针,完成解引用操作。
  • 移至onLeave阶段处理:此时方法已执行完毕,response输出参数已被正确赋值为有效对象指针。
  • 增加isNull()检查:避免方法执行失败时response仍为空导致的崩溃。

内容的提问来源于stack exchange,提问作者PyKKe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:45:15