如果你曾经使用 Frida 启动会用到标准输入输出的程序,可能会因为被启动进程的标准输入输出状态 相当不明确、自己又几乎无法控制而感到沮丧。从这个版本开始,我们着手解决这个问题。现在, 程序启动时的 stdin、stdout 和 stderr 始终会被重定向;你甚至可以向 stdin 输入自己的数据,并取得写入 stdout 和 stderr 的数据。Frida 的命令行工具无需额外改动 即可获得这项能力,因为它已经在 ConsoleApplication 基类中接好。 如果你没有使用 ConsoleApplication,或使用的是另一种语言绑定,只需连接到 Device 对象的 output 信号。每当该信号发出时,你的处理程序都会依次收到三个参数:pid、fd 和 data。调用同一个类的 input() 方法即可写入 stdin。就这么简单。

现在我们已经统一了各个平台上的标准输入输出行为,以后便可以添加用于禁用标准输入输出重定向的 API。

除了这项改进和大量错误修复外,我们还大幅增强了在 Darwin 上启动普通程序的支持, 涵盖 Mac 和 iOS。现在两个平台上的 spawn() 都快如闪电,而且不会再破坏 iOS 上的代码签名状态。

对于需要对 Mac 和 iOS 应用进行高级插桩的用户,现在还有一套全新的 API, 可在运行时动态创建自己的 Objective-C 协议。我们已经支持创建新类和代理对象, 有了这套新 API,你能做的事情更多了。

最后,总结一下各项变更:

7.1.0:

  • core:添加 Device.input() API,用于向已启动进程的 stdin 写入数据
  • core:添加 Device.output 信号,用于传递已启动进程的输出
  • core:在 Windows、Darwin 和 Linux 后端中实现新的 spawn() 标准输入输出行为
  • core:由于 4.x 存在严重回归,目前降级到 Capstone 3.x
  • node:支持新的标准输入输出 API
  • node:补上错误路径中缺失的 return
  • python:支持新的标准输入输出 API

7.1.1:

  • core:修复 spawn() 中偶发的崩溃

7.1.2:

  • core:重做 Darwin 上的 spawn() 实现,现在速度更快、可靠性更高
  • core:支持在 Darwin 上枚举和查找动态符号
  • core:修复 Darwin Mach-O 解析器中的页面大小计算

7.1.3:

  • core:撤销临时 hack

7.1.4:

  • python:修复 ConsoleApplication 在 EOF 时崩溃的问题
  • frida-trace:退出前刷新排队中的事件

7.1.5:

  • frida-repl:改进 REPL 自动补全
  • objc:添加用于动态创建协议的 ObjC.registerProtocol()
  • objc:修复类名冲突的处理
  • objc:允许为代理命名

7.1.6:

  • python:修复 setup.py 的下载回退机制

7.1.7:

  • python:改进 setup.py 的下载回退机制

7.1.8:

  • python:修复 setup.py 的本地回退机制,改为在主目录中查找

7.1.9:

  • core:修复同时发出多个请求以附加到同一 pid 时的处理
  • core:(Darwin) 修复未调用 attach() 时的 spawn()
  • core:(Darwin) 修复关闭请求重叠时的崩溃
  • frida-server:始终重复使用同一个临时目录

7.1.10:

  • core:(Windows) 从 VS2013 升级到 VS2015
  • node:添加 Node.js 6.x 的预构建版本
  • python:修复 Python 2.x 上 Unicode 命令行参数的处理
  • qml:在 Mac 上使用 libc++ 取代 libstdc++

7.1.11:

  • core:远程 Frida 不兼容时提供恰当的错误消息
  • core:忽略从系统会话分离的尝试
  • core:防止 create_script() 与 detach() 重叠执行
  • core:修复 setTimeout(),使延迟参数可以省略,默认值为 0
  • core:(V8 runtime) 修复已关闭的 File 对象被垃圾回收时的崩溃
  • core:(Darwin) 修复清理时偶发的崩溃
  • core:(QNX) 修复 gum_module_find_export_by_name() 的实现
  • core:(QNX) 实现临时 TLS 存储
  • frida-repl:监视已加载的脚本,并在发生变化时自动重新加载
  • node:处理日志消息时考虑 level,使 console.warn() 和 console.error() 输出到 stderr 而不是 stdout
  • node:不再让会话阻止运行时退出

7.1.12:

  • core:修复 size = 0 时 Memory.readByteArray() 的返回值

7.1.13:

  • core:(Linux/Android) 修复具有首选基址的库的导出地址计算
  • core:修复 Android 6.0 上的 Java API not available 错误
  • java:通过考虑操作系统版本和架构改进 ART 支持
  • frida-repl:添加 –no-pause,使已启动进程在启动时不暂停

尽情享用吧!