我想拦截任意可执行文件的执行。假设有一个二进制文件/usr/bin/binary
。每当有人启动该二进制文件时,我想启动我自己的可执行文件。我想从中决定是否启动原始二进制文件。最终,我想在原始二进制文件和用户之间插入我的垫片。
有人问过类似的 Windows 问题:我想在给定程序运行之前进行拦截,并先运行我自己的程序
我有系统管理员权限。但我无法将原始二进制文件移至其他地方。
更新型多巴胺正如@dirkt所问的:
- 我想要拦截的二进制文件将会有一个硬编码列表。
答案1
免责声明:我对 MacOS 世界一无所知,但我会告诉你一些在 GNU/Linux 下实现的方法……也许会有所帮助。
嗯...我会像@dirkt 那样回复(也就是binary
指向的包装器binary.real
),但是:
- 如果用户了解你的机制,那么他可以
binary.real
直接启动。 - 您必须对每个想要“监控”的程序复制此机制。
因此让我们在其他地方挖掘一下……
内核模块
在 GNU/Linux 世界中,我会编写一个内核模块来挂接 exec 系统调用并根据需要实现 ACL....但这有点过头了。看起来可以为 Mac OS 开发内核模块...但我不知道 Apple 是否允许这种黑客行为。
LD_PRELOAD 黑客攻击
使用众所周知的LD_PRELOAD
机制(看起来是DYLD_INSERT_LIBRARIES
在你的世界里),您可以重写系统上任何库中的任何 C 函数。因此,您只需:
- 编写一个实现exec*()的动态库。
- 实施您的 ACL。
- 确保每个用户会话(图形会话、终端)都启动时预加载了你的库,这要归功于
DYLD_INSERT_LIBRARIES
)
瞧!