响应式网站建站价格,wordpress手机边栏,如何在建设银行网站查企业年金,中国建设银行车主卡网站劫持普通函数当然没有什么意思了#xff01;我们要劫持的是系统函数#xff01;我们知道#xff0c;Unix操作系统中对于GCC而言#xff0c;默认情况下#xff0c;所编译的程序中对标准C函数(fopen、printf、execv家族等等函数)的链接#xff0c;都是通过动态链接方式来链…劫持普通函数当然没有什么意思了我们要劫持的是系统函数我们知道Unix操作系统中对于GCC而言默认情况下所编译的程序中对标准C函数(fopen、printf、execv家族等等函数)的链接都是通过动态链接方式来链接libc.so.6这个函数库的我们只要在加载libc.so.6之前加载我们自己的so文件就可以劫持这些函数了。二、Demo我们从一个简单的c程序(sample.c)开始下面的代码标准调用fopen函数并检查返回值#include int main(void) {printf(Calling the fopen() function...\n);FILE *fd fopen(test.txt,r);if (!fd) {printf(fopen() returned NULL\n);return 1;}printf(fopen() succeeded\n);return 0;}编译执行$ gcc -o sample sample.c$ ./sampleCalling the fopen() function...fopen() returned NULL$ touch test.txt$ ./sampleCalling the fopen() function...fopen() succeeded开始编写我们自己的so动态库#include FILE *fopen(const char *path, const char *mode) {printf(This is my fopen!\n);return NULL;}编译成.sogcc -Wall -fPIC -shared -o myfopen.so myfopen.c设置环境变量后执行sample程序我们可以看到成功劫持了fopen函数并返回了NULL$ LD_PRELOAD./myfopen.so ./sampleCalling the fopen() function...This is my fopen!fopen() returned NULL当然 使fopen始终返回null是不明智的我们应该在假的fopen函数中还原真正fopen的行为看下面代码 这回轮到 dlfcn.h 出场来对动态库进行显式调用使用dlsym函数从c标准库中调用原始的fopen函数并保存原始函数的地址以便最后返回 恢复现场#define _GNU_SOURCE#include #include FILE *fopen(const char *path, const char *mode) {printf(In our own fopen, opening %s\n, path);FILE *(*original_fopen)(const char*, const char*);original_fopen dlsym(RTLD_NEXT, fopen);return (*original_fopen)(path, mode);}Tips 如果dlsym或dlvsym函数的第一个参数的值被设置为RTLD_NEXT那么该函数返回下一个共享对象中名为NAME的符号(函数)的运行时地址。 下一个共享对象是哪个依赖于共享库被加载的顺序。dlsym查找共享库顺序如下 ①环境变量LD_LIBRARY_PATH列出的用分号间隔的所有目录。 ②文件/etc/ld.so.cache中找到的库的列表由ldconfig命令刷新。 ③目录usr/lib。 ④目录/lib。 ⑤当前目录。 编译gcc -Wall -fPIC -shared -o myfopen.so myfopen.c -ldl执行调用原始函数劫持成功$ LD_PRELOAD./myfopen.so ./sampleCalling the fopen() function...In our own fopen, opening test.txtfopen() succeeded三、需要注意的问题以及LD_PRELOAD hook的应用需要注意的问题1.so文件加载及函数劫持的顺序。在很多情况下在你进行劫持之前系统中已经有其他组件也对该函数进行了劫持那么就要特别注意so加载的顺序一定要在其他组件的so库加载前加载自己的so库否则你的hook函数将会被忽略。2.保持原本函数的完备性与业务的兼容性。被hook的函数一定要hook结束时进行返回返回前自己的执行逻辑中不能过度延时过度延时可能造成原有的业务逻辑失败。使用RTLD_NEXT 句柄维持原有的共享库调用链。应用一HIDS入侵检测系统劫持libc库优点: 性能较好, 比较稳定, 相对于LKM更加简单, 适配性也很高, 通常对抗web层面的入侵.缺点: 对于静态编译的程序束手无策, 存在一定被绕过的风险.应用二rootkit恶意软件已经有多种恶意软件应用了此技术常见的有cub3、vlany、bdvl等之后的几篇文章我将会通过分析以上几款恶意软件来揭秘.so共享库劫持技术的具体应用敬请期待