热门关键字:  PHP  Cisco  seo  网络广告 虚拟主机 中文域名
当前位置 :| 主页>服务器>Linux服务器>

Linux系统可卸载内核模块完全指南(中)

来源:Silversand.net 作者:IHH 时间:2005-11-09 点击:

当然拒绝任何的模块的加载也是有可能的。但是这是一个很坏的方法。因为你确实需要他们。因此我们可以考虑改变模块的加载方式,比如说要一个密码。密码可以在你控制的create-module(...)里面检查。如果密码正确,模块就会被加载,否则,模块被丢弃。

要注意的是你必须掩藏你的模块并使他不可以被卸栽。因此,让我们来看看一些记录LKM和密码保护的实现的原型。(通过保护的create_module(...)系统调用)。

3.1.1 一个使用的检测器的原形

对于这个简单的例子,没有什么可以说的。只不过是拦截了sys_create_module(...)并且记录下了加载的模块的名字。





#define MODULE

#define __KERNEL__

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

extern void* sys_call_table[];

int (*orig_create_module)(char*, unsigned long);

int hacked_create_module(char *name, unsigned long size)

{

char *kernel_name;

char hide[]="ourtool";

int ret;

kernel_name = (char*) kmalloc(256, GFP_KERNEL);

memcpy_fromfs(kernel_name, name, 255);

/*这里我们向syslog记录,但是你可以记录到任何你想要的地方*/

printk("<1> SYS_CREATE_MODULE : %s\n", kernel_name);

ret=orig_create_module(name, size);

return ret;

}

int init_module(void)

/*初始化模块*/

{

orig_create_module=sys_call_table[SYS_create_module];

sys_call_table[SYS_create_module]=hacked_create_module;

return 0;

}

void cleanup_module(void)

/*卸载模块*/

{

sys_call_table[SYS_create_module]=orig_create_module;

}



最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商连接