在Linux操作系统中如何截获系统调用
|
| 2006-03-10 14:14更新 来源:天极网 | 发表评论 |
| 今 日 推 荐 |
|
美国断臂女装上仿生臂 变身女版... 科学家研究出快速诊断肺结核新法... 深夜频遭遇怪声骚扰 “鬼城闹鬼... 动物卫士命丧海底 毒鱼刺鳐遭报... |
|
微软Zune播放器揭开面纱 挑战iPo... iPod手机图片现身法国 产品原型... 口袋妖怪再次袭来!索尼推出UMPC... 安全为先 东芝发布新款M7平板电脑 |
|
||||||||||||
|
||||||||||||
使用Linux Kernel Module的一般目的就是扩展系统的功能,或者给某些特殊的设备提供驱动等等。其实利用Linux内核模块我们还可以做一些比较“黑客”的事情,例如用来拦截系统调用,然后自己处理。嘿嘿,有意思的说。
下面给出一个简单的例子,说明了其基本的工作过程。
#define MODULE
#define __KERNEL__
#include
#include
#include
#include
#include
#include
#include
#include
#include
extern void* sys_call_table[]\;
/*sys_call_table is exported, so we can access it*/
int (*orig_mkdir)(const char *path)\;
/*the original systemcall*/
int hacked_mkdir(const char *path)
{
return 0\; /*everything is ok, but he new systemcall
does nothing*/
}
int init_module(void) /*module setup*/
{
orig_mkdir=sys_call_table[SYS_mkdir]\;
sys_call_table[SYS_mkdir]=hacked_mkdir\;
return 0\;
}
void cleanup_module(void) /*module shutdown*/
{
sys_call_table[SYS_mkdir]=orig_mkdir\; /
*set mkdir syscall to the origal
one*/
}
大家看到前面的代码了,非常简单,我们就是替换了内核的系统调用数组中我们关心的指针的值,系统调用在内核中实际就是一个数组列表指针对应的函数列表。我们通过替换我们想“黑”的函数的指针,就可以达到我们特定的目的。
这个例子中我们替换了“mkdir”这个函数。这样,用户的应用程序如果调用mkdir后,当内核响应的时候,实际上是调用我们“黑”了的函数,而我们实现的函数里面是什么都没有干,所以这里会导致用户运行“mkdir”得不到结果。这个例子很简单,但是我们可以看出,如果我们想截获一个系统调用,那么我们只需要做以下的事情:
1.查找出感兴趣的系统调用在系统内核数组中的入口位置。可以参看include/sys/ syscall.h文件。
2.将内核中原来的调用函数对应的指针sys_call_table[X]保留下来。
3.将我们新的伪造的系统函数指针给sys_call_table[X]。
| 金星快车 | ||||
|
|
图片精选
|
其他报道
·美国断臂女装上仿生臂 变身女版“终结者” (09-16)
·深夜频遭遇怪声骚扰 “鬼城闹鬼”真相大白 (09-16)
·动物卫士命丧海底 毒鱼刺鳐遭报复曝尸海滩 (09-16)
·科学与真理同行丑闻相伴 震惊世界20大科学欺骗 (09-16)
·日本天文学家观测到“宇宙史黑暗时代”一角 (09-15)
·研究显示肥胖能导致视力下降甚至失明 (09-15)
·阿特兰蒂斯连丢俩螺钉 但不会对空间站造成威胁 (09-15)
·蓝牙手机可免费下载苹果广告(组图 附地址) (09-14)
·“另类”金字塔一样神秘(图) (09-14)
·研究人员发现:七个月的孩子就会“算账” (09-14)
·中国柑橘明显降低肝癌、心脏病和糖尿病风险 (09-14)
·宇宙最大“火球”真面目被揭开 温度高过太阳 (09-14)
|