Linux内核系统调用劫持之kallsyms
1.通过kallsyms方式 基于Linux 5.0/Linux5.3 的X86-64系统. 1. 通过kallsyms_lookup_name查找sys_call_table地址. 2. 关闭写保护 3. 修改sys_call_table Linux5.0上直接调用write_cr0接口,能够顺利的修改CR0寄存器,而内核版本更新到Linux5.3以后,发现对CR0的修改进行了保护,所以这里需要自定义write_cr0的实现,直接从Linux5.0中把相关代码静态编译进入模块中.这样也可以绕过对CR0的保护. #include<linux/module.h> #include<linux/printk.h> #include<linux/kobject.h> #include<linux/kernel.h> #include<asm/unistd_64.h> #include<linux/syscalls.h> #include<linux/delay.h> #include<linux/kallsyms.h> #include<asm/syscall.h> #include<asm/paravirt.h> #include <asm/nops.h> static unsigned long __lkm_order; static inline unsigned long lkm