预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

linux卸载模块:Linux系统可卸载内核模块完 全指南(中) 疯狂代码http://CrazyCoder.cn/ĵ:http:/CrazyCoder.cn/Linux/Article28414.html 第二部分渐入佳境 2.1如何截获系统调用 现在我们开始入侵LKM,在正常情况下LKMs是用来扩展内核的(特别是那些硬件驱动)。然而我们的 ‘Hacks’做一些不一样的事情。他们会截获系统调用并且更改他们,为了改变系统某些命令的响应方式。 下面的这个模块可以使得任何用户都不能创建目录。这只不过是我们随后方法的一个小小演示。 #defineMODULE #define__KERNEL__ #include #include #include #include #include #include #include #include #include #include #include #include #include externvoid*sys_call_table[]; /*sys_call_talbe被引入,所以我们可以存取他*/ int(*orig_mkdir)(constchar*path); /*原始系统调用*/ inthacked_mkdir(constchar*path) { return0; /*其他一切正常,除了新建操作,该操作什么也不做*/ } intinit_module(void) /*初始化模块*/ { orig_mkdir=sys_call_table[SYS_mkdir]; sys_call_table[SYS_mkdir]=hacked_mkdir; return0; } voidcleanup_module(void) /*卸载模块*/ { sys_call_table[SYS_mkdir]=orig_mkdir; /*恢复mkdir系统调用到原来的哪个*/ } 编译并启动这个模块(见1.1)。然后尝试新建一个目录,你会发现不能成功。由于返回值是0(代表一切正常 )我们得不到任何出错信息。在移区模块之后,我们又可以新建目录了。正如你所看到的,我们只需要改变 sys_call_table(见1.2)中相对应的入口就可以截获到系统调用了。 截获系统调用的通常步骤如下: 找到你需要的系统调用在sys_call_table[]中的入口(看一眼include/sys/syscall.h) 保存sys_call_table[x]的旧入口指针。(在这里x代表你所想要截获的系统调用的索引) 将你自己定义的新的函数指针存入sys_call_table[x] 你会意识到保存旧的系统调用指针是十分有用的,因为在你的新调用中你会需要他来模拟原始调用。当你 在写一个'Hack-LKM'时你所面对的第一个问题是: 我到底该截获哪个系统调用? 2.2一些有趣的系统调用 你并不是一个管理内核的上帝,因此你不知道每一个用户的应用程序或者命令到底使用了那些系统调用。 因此我会给你一些提示来帮助你找到获得控制的系统调用。 读源代码。在一个象这样的系统中,你可以找到任何一个用户(或者管理员)所用的程序的源代码。一旦你发 现了某个基本的函数,像dup,open,write.....转向b 下面看看include/sys/syscall.h(见1.2)。试着去直接找相对应的系统调用(查找dup->你就会发现 SYS_dup,查找write,你就会发现SYS_write;....)。如果没有找到转向c 一些象socket,send,receive,....这样的调用并不是通过一个系统调用实现的--正如我以前说过的那样。这时 就要看一看包含相关系统调用的头文件。 要记住并不是每一个c库里面的函数都是系统调用。绝大多数这样的函数和系统调用毫无关系。一个稍微有 一点经验的hacker会看看1.2里面的列表,那已经提供了足够的信息。例如你要知道用户id管理是通过uid的系 统调用实现的等等。如果你真的想确定你可以看看库函数/内核的源代码。 最困难的问题是一个系统管理员写了自己的应用程序来检查系统的完整性或者性。关于这些程序的问题在 于缺乏源代码。我们不能确定这个程序到底是如何工作的以及我们应该截获那些系统调用来隐藏我们的礼物/工 具。甚至有可能他引入了一个截获hacker们经常使用的系统调用的LKM来隐藏他自己,并检查系统的性(系统管 理员们经常使用一些黑客技术来保护他们的系统)。 那我们应该如何继续呢? 2.2.1发现有趣的系统调用(strace方法) 假定你已经知道了某个系统管理员用来检查系统的程序(这个可以通过某些其