如果你曾经使用 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,使已启动进程在启动时不暂停
尽情享用吧!
oleavr