| 积木首页 | 500多种网页特效 | 函数手册 | 广播电台 | 高清晰图片素材 | 服务器合租 | 万年历 | 网友最新浏览记录 |
| 程序开发 | ![]() |
网页设计 | ![]() |
搜索引擎 | ![]() |
特效代码 | ![]() |
操作系统 | ![]() |
防范病毒 | ![]() |
黑客技术 | ![]() |
图形图象 | ![]() |
电脑硬件 | ![]() |
网络技术 | ![]() |
服 务 器 | ![]() |
数 据 库 | ![]() |
网文精粹 |
|=-------------------[ module injection in 2.6 kernel ]-------------------=|
|=------------------------------------------------------------------------=|
|=---------------[ CoolQ <qufuping@ercist.iscas.ac.cn> ]-----------------=|
|=------------------------------------------------------------------------=|
0 - 前言
1 - 2.4 回顾
2 - 2.6 的变化
2.1 2.6的.ko文件
2.2 失效的原因
3 - 对策
3.1 修改.rel.gnu.linkonce.this_module
3.2 例子
4 - 检测module injection的方法
5 - 参考
6 - 代码
--[ 0 - 前言
phrack 61期有一篇不错的文章[1],给出了一种感染内核模块的方法,不过是基于2.4
内核的,该方法在2.6上无效,但是思想还是通用的。通过对2.6内核加载的分析,了解
两者之间的差异,并最终实现2.6下的module injection。
--[ 1 - 2.4 回顾
内核对模块的管理,是通过struct module来实现的,该结构的成员init/cleanup,代表
加载/卸载模块后需要运行的初始化/收尾函数,它的赋值是通过以下代码实现的:
module->init = obj_symbol_final_value(f,
obj_find_symbol(f, "init_module"));
module->cleanup = obj_symbol_final_value(f,
obj_find_symbol(f, "cleanup_module"));
可见,insmod需要在.strtab中查找init_module/cleanup_module字符串,并根据索引值
找到相应的.symtab中的符号,将相应的值赋值给module->init/cleanup。
因此,如果能把.strtab中别的字符串替换为init_module,那么系统加载的时候,运行的
就不是原来的init_module函数了。
--[ 2 - 2.6 的变化
2.6中的模块子系统被完全重写,如果用[1]中的工具,发现无论怎么修改.strtab,运行
的始终是原来的init_module。
--[ 2.1 2.6的.ko文件
2.6下的模块,扩展名为.ko,而不是2.4下的.o。很多初学者写完模块之后,会使用2.4的
方法来编译模块
-----------------------------8 test.c 8--------------------------------------
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
static int dummy_init(void)
{
printk("hello,world.\n");
return 0;
}
static void dummy_exit(void)
{