Ring3 hook动态库优先加载劫持函数调用(用于实现文件监控)
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <dlfcn.h>
5 #include <sys/stat.h>
6 #include <unistd.h>
7 typedef int (*realopen)(const char *pathname,int flags);
8
9 int open(const char *pathname,int flags)
10 {
11 void *handle = NULL;
12 realopen oldopen = NULL;
//获得libc.so.6的句柄
13 handle = dlopen("libc.so.6",RTLD_LAZY);
//返回open函数在libc.so.6中的加载时地址
14 oldopen = (realopen)dlsym(handle,"open");
15
16 struct stat s;
17 stat(pathname,&s);
18
19 if(s.st_size > 200)
20 {
21 printf("进程%d打开文件%s\n",getpid(),pathname);
22 return oldopen(pathname,flags);
23 }
24 else
25 {
26 printf("进程%d非法打开文件 %s\n",getpid(),pathname);
27 exit(0);
28 }
29 }
gcc -fPIC -shared -o libmyopen.so filelisten.c -ldl (没有ldl会报错)
生成动态库后设置环境变量,优先加载我们自己写的动态库实现劫持。
export LD_PRELOAD = /home/fd/work/libmyopen.so
当前会话有效
或者临时一次生效LD_PRELOAD=./libmyopen.c ./openfile
单个用户永久生效的话系统不一样文件不同.bashrc或者.bash_profile等,设置同上export LD_PRELOAD = /home/fd/work/libmyopen.so
或者在/etc/profile中永久设置(全用户永久生效)
export LD_PRELOAD = /home/fd/work/libmyopen.so
或者添加到系统配置文件中(全局生效) ldconfig
vim /etc/ld.so.preload
/home/fd/work/libmyopen.so
如果是全局设置然后重启后生效了,因为我hook的是open,所以逻辑一定不要乱写即便是实验。就是因为如此,我reboot后导致了ubuntu进不去了。即便是crtl+alt+F几来着忘了,然后root登录接着就闪退,一直这样网上搜索资料是让我命令行操作的,但是我都进不了咋命令行,没搞清楚。反正结果是我快照还原导致我的资料都没了,xshell6远程登录显示打开/dev/tty失败,/home/jin/.Xauthority打开失败登录不了。
这个时候如果有个进程想open一个文件我能够知道是哪个进程想打开哪个文件根据条件进行过滤(现在只是作用于用户进程)。如果在/etc/profile设置了全局的环境变量LD_PRELOAD即便是桌面的文件双击打开也可以进行拦截(实现阻止桌面文件被双击打开的功能)。
关于文件监控拦截,其实不管是Ring0的LKM开发(系统调用表)还是Ring3这种用户不需要考虑内核的操作思想都是类似,在open等系统调用前进行劫持,根据用户的需求进行确定,是否继续调用真正的系统调用。Ring0的内核驱动开发,由于我不懂汇编看来不是适合我,内核开发复杂难度大,还是这种直接接口上手的好点。哈哈(网上很多这种,只不过最近工作用到了记录下)。当然没写驱动来进行文件监控(因为看了别人的资料有大佬写了驱动编译到内核实现文件监控模块,他们公司是这么做的),因为此我特地看了别人的博士论文关于文件监控的,别人的观点是不管ring0内核hook还是ring3用户hook都不那么完美(静态编译,强制加载LD_PRELOAD为系统原有等方法阻止),人家有更好的方法
最后/etc/profile全局环境变量设置务必快照或者小心操作,提醒自己。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下