本版本在各方面都带来了重大改进。

系统调用跟踪器

有时,观察特定目标进程内部发生的系统调用很有用。当目标包含某种 Frida 检测、root 检测或其他形式的运行时应用自我保护(RASP)时,尤其如此。在这种情况下,发现用于检查痕迹的系统调用,意味着你可以快速确定需要应用何种插桩或补丁才能绕过这些检查。

正因如此,从 Frida 17.8.0 和 frida-tools 14.6.1 开始,现在可以这样做:

$ frida-strace -U -f com.dexprotector.detector.envchecks

frida-strace-android

或者,连接一台运行最新 iOS 的 iPhone(无需越狱):

$ frida-strace -U -f com.toyopagroup.picaboo

frida-strace-ios

你还可以任意多次重复 -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 相关部分进行愉快的结对编程!