From f1e9e18f1ad00ec9d78cd76105b3934980d2e09b Mon Sep 17 00:00:00 2001 From: 0xwille Date: Fri, 24 Jun 2011 15:18:35 +0200 Subject: Modificado syscall.c --- syscall.c | 62 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/syscall.c b/syscall.c index 6068592..8decf5c 100644 --- a/syscall.c +++ b/syscall.c @@ -6,7 +6,7 @@ #include #include -//extern void* sys_call_table[]; +extern void* sys_call_table[]; static int uid; module_param(uid, int, 0644); @@ -32,46 +32,46 @@ asmlinkage int our_sys_open(const char* filename, int flags, int mode) return original_call(filename, flags, mode); } -unsigned long** find_sys_call_table(void) -{ - unsigned long** sctable; - unsigned long ptr; - - extern int loops_per_jiffy; - - sctable = NULL; - for (ptr = (unsigned long)&loops_per_jiffy; - ptr < (unsigned long)&boot_cpu_data; ptr += sizeof(void*)) { - unsigned long *p; - p = (unsigned long*)ptr; - if (p[__NR_open] == (unsigned long) sys_open) { - sctable = (unsigned long**)p; - return sctable; - } - } - - return sctable; -} +//unsigned long** find_sys_call_table(void) +//{ +// unsigned long** sctable; +// unsigned long ptr; +// +// extern int loops_per_jiffy; +// +// sctable = NULL; +// for (ptr = (unsigned long)&loops_per_jiffy; +// ptr < (unsigned long)&boot_cpu_data; ptr += sizeof(void*)) { +// unsigned long *p; +// p = (unsigned long*)ptr; +// if (p[__NR_open] == (unsigned long) sys_open) { +// sctable = (unsigned long**)p; +// return sctable; +// } +// } +// +// return sctable; +//} int init_module(void) { -// original_call = sys_call_table[__NR_open]; -// sys_call_table[__NR_open] = our_sys_open; -// -// printk(KERN_INFO "Spying on uid: %d\n", uid); - printk(KERN_INFO "sys_call_table[__NR_open] = %p\n", find_sys_call_table()[__NR_open]); + original_call = sys_call_table[__NR_open]; + sys_call_table[__NR_open] = our_sys_open; + + printk(KERN_INFO "Spying on uid: %d\n", uid); +// printk(KERN_INFO "sys_call_table[__NR_open] = %p\n", find_sys_call_table()[__NR_open]); return 0; } void cleanup_module(void) { -// if (sys_call_table[__NR_open] != our_sys_open) { -// printk(KERN_ALERT "Somebody else also played with the open syscall\n"); -// printk(KERN_ALERT "The system may be left in an unstable state\n"); -// } + if (sys_call_table[__NR_open] != our_sys_open) { + printk(KERN_ALERT "Somebody else also played with the open syscall\n"); + printk(KERN_ALERT "The system may be left in an unstable state\n"); + } -// sys_call_table[__NR_open] = original_call; + sys_call_table[__NR_open] = original_call; } MODULE_LICENSE("GPL"); -- cgit v1.2.3