高版本内核中使用jprobe提供得强大钩子接口,可以方便的hook任何内核函数。写lkm rootkit将越来越方便了。
C#代码
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/kprobes.h>
- #include <linux/kallsyms.h>
- #include <linux/fs.h>
- #include <linux/ip.h>
- #include <linux/tcp.h>
- #include <asm/uaccess.h>
-
- static struct jprobe jp;
-
- asmlinkage long new_sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen)
- {
- printk("socket fd: %d\n", fd);
-
- jprobe_return();
- return 0;
- }
-
- int init_module(void)
- {
- int ret;
-
- jp.entry = (kprobe_opcode_t *) new_sys_connect;
- jp.kp.addr = (kprobe_opcode_t *)0xc05a39ab;
- if (!jp.kp.addr) {
- printk("Couldn't find the address of sys_open\n");
- return -1;
- }
-
- if ((ret = register_jprobe(&jp)) <0) {
- printk("register_jprobe failed, returned %d\n", ret);
- return -1;
- }
- printk("Registered a jprobe.\n");
- return 0;
- }
-
- void cleanup_module(void)
- {
- unregister_jprobe(&jp);
- printk("jprobe unregistered\n");
- }
-
- MODULE_LICENSE("GPL");