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