![]() |
|
Модераторы: xvr |
![]()
|
|
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Здравствуйте. Какое-то приложение (test.exe к примеру), запускается из моего приложения. Это test.exe находится в специально отведённой для него директории. Предполагается, что оно что-то читает из файла a.txt и записывает что-то в b.txt, находящиеся в одной директории с test.exe. Запускаемое приложение должно выполнять только эти действия. Как мне для него выполнить следующие требования:
1) читать только из a.txt 2) записывать только в b.txt (неважно, существовал ли он до этого или нет) 3) запретить создавать, менять, удалять какие-либо другие файлы, кроме 2-х вышеперечисленных 3) исключить все лишние телодвижения test.exe типа system("cd .."), system("rm *"). Подскажите, как это можно реализовать для запускаемого придожения. Можно ли это сделать средствами C++ или придётся прибегнуть к шеллу? |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
Придется ИМХО отслеживать события в файловой системе и если что убивать порожденный процесс
http://www-128.ibm.com/developerworks/linu.../l-inotify.html |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
CPlusPlusFAN, Если у тебя есть сорцы этого test.exe то можешь их пригрутить к своему С++ коду. И никаких шеллов!
Странно. Рубрика про Линукс, а у тебя exe-шки -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Если приложение не очень большое, то лично я бы продизасмил его, нашёл все места, где происходит обращение к файлам и посмотрел бы уже на месте. Думаю, это бы заняло меньше времени и сил, нежели написание монитора(хотя насчёт линя могу ошибаться).
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
W4FhLF,
монитор пишется легко ptrace() + PTRACE_SYSCALL после остановки дочернего процесса смотрим EAX через __NR_<имя системного сервиса> проверяем значение EAX для
__NR_open, __NR_write, __NR_unlink для
__NR_clone, __NR_fork, __NR_execve в случае совпадения меняем параметры, переданные в системный вызов на невалидные -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| kamre |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 1 Всего: 13 |
По описанию чем-то похоже на AppArmor:
|
||||
|
|||||
| CPlusPlusFAN |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Вряд ли такую штуку дадут на сервак поставить...
Сорцы есть. Но хотелось бы к ним не обращаться. Я хотел решить эту проблему исключением файлов stdlib.h и cstdlib, но их тянут за собой какие-то stl хедеры. MAKCim, можно пример. А то как-то не очень понятно. ЗЫ Ребяты! Спасибо всем за отклики! |
||||
|
|||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
да вот эта штука не позволит создать файл с именем MAKCim
к примеру
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
CPlusPlusFAN, Действительно странно. Есть сорцы твоей программы, но ты их тягать не хочешь! Но ты согласен дописывать демон-контроль?!!! Разве это проще?
Это сообщение отредактировал(а) andrew_121 - 24.8.2008, 11:11 -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| CPlusPlusFAN |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
MAKCim, попробовал. Решил маленькую прогу для тестов накрапать. Вот она:
Вот сорс проги x:
Оптимизация везде отключена. Вот результаты:
Скажу честно я ожидал встретить какой-то сигнал в начале работы программы (правда чё-то этих нулевых сигналов многовато). Но что здесь делают сигналы с отрицательными значениями и этот непонятный 512? Между ними несколько сигналов 3 (__NR_read). Причём здесь вообще чтение? А где сигналы __NR_creat, __NR_open, __NR_close? В общем ситуация требует прояснения.
Это запрещённый приём. Тем более у меня нет никакой гарантии, что не будет вот такой проги:
Или ещё хуже, юзверь напишет что-то в стиле обфускации и я буду по сорцам метаться в поисках вредоносного кода? |
||||||||||
|
|||||||||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
внимаательно посмотри код у меня используется orig_ax, а не ax у тебя же используется eax, а надо orig_eax -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
MAKCim, вот моя прога:
Перехватывает все открытия файлов. Только оказалось, что в ebx смещение имени файла, а в ecx флаги. Неужели это так сильно зависит от платформы? Т.е. на фряхе будет мусор выводиться? Почему один и тот же сигнал выводится 2 раза? Почему, если прога x пытается открыть несуществующий файл для чтения, то моя прога виснет, а не выходит с сигналом? Это сообщение отредактировал(а) CPlusPlusFAN - 25.8.2008, 21:15 |
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
И вот ещё 1 вопрос, пока не забыл: будет ли эта штука с чтением регистров работать, если запускать прогу на виртуальной машине?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
да |
|||
|
||||
| MAKCim |
|
||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
man 2 ptrace
man 2 ptrace
если процесс трассируется, то он переходит в состояние TASK_STOPPED при получении любого сигнала кроме SIGKILL в данном случае fclose() для f (т. к f == NULL) приводит к SIGSEGV wait4() возвращает управление и WIFSTOPPED() выполняется, т. к SIGSEGV != SIGKILL следующий вызов ptrace() приводит к возобновлению работы процесса т. к до этого было сгенерировано исключение #PF (приведшее к SIGSEGV), возврат на 3-е кольцо будет осуществлен на инструкцию, выполнение которой привело к #PF и SIGSEGV генерируется очередное #PF и SIGSEGV и т. д до бесконечности вот программа и висит -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||
|
|||||||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |