其他分享
首页 > 其他分享> > Lkm Rootkit技术学习&总结 #1

Lkm Rootkit技术学习&总结 #1

作者:互联网

LKM -> Linux Kernel Module

作为Linux内核程序,lkm拥有极高的权限,故常用于编写驱动,当然,在Rootkit领域也十分流行。

LKM基本结构

LKM程序的结构和一般用户模式下的c语言程序不同,一个普通的C语言程序如下:

1 #include <stdio.h>
2 
3 void main() {
4     printf("Hello world in userland.");
5 }

但是当我们编写lkm时,需要一个init函数和一个exit函数,故需包含如下头文件

1 #include <linux/kernel.h>
2 #include <linux/init.h>
3 #include <linux/module.h>

一个最基本的lkm程序如下:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>

static int __init mod_init() {
    printk(KERN_INFO "rootkit: init\n");
    return 0;
}
static void __exit mod_exit() {
    printk(KERN_INFO "rootkit: exit\n");
}

module_init(mod_init);
module_exit(mod_exit);

其中mod_init会在模块初始化时被加载,退出时则会执行mod_exit,作为内核程序,打印信息时无法使用printf,要用printk代替,KERN_INFO表示打印内核消息。

通过如下Makefile对文件进行编译:

obj-m += example.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

将exmaple替换为文件名

 

通过 sudo dmesg --clear && sudo dmesg 查看内核信息。

标签:总结,Lkm,程序,init,Rootkit,exit,内核,include,mod
来源: https://www.cnblogs.com/sh3llcat/p/16546948.html