本版本在各方面都带来了重大改进。
系统调用跟踪器
有时,观察特定目标进程内部发生的系统调用很有用。当目标包含某种 Frida 检测、root 检测或其他形式的运行时应用自我保护(RASP)时,尤其如此。在这种情况下,发现用于检查痕迹的系统调用,意味着你可以快速确定需要应用何种插桩或补丁才能绕过这些检查。
正因如此,从 Frida 17.8.0 和 frida-tools 14.6.1 开始,现在可以这样做:
$ frida-strace -U -f com.dexprotector.detector.envchecks
或者,连接一台运行最新 iOS 的 iPhone(无需越狱):
$ frida-strace -U -f com.toyopagroup.picaboo
你还可以任意多次重复 -f 以启动多个程序或应用,也可与 -p $pid 和 -u $username 开关组合使用。不过,iOS 不支持按用户指定目标。这项功能在 Android 上尤其有用,因为每个应用都有自己的用户账户:通过这种方式,可以观察属于特定应用的所有进程中的系统调用。
结束语
本版本还包含许多其他好东西。请务必查看下方的变更日志,了解完整细节。
祝使用愉快!
变更日志
- fruity:基于 CoreProfile ktrace/kdebug 实现系统调用跟踪,具备系统调用解码、文件系统相关调用的路径重建、拼接调用栈以及符号化支持。
- 支持启动不可调试的应用:当无法通过 LLDB 启动时,回退到 ProcessControlService,并通过信号暂停它们。
- dtx:添加 CoreProfileService,扩展 ProcessControlService,升级协议处理,取消缓冲限制,并改进对 nil 参数和批量数据的处理。
- linux:使 Linux 系统调用跟踪器的 eBPF 后端对验证器更友好,增大 BPF 日志缓冲区,并使 Linux 系统调用跟踪协议与最新的跨平台格式对齐。
- android:加载 ART/Dalvik VM,并在进程内运行 frida-helper.dex。这消除了大量边缘情况,包括 ROM 兼容性问题。
- android-helper:通过使用 Looper.prepareMainLooper() 修复某些传音系 ROM 上的初始化崩溃。感谢 @depreciating!
- android:修复新版 Android 上的链接器检测和导出解析。
- libc-shim:扩大 stdio 覆盖范围,为 libstdc++ 添加带版本的 fopen/fopen64 支持,并且除非明确请求,否则跳过反初始化,以避免关闭期间的未定义行为。
- elf-module:必要时回退到 .dynsym,以改进符号枚举,并收紧符号名边界检查。感谢 @danielbaier!
- gumjs:向 SQLite API 添加列元数据。感谢 @codecolorist!
- objc-api-resolver:在复制方法前实现已收集的类,避免崩溃和未定义行为。感谢 @mrmacete!
- websocket/network-stack:通过暂停 libsoup 输入来避免饥饿,并异步处理传入数据报,改善高负载下的公平性。感谢 @mrmacete 和 @hsorbo!
- atomics:修复
guint64未自然按 8 字节对齐的 ABI 上的-Watomic-alignment警告。 - gum:添加 Gum.Android vapi 绑定。
另外,也感谢 @hsorbo 一起对 Fruity 相关部分进行愉快的结对编程!
oleavr