The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"OpenNews: Перехват системных вызовов в OS Linux"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [Проследить за развитием треда]

"OpenNews: Перехват системных вызовов в OS Linux"
Сообщение от opennews on 25-Дек-03, 03:52 
Переработанный вариант статьи Владимира Мешкова, опубликованной ранее в журанале "Системный администратор (http://www.samag.ru)".

URL: http://zaya.spb.ru/intercept_lnx.txt
Новость: http://www.opennet.me/opennews/art.shtml?num=3218

Cообщить модератору | Наверх | ^

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Перехват системных вызовов в OS Linux"
Сообщение от jp email on 25-Дек-03, 03:52 
Что-то после этого Тоссати и этой заи, мне как-то непосебе..
Cообщить модератору | Наверх | ^

2. "Перехват системных вызовов в OS Linux"
Сообщение от Soldier email on 25-Дек-03, 09:52 
Из моего, правда небогатого, опыта по созданию модулей ядра:
gcc -c -DMODULE -I/usr/src/linux/include/ src-4.2.2.c
Может и не откомпилиться (например для ядра выше 2.4.18)

Надо
gcc -c -DMODULE -D__KERNEL__ -I/usr/src/linux/include/ src-4.2.2.c

Cообщить модератору | Наверх | ^

3. "Перехват системных вызовов в OS Linux"
Сообщение от Аноним email on 25-Дек-03, 10:59 
2Soldier:
Да Да, ты прав. Нужно подправить. Спасибо, а то это совсем из головы вылетело!
Cообщить модератору | Наверх | ^

4. "Перехват системных вызовов в OS Linux"
Сообщение от Аноним email on 25-Дек-03, 11:52 
и зачем огород городить?
если можно собрать библиотечку с перехватом нужных вызовов и подгрузить ее ДО запуска программы через LD_PRELOAD
так сделано например в installwatch
Cообщить модератору | Наверх | ^

5. "Перехват системных вызовов в OS Linux"
Сообщение от Soldier email on 25-Дек-03, 12:02 
2 Аноним 4
> и зачем огород городить?
>если можно собрать библиотечку с перехватом нужных вызовов и подгрузить ее ДО >запуска программы через LD_PRELOAD
>так сделано например в installwatch

А в чем принципиальная разница?  И почему вы считаете ваш "огород" менее "огородистым"?

Просто любопытно...

Cообщить модератору | Наверх | ^

7. "Перехват системных вызовов в OS Linux"
Сообщение от Аноним on 25-Дек-03, 18:11 
>>если можно собрать библиотечку с перехватом нужных вызовов и подгрузить ее ДО запуска программы через LD_PRELOAD

>А в чем принципиальная разница?  И почему вы считаете ваш "огород" менее "огородистым"?

>Просто любопытно...
так чтобы очень разницы нет. хотя
не нужно пользовать код на уровне ядра - криво ниписал и машина легла. в случае библиотеки это скорее всего не грозит
не нужны права админа для работы

>остаеться возможность написания программы с использованием прямых системных вызовов, тогда тебе не получиться перехватить его

остается. Но в итоге получается код, строго заточенный под конкретную версию системы. В обычном случае этого не делается. Хотя случаи бывают всякие ;)

Cообщить модератору | Наверх | ^

6. "Перехват системных вызовов в OS Linux"
Сообщение от Аноним email on 25-Дек-03, 13:26 
Ты не путай перехват системных вызовов с библиотечными вызовами. Хотя даже вызов open() не являеться прямым системным вызовом, а всего лишь обертка из libc для настоящего системного вызова, все равно остаеться возможность написания программы с использованием прямых системных вызовов, тогда тебе не получиться перехватить его.

К примеру, у нас перехват вызовов по принципу LD_PRELOAD и мы что-то ужасное прячем от любопытных глаз. Но тут админ качает злую прогу, которая не юзает libc (не обязательно вообще не юзать, можно например весь движок написать на библиотечных функчиях, а вот функции поиска файла написать самому, без libc) и находит наш секрет.

Вот так вот.
И вообще, так все ногти об клавиатуру сломать можно, надоело.

Cообщить модератору | Наверх | ^

8. "Перехват системных вызовов в OS Linux"
Сообщение от JonnyPronks email on 28-Дек-03, 03:31 
Как же в 2.6 это компилируется?
Cообщить модератору | Наверх | ^

9. "Перехват системных вызовов в OS Linux"
Сообщение от Bob email on 28-Дек-03, 15:59 
Судя по сообщениям на форуме www.thc.org, в ядре 2.6.0 таблица системных вызовов экспорту не подлежит, cледовательно, приведенные примеры перехвата системных вызовов при помощи модулей в ядре 2.6.0 работать не будут.
Cообщить модератору | Наверх | ^

10. "Перехват системных вызовов в OS Linux"
Сообщение от JonnyPronks email on 28-Дек-03, 16:29 
в 2.6 изменилась инизиализация модуля и выглядит примерно так:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int hello_init(void)
{
    printk("Hello, world\n");
    return 0;
}
static void hello_exit(void)
{
    printk( "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");

но у меня что-то не компилируется даже такой простой модуль, если указывать нестандартную библиотечную директорию (-I параметр). Появляются ошибки типа:
In file included from /usr/src/linux/include/linux/jiffies.h:6,
                 from /usr/src/linux/include/linux/sched.h:12
если же не указывать директорию с headerami то компиляция проходит удачно, но при запуске млдуля появляется очередная ошибка:
insmod: error inserting 'hello.o': -1 Invalid module format

Cообщить модератору | Наверх | ^

11. "Перехват системных вызовов в OS Linux"
Сообщение от Bob email on 29-Дек-03, 14:30 
А если сменить расширение на .ko (hello.ko)?
Cообщить модератору | Наверх | ^

13. "Перехват системных вызовов в OS Linux"
Сообщение от JonnyPronks email on 29-Дек-03, 17:10 
нет разницы!
Cообщить модератору | Наверх | ^

14. "Перехват системных вызовов в OS Linux"
Сообщение от Soldier email on 30-Дек-03, 21:14 
>в 2.6 изменилась инизиализация модуля и выглядит примерно так:
>#include <linux/init.h>
>#include <linux/module.h>
>#include <linux/kernel.h>
>static int hello_init(void)
>{
>    printk("Hello, world\n");
>    return 0;
>}
>static void hello_exit(void)
>{
>    printk( "Goodbye, cruel world\n");
>}
>module_init(hello_init);
>module_exit(hello_exit);
>MODULE_LICENSE("Dual BSD/GPL");
>
>но у меня что-то не компилируется даже такой простой модуль, если указывать
>нестандартную библиотечную директорию (-I параметр). Появляются ошибки типа:
>In file included from /usr/src/linux/include/linux/jiffies.h:6,
>            
>     from /usr/src/linux/include/linux/sched.h:12
>если же не указывать директорию с headerami то компиляция проходит удачно, но
>при запуске млдуля появляется очередная ошибка:
>insmod: error inserting 'hello.o': -1 Invalid module format


А я его кажись победил...

//=========== hello.c =====================
#include <linux/module.h>

int init_module(void)   {
    printk("Hello World\n");
    return 0;
}

void cleanup_module(void) {
    printk("Bye\n");
}
//=========================

Компилировал так:

gcc -c -DMODULE -D__KERNEL__  -I/usr/src/linux/include -I/usr/src/linux/include/asm/mach-default -DKBUILD_MODNAME=hello -c hello.c


Модуль откомпилился и вставился. Правда пришлось посадить module-init-tools-3.0-pre3 вдобавок к modutils 2.4.15 Но это уже отдельная история :)))

Cообщить модератору | Наверх | ^

15. "Перехват системных вызовов в OS Linux"
Сообщение от JonnyPronks email on 05-Янв-04, 17:21 
У меня так не получилось, вот обновля ка я module-init-tools тоже посмотрим что скажет..
Cообщить модератору | Наверх | ^

Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру