这次带来了许多好东西,其中之一便是全新的 Linux 注入器。 开发过程非常有趣,尤其是其中包含了大量与 @hsorbo 的结对编程。

我们对它相当兴奋。Frida 现在支持注入 Linux 容器,例如 Flatpak 应用。 不仅如此,它终于还能把代码注入没有动态链接器的进程。

另一项很棒的改进是,如果你在 Linux >= 3.17 上运行 Frida,可能会注意到 它不再写出任何临时文件。这是通过 memfd 和重新设计的注入器信号机制实现的。

新的 Linux 注入器采用完全异步的设计,没有任何可能导致死锁的危险阻塞操作。 它也是第一个支持为注入载荷提供控制通道的注入器。

未来我们计划在其他后端中也实现这一能力,并使其成为跨平台 Injector API 的一部分。这样做是为了让自定义载荷更容易实现。

这个版本还包含许多其他好东西,务必查看下面的变更日志。

祝你使用愉快!

变更日志

  • linux:重新设计注入器。感谢 @hsorbo 富有成效的结对编程!
  • linux:修复基于 libc 的模块枚举。
  • linux:修复 musl 上的 query_libc_name()。
  • linux:修复 musl 上的模块句柄解析器逻辑。
  • linux:修复 musl 上的 Module.ensure_initialized()。
  • darwin:如果 ThreadSuspendMonitor 由 Frida 调用,则使其直接放行, 以避免死锁场景。感谢 @mrmacete!
  • darwin:在 spawn() 期间始终为管道 stdio 使用 PTY,并启用 close-on-exec。
  • windows:如果已有 DbgHelp 实例,则使用它。感谢 @fesily!
  • windows:实现 Module.enumerate_symbols()。感谢 @fesily!
  • process:在 enumerate_modules() 中跳过被隐藏的模块。
  • cloak:添加 has_range_containing()。
  • elf-module:用 get_interpreter() 替换 has_interp()。
  • gumjs:修复运行时序列化的无符号编码。
  • objc:为方法添加 symbol 属性,使方法对象能够以人类可读的方式完整描述自身。 感谢 @mrmacete!
  • java:用符号作为唯一属性名。感谢 @yotamN!
  • java:为重载添加 toString() 方法。感谢 @oriori1703!
  • java:为类型和字段添加 toString() 方法。感谢 @yotamN!
  • java:修复重载方法的 toString()。感谢 @yotamN!
  • server:支持作为共享库加载。感谢 @Yannayli!