为迎接 Apple 发布 macOS 11,Frida 12.11 来了!此版本完全兼容 macOS 11 Beta 3,而且现在还支持 Apple 芯片上的 macOS。太棒了!
值得一提的是,我们没有止步于 arm64,还支持 arm64e。该 ABI 仍在变化,因此如果你拥有 Developer Transition Kit(DTK)并想尝试,需要禁用 SIP,再添加一个启动参数:
$ sudo nvram boot-args="-arm64e_preview_abi"考虑到各平台如此出色地趋于统一,我们实际上可能已经支持越狱的 iOS 14。等公开越狱工具出现后即可确认;至少支持它应该不需要太多工作。
正在探索 DTK 的用户可以像往常一样获取 CLI 工具和 Python 绑定:
$ pip3 install frida-tools顺便一提,我们刚发布了 CryptoShark 0.2.0,非常推荐尝试。目前唯一的限制是只提供 macOS/x86_64 二进制文件;借助 Rosetta,它能在 macOS/arm64 上运行,但无法附加到“Local System”设备上的进程。
解决方法很简单:从我们的发布页获取 frida-server 二进制文件并启动,然后让 CryptoShark 连接“Local Socket”设备。如果想在一台系统上运行 CryptoShark,并附加到另一台系统的进程,也可使用本地 SSH 端口转发:
$ ssh -L 27042:127.0.0.1:27042 dtk此版本还有许多令人兴奋的变化,请务必查看下面的变更日志。
尽情体验吧!
12.11.0 的变更
- 新增 macOS 11 和 Apple 芯片支持。
- 在 Darwin 上将辅助进程守护进程化。感谢 @mrmacete!
- 在 Linux 上将辅助进程守护进程化。
- 修复使用 usbmuxd 时不可靠的 iOS 设备处理。感谢 @mrmacete!
- 修复 i/macOS frida-helper 提前退出时的无限等待。
- 为 Android spawn() 新增“uid”选项以指定用户 ID。感谢 @sowdust!
- 支持最新版 checkra1n 越狱。感谢 @Hexploitable 协助!
- 提升 Stalker ARM 稳定性。
- 修复 Interceptor arm64 后端错误路径中的泄漏。
- 修复无 RWX 页面系统上 memcpy() 附近的拦截。
- 修复 Darwin/arm64e 上 CpuContext 指针的编码。
- 始终在 Darwin/arm64 上剥离回溯项。
- 修复大端系统上的 Linux 架构检测。
- 修复 ARM BE8 上 Capstone 的字节序配置。
12.11.1 的变更
- 处理使用不同 ptrauth 密钥的 i/macOS 目标。
- 修复大端系统上的 Linux CPU 类型检测。
- 修复 Linux/ARM-BE8 上的早期插桩。
- 修复向因 SIGTTIN 或 SIGTTOU 阻塞的 Linux 进程注入。
12.11.2 的变更
- 修复 macOS 11/x86_64 上 Stalker 的 thread_exit 探测。
- 修复 macOS 11/x86_64 上导出解析缓慢的问题。
- 修复 ARM 上 CModule 对 Capstone 头文件的支持。
- 在 ARM 的 CModule 运行时中新增 ArmWriter。
- qml:支持指定要使用的脚本运行时。
12.11.3 的变更
- 修复 V8 运行时中 ModuleMap.values() 的原型。
- qml:将 DetachReason 枚举与当前 Frida API 同步。
- qml:修复 Device 生命周期逻辑。
12.11.4 的变更
- 修复 macOS 11 beta 3 上的注入器,并停止支持更早的 beta。
- 移除 macOS 11 beta 3 已使其多余的辅助进程变通方案。
- 修复 i/macOS introspection 模块处理。
12.11.5 的变更
- 修复 macOS 11 和 iOS 14 上使用 dyld 现代代码路径的进程早期插桩。
- 使用 VMThread::execute() 安装新方法,使 JVM 方法拦截更安全;它会阻塞所有 Java 线程,从而能更安全地拦截热点方法。感谢 @0xraaz!
- ARM Relocator 新增 SUB 指令支持,提高在 32 位 ARM 上使用 Interceptor 和 Stalker 的可靠性。
- qml:添加缺失的 include,修复 GCC 构建。
12.11.6 的变更
- 将未越狱 iOS 注入器移植到新的 arm64e ABI,因此现在即使在 A12+ 设备上,也完全支持 iOS 14 beta 3 的未越狱模式。
12.11.7 的变更
- 改进 Linux 和 QNX 上的 libc 检测。感谢 @demantz!
- 修复 libdwarf 后端的符号大小检查,使 Linux 调试符号解析更可靠。
- 修复脆弱的 Android Activity 启动逻辑。感谢 @muhzii!
- 清除 kAccFastInterpreterToInterpreterInvoke 标志,提高 Android Java Hook 可靠性。感谢 @deroko!
- 防止在 $dispose() 后使用 Java 包装器,使此类危险错误更易发现。
- 改进 frida-qml 构建系统并支持独立使用。
12.11.8 的变更
- 支持 Apple 芯片上的 macOS 11 beta 4。
12.11.9 的变更
- 支持使用 Xcode 12 开发者磁盘映像的未越狱 iOS。
12.11.10 的变更
- node:修复 IOStream 的 WriteOperation 泄漏。感谢 @mrmacete!
- qml:支持列出应用。
- qml:在各模型上公开“count”属性。
- 修复“add sb, pc, r4”的 ARM 重定位。
- 修复“add ip, pc, #4, #12”的 ARM 重定位。
- 修复 Rn 位于寄存器列表中时 ARM writer 对 LDMIA 的支持。
12.11.11 的变更
- 支持 Android R 上的不透明 JNI ID,以支持可调试应用。感谢 @muhzii!
- qml:支持启动进程。
- qml:在 Linux 上使用 devkit 链接时加入缺失的库。
- qml:修复 Linux 上的静态链接。
- qml:优化启动过程,不再等待 enumerate_devices()。
12.11.12 的变更
- 在 i/macOS 早期插桩期间初始化 CoreFoundation。感谢 @mrmacete!
- Stalker 支持 NULL EventSink。感谢 @meme!
- node:提供 Electron v10 和 v11 预构建包;下个版本将停止提供 v9 预构建包。
- qml:新增 post(QJsonArray)。
12.11.13 的变更
- 修复 Android 11/arm64 上的 ART 内部结构探测。感谢 @enovella_!
- 暂时不压缩地构建 V8 的 GumJS 运行时,因为还需改进 frida-compile 以使用最新版 terser。
12.11.14 的变更
- frida-compile 已升级到最新版 terser,现在压缩构建 V8 的 GumJS 运行时。
12.11.15 的变更
12.11.16 的变更
- 修复 Arm64Relocator.can_relocate() 的 arm64e 支持。感谢 @mrmacete!
- 为 Stalker.follow() 新增“onEvent”选项,允许在原生代码中同步处理事件,通常使用 CModule 实现。可用于自定义过滤或队列逻辑以提升性能,或牺牲性能换取可靠事件传递。
- 向 EventSink 公开 Stalker 的实时 CpuContext,可通过“onEvent”回调和 Gum C API 访问。
- 在 CModule 运行时中新增 Spinlock。
12.11.17 的变更
- 在未越狱 iOS 上通过 LLDB 终止进程,尽可能避免使用 ProcessControl。此前行为会让 debugserver 处于异常状态,已终止应用有时仍显示为运行中,导致后续 spawn() 的早期插桩失败。感谢 @mrmacete!
- 允许 instrumentation 字段检测妥善失败,修复旧版 Android API 上的 Java 桥接初始化;旧 API 本就不需要它。
- 略微减少每个脚本的 Duktape 内存用量,无需驻留脚本源码字符串。
oleavr