- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux不同版本间驱动加载方法
WebZine
Introduction ---------- by root
Flashsky访谈 ---------- by flashsky
Struts2框架安全缺陷 ---------- by kxlzx
重谈IP欺骗技术 ---------- by papaya
Fuzz客户端存储对象,寻找client ddos ---------- by woyigui
应用软件缺陷利用的一点心得(Webkit篇) ---------- by wushi
Bypassing Linux kernel module version check ---------- by wzt
ACS - Active Content Signatures ---------- by Eduardo Vela Nava
卡巴虚拟机启发式查毒的绕过方法 ---------- by dangdang Bypassing Linux kernel module version check
By wzt
1、 为什么要突破模块验证
2、 内核是怎么实现的
3、 怎样去突破
4、 总结
5、 参考
6、 附录
1、 为什么要突破模块验证
Linux内核版本很多,升级很快,2个小内核版本中内核函数的定义可能都不一样,为了确保不一致的驱动程序导致kernel oops,
开发者加入了模块验证机制。它在加载内核模块的时候对模块进行校验, 如果模块与主机的一些环境不一致,就会加载不成功。
看下面一个例子,它简单的输出当期系统中的模块列表:
#include linux/kernel.h
#include linux/module.h
#include linux/init.h
#include linux/version.h
#include linux/string.h
#include linux/list.h
MODULE_LICENSE(GPL);
MODULE_AUTHOR(wzt);
struct module *m = __this_module;
int print_module_test(void)
{
struct module *mod;
list_for_each_entry(mod, m-list, list) {
printk(%s\n, mod-name);
}
return NULL;
}
static int list_print_init(void)
{
printk(load list_print module.\n);
print_module_test();
return 0;
}
static void list_print_exit(void)
{
printk(unload list_print module.\n);
}
module_init(list_print_init);
module_exit(list_print_exit);
我们在centos5.3环境中编译一下:
[root@localhost list]# uname -a
Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux
然后拷贝到另一台主机centos5.1xen上:
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-53.el5xen #1 SMP Mon Nov 12 03:26:12 EST 2007 i686 i686 i386 GNU/Linux
用insmod加载:
[root@localhost ~]# insmod list.ko
insmod: error inserting list.ko: -1 Invalid module format
报错了,在看下dmesg的信息:
[root@localhost ~]# dmesg|tail -n 1
list: disagrees about version of symbol struct_module
先不管这是什么, 总之我们的模块在另一台2.6.18的主机中加载失败。 通常的做法是要在主机中对源代码进行编译,
然后才能加载成功, 但是如果主机中缺少内核编译环境的话, 我们的roo
文档评论(0)