1 个不稳定版本
0.1.0 | 2024年6月25日 |
---|
#35 in #subprocess
6KB
shook
chook
(简称 Child Hook)是一个 Rust crate,允许您注册一个 fn<ArgT: Deserialize, RetT: Serialize>) -> RetT
并通过 LD_PRELOAD
注入到子进程中。
但是为什么呢?
这允许您在子进程的地址空间中运行代码,这使您可以做一些在其他情况下无法做的事情。如果您不控制子进程的实现,即使不能直接将任何自定义代码放入子进程,这也可以让您做到这些事情。
特别是,这被 shpool 用于更新子壳的环境变量。
底层
您的钩子例程将被打包到一个带有 .so
文件和一个 _init
例程中,该例程监听几个魔法环境变量,告诉它
- 在哪里监听 Unix 域套接字上的传入调用
- 应该允许发起调用的 PID(出于安全原因,此操作受到限制)。
然后,它将创建一个 Unix 域套接字并开始监听 RPC 调用,然后它将使用这些调用调用您注册的钩子。
当您创建子进程时,您将能够在启动进程之前注册一个 chook
,然后通过用于注册的相同句柄调用钩子。