此版本带来了几项改进:

  • Interceptor 现在与 iOS/ARM 上更多的函数兼容。
  • 新的 CLI 工具 frida-repl 提供一个基础 REPL,便于你从目标进程内部 试验 JavaScript API。
  • 传给 Interceptor.attach() 的 onLeave 回调现可通过调用 retval.replace() 替换返回值。
  • 传给 Interceptor.attach() 的 onEnter 和 onLeave 回调都可以访问 this.errno(UNIX)或 this.lastError(Windows),以检查或操作当前线程 最后一个系统错误。

下面演示如何组合后三项功能,为 Mac 上运行的特定进程模拟网络状况:

~ $ frida-repl TargetApp

然后粘贴:

callbacks = { \
    onEnter(args) { \
        args[0] = ptr(-1); // Avoid side-effects on socket \
    }, \
    onLeave(retval) { \
        const ECONNREFUSED = 61; \
        this.errno = ECONNREFUSED; \
        retval.replace(-1); \
    } \
}; \
Module.enumerateExports("libsystem_kernel.dylib", { \
    onMatch(exp) { \
        if (exp.name.indexOf("connect") === 0 && exp.name.indexOf("connectx") !== 0) { \
            Interceptor.attach(exp.address, callbacks); \
        } \
    }, \
    onComplete() {} \
});

尽情享用!