Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
#include <linux/string.h>
#include <asm/uaccess.h>
extern void *sys_call_table[];
Указатель для сохранения оригинального системного вызова:
int (*orig_open)(const char *pathname, int flag, int mode);
Первым параметром функции open является имя открываемого файла. Новый системный вызов должен сравнить этот параметр с именем файла, который мы хотим защитить. Если имена совпадут, будет сымитирована ошибка открытия файла. Наш новый системный вызов имеет вид:
int own_open(const char *pathname, int flag, int mode)
{
Сюда поместим имя открываемого файла:
char *kernel_path;
Имя файла, который мы хотим защитить:
char hide[]="test.txt"
Выделим память и скопируем туда имя открываемого файла:
kernel_path=(char *)kmalloc(255,GFP_KERNEL);
copy_from_user(kernel_path, pathname, 255);
Сравниваем:
if(strstr(kernel_path,(char *)&hide) != NULL) {
Освобождаем память и возвращаем код ошибки при совпадении имен:
kfree(kernel_path);
return -ENOENT;
}
else {
Если имена не совпали, вызываем оригинальный системный вызов для выполнения стандартной процедуры открытия файла:
kfree(kernel_path);
return orig_open(pathname, flag, mode);
}
}
Далее смотрите комментарии к предыдущему примеру.
int init_module()
{
orig_open=sys_call_table[SYS_open];
sys_call_table[SYS_open]=own_open;
return 0;
}
void cleanup_module()
{
sys_call_table[SYS_open]=orig_open;
}
Сохраним код в файле sys_open_call.c и создадим Makefile для получения объектного модуля: