# ld-preload **Repository Path**: yangxuan_321/ld-preload ## Basic Information - **Project Name**: ld-preload - **Description**: 写一些有趣的linux静态库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-27 - **Last Updated**: 2025-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Open函数Hook动态链接库 这是一个用于审计文件打开操作的动态链接库,通过LD_PRELOAD机制替换Linux原生的open函数。 ## 功能特性 - 拦截所有open()函数调用 - 记录文件打开操作的详细信息 - 支持所有open()函数的参数组合 - 自动处理O_CREAT模式下的mode参数 ## 编译 ```bash make ``` 这将生成 `libopen_hook.so` 动态链接库。 ## 使用方法 ### 方法1:临时使用(推荐用于测试) ```bash # 编译测试程序 make test_program # 使用hook运行程序 LD_PRELOAD=./libopen_hook.so ./test_program ``` ### 方法2:全局使用(需要root权限) ```bash # 安装到系统目录 sudo cp libopen_hook.so /usr/lib/ sudo cp libopen_hook.so /usr/lib64/ # 设置环境变量(对所有新进程生效) export LD_PRELOAD=/usr/lib/libopen_hook.so ``` ### 方法3:针对特定用户 在用户的 `~/.bashrc` 或 `~/.profile` 中添加: ```bash export LD_PRELOAD=/path/to/libopen_hook.so ``` ## 测试 运行完整的测试套件: ```bash make test ``` 这将: 1. 编译动态链接库 2. 编译测试程序 3. 运行测试(不使用hook) 4. 运行测试(使用hook) ## 输出示例 当使用hook时,你会看到类似这样的输出: ``` [审计] 打开文件:/etc/passwd, 结果:3 [审计] 打开文件:/tmp/nonexistent_file_test, 结果:-1 [审计] 打开文件:/tmp/test_hook_file, 结果:4 ``` ## 注意事项 1. **权限要求**:某些系统目录可能需要root权限才能安装 2. **性能影响**:每次open调用都会产生额外的日志输出 3. **兼容性**:确保在目标系统上测试兼容性 4. **安全考虑**:在生产环境中使用前请充分测试 ## 清理 ```bash make clean ``` ## 故障排除 如果遇到问题: 1. 检查动态链接库是否正确编译 2. 确认LD_PRELOAD路径正确 3. 查看stderr输出中的错误信息 4. 确保目标程序有足够的权限 ## 扩展功能 你可以修改 `open_hook.c` 来添加更多功能: - 文件访问时间戳 - 进程信息记录 - 文件内容哈希 - 访问控制规则 - 网络日志发送