信息发布→ 登录 注册 退出

Frida 中如何在单个脚本中创建多个拦截器(Interceptor)

发布时间:2025-12-31

点击量:

frida 支持在同一个 javascript 脚本中通过多次调用 `interceptor.attach()` 同时拦截多个内存地址,无需拆分为多个脚本或会话,适用于关联逻辑分析场景。

在 Frida 中,session.create_script() 接收的是标准 JavaScript 字符串(即完整的 JS 源码),并非仅限单个拦截器。你完全可以像编写普通 JS 文件一样,在同一段字符串中连续声明多个 Interceptor.attach(),每个拦截器独立工作、互不干扰。例如,要同时拦截 0x7FFCF5D50000 和 0x7FFCF7C99B00 两个地址,可直接构造如下内联脚本:

script = session.create_script("""
Interceptor.attach(ptr('0x7FFCF5D50000'), {
    onEnter: function(args) {
        console.log('[+] Hit address 0x7FFCF5D50000');
        // 可在此访问 args[0], args[1] 等参数
    }
});

Interceptor.attach(ptr('0x7FFCF7C99B00'), {
    onEnter: function(args) {
        console.log('[+] Hit address 0x7FFCF7C99B00');
        // 可复用变量、函数,或与前一拦截器共享上下文(如全局变量)
    }
});
""")
script.load()

⚠️ 注意事项:

  • 引号嵌套需一致:Python 字符串中若使用三重双引号("""),JS 内部应优先使用单引号包裹地址(如 '0x7FFCF5D50000'),避免引号冲突导致语法错误;
  • 格式化与调试:内联脚本难以调试。强烈建议将 Frida 脚本分离为独立 .js 文件(如 hook.js),再通过文件读取方式加载:
with open('hook.js', 'r', encoding='utf-8') as f:
    source = f.read()
script = session.create_script(source, name='hook.js')
script.load()

这样不仅支持编辑器语法高亮、自动补全和行号定位,还能显著提升大型多拦截器脚本(如含 10+ attach、辅助函数、状态管理等)的可维护性。

✅ 总结:Frida 原生支持单脚本多拦截器,核心在于正确组织 JS 代码结构;工程实践中推荐外置脚本文件,兼顾功能完整性与开发效率。

标签:# javascript  # python  # java  # js  # session  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!