Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перехват запуска приложения [D7, Win2k, WinXP]


Страницы:   1 2

dreamse ©   (2008-06-24 11:37:00) 

Приветствую.

Занимаюсь разработкой приложения для безопасности.
Не буду вдаваться в подробности. Смысл следующий: Нужно каким либо образом перехватывать запуск приложений.

Хотел бы чтобы вы подсказали как будет лучше всего это реализовать, я опишу те варианты которые пришли мне на ум и опишу почему они не подходят.

Есть следующие варианты:

1) Прописать в реестре %1 чтобы любое приложение запущенное в Windows запускалось через мою программу, т.е запускаеться моя программа с параметрами я её проверяю и уже затем запускаю.
Соответственно этот способ считать лучшим не следует так как его очень просто обойти.

2) Каждые N секунд по таймеру обновлять список процессов, смотреть если добавился процесс, проверять его и если он должен быть заблокированн то отпралять ему Terminate Process
Минусы: Данный вариант постоянно нагружает процессор на 5-10 % каждые N проверяемых секунд и к тому же пока идет проверка проверяемое приложение может уже сделать все что нужно (например удалить файлы с диска) и смысл в его проверке просто будет утерян

3) Внедрение DLL во все процессы системы
Внедряю DLL которая отслеживает любую попытку запустить что либо (CreateProcess и пр.) и прежде чем произойдет запуск проверяет запускаемое приложение. Вариант идеальный если бы не следующие минусы: Внедренее DLL уже само по себе не законно и все антивирусы с проективной защитой сразу же пишут что происходит подозрительное действие, так же данный метод очень сильно глючит в висте (почему, пока не разбирался) к тому же думаю что это не совсем верное решение.

4) Лучшим решением будет: Написание драйвера
Драйвер перехватывает любой запуск и передает например путь в мой сервис, сервис проверяет приложение и если это не то приложение которое нужно блокировать то отправляет данные драйверу о том что приложение можно разрешить запускать.
Минусы: Я не знаю не C++ ни ASM а писать драйверы на Delphi к сожалению нельзя (знаю что компилятор 2 и 3 Delphi позволяет, но давайте уж согласимся что это полное изврещение и нормальный sys не написать :(   )

Подскажите какие могут быть оптимальные решения которые можно было бы реализовать с наименьшей загрузкой CPU и с наиболее большой вероятностью перехвата всех запускаемых приложений ( именно перхвата )


Германн   (2009-03-31 00:53:00) [1]


> Игорь Шевченко ©   (30.03.09 22:54) [24]

Давно уже вижу подобные вопросы. И давно уже вижу твои ответы-вопросы. Но практически не вижу "разумных" ответов на последние.
То ли людям лень осваивать основы MS Windows, то ли людям нужно что-то либо иное, либо своё. Но причины этого "желания" я не улавливаю.


Игорь Шевченко   (2009-03-30 22:54:00) [2]

"За это время человек мог изобрести самодвижущееся пресс-папье или окончить архитектурный институт" (с) Аркадий Бухов

Про то, что набор разрешенных для запуска приложений можно определить политиками безопасности Windows, техническая мысль не дошла ?


Smile   (2009-03-30 21:16:00) [3]

> dreamse   (24.06.08 11:37)
> Перехват запуска приложения [D7, Win2k, WinXP]

А что мешает поискать уже готовые приложения и решения?
:)


Eraser   (2009-03-30 21:12:00) [4]

> [21] dreamse   (30.03.09 21:03)


> Пока остановился на внедрении DLL

т.е. перехват API-функций через внедрение свой ДЛЛ?

> если заказывать то сумма разработки драйвера колеблется
> в пределах 2k

+ около $500K в год за сертификат.
извиняюсь, а чем вариант с WMI не подходит?


dreamse   (2009-03-30 21:03:00) [5]

> Константин   (26.12.08 20:55) [14]

Пока остановился на внедрении DLL
Со временем думаю закажем драйвер у сторонних разработчиков. В данный момент не можем выделить денег на это ( если заказывать то сумма разработки драйвера колеблется в пределах 2k)

Спасибо за предложение, перехват по окнам уже есть в других проектах и он немного не подходит, просто потому что это будет программа безопасности которая должна должным образом реагировать на запуск любых PE файлов.


Максим   (2009-03-28 20:45:00) [6]

dreamse, вы бы не могли поподробнее описать ваш первый способ перехвата,прописать в реестре %1 чтобы любое приложение запущенное в Windows запускалось через мою программу.Конкретно меня интересует какая именно ветка отвечает за это. Спасибо.


Starik   (2008-12-28 14:28:00) [7]

dreamse, воспользуйтесь оснасткой актив-директори. там есть все. запрет на запуск любой софтины, индивидуальные настройки каждого пользователя (убираются любые по желанию возможности - изменения настроек системы, установка/удаление софта, принтеров, разграничение по сетевым доступам - кому куда можно/нельзя и куча всего другого). Даже подменить рабочий стол пользователя сетевой папкой - и то можно. Автоматическая установка базового набора софта (который согласован с руководятелами)  на все машины, подключаемые к сети... И все это отработано давно, еще со времен 2000 винды, и намного надежней, чем самостоятельно написанная за каникулы программулька.


Leonid Troyanovsky   (2008-12-27 11:22:00) [8]


> dreamse   (27.06.08 06:33) [13]

> см. Перехват WinApi на Delphi
>
> так же бесплатный компонент madCollection (рекомендую) там
> есть и функция внедрения

- Все, пропал дом. [ФФ]

> dreamse   (24.06.08 11:37)

> Занимаюсь разработкой приложения для безопасности.
> Не буду вдаваться в подробности

Зря вы, господа, калош не снимаете. [ФФ]

--
Regards, LVT.


Eraser   (2008-12-26 22:52:00) [9]

> [16] DVM ©   (26.12.08 22:37)

из под админа с выключенным UAC работает. но, в любом случае, заставить работать этопроще, чем написать драйвер и интегрировать его в висту, хотя драйвер дает неограниченные возможности, тут уж не поспоришь.


DVM   (2008-12-26 22:37:00) [10]


> Eraser ©

В висте наверное не заработает. Там обычному юзеру WMI заказан.


Eraser   (2008-12-26 22:11:00) [11]

http://code.progler.ru/view/376


Константин   (2008-12-26 20:55:00) [12]

Dreamse, интересные варианты вы рассматриваите.
Понравилась идея с запуском сервиса.
На чём вы остановились и можно ли пощупать результат?
У нас стояла схожая задача: не допустить запуск пользователями в локальной офисной сети запрещённых програм. Причём, список этих программ динамически менялся.
Пришла идея проверять заголовок окна на содержание запретных слов: "keygen, скачать, мр3, photoshop и т.д.", т.е. всё, что может отвлечь сотрудника от работы.
Реализовали на скриптовом языке AutoIT.
Нагрузка минимальная. Проверка идёт не по таймеру, а по событию создания любого окна. Молча висит и ждёт.
Могу безвозмездно выслать исходники и комментарии.


dreamse   (2008-06-27 06:33:00) [13]

> Сергей_77   (26.06.08 10:50) [11]

см. Перехват WinApi на Delphi

так же бесплатный компонент madCollection (рекомендую) там есть и функция внедрения

> Amoeba ©   (25.06.08 15:29) [10]

Неа


Сергей М.   (2008-06-26 11:06:00) [14]


> dreamse   (24.06.08 13:37) [5]
> нужно копать в сторону .. PsSetCreateProcessNotifyRoutine


http://www.rsdn.ru/Forum/message/11341.flat.aspx


Сергей_77   (2008-06-26 10:50:00) [15]


> 3) Внедрение DLL во все процессы системы

а как это было реализовано?


Amoeba   (2008-06-25 15:29:00) [16]


> оказалось что на 2 и 3 Delphi можно слинковать sys файл

Линковщик от MS имеется?


dreamse   (2008-06-25 13:59:00) [17]

Все разобрался, всем спасибо.

p.s оказалось что на 2 и 3 Delphi можно слинковать sys файл. Так что решу этот вопрос написанием драйвера на Delphi 2


dreamse   (2008-06-25 13:29:00) [18]

Сделал Hook. Но он ловит только приложения с окнами: HSHELL_WINDOWCREATED

Подскажите через что можно сделат отлов запуска


(ПроцедураОболочки)

Подключаемая процедура ShellProc - определяемая программой или определенная библиотекой функция повторного вызова, которую использует оболочка прикладной программы, чтобы принимать полезные уведомления от системы.

Синтаксис
LRESULT CALLBACK ShellProc
(
int nCode,  // код hook-точки
WPARAM wParam, // информация, определяемая событием
LPARAM lParam // информация, определяемая событием
);

Параметры
nCode
Определяет код hook-точки. Этот параметр может быть одним из следующих значений:
HSHELL_ACTIVATESHELLWINDOW - Оболочка должна активизировать свое главное окно.
HSHELL_GETMINRECT - Только для Windows 95: окно свертывается или развертывается, а система нуждается в координатах свернутого (минимизированного) прямоугольника окна. Параметр wParam содержит дескриптор окна, а параметр lParam содержит адрес структуры RECT, которая принимает координаты.
HSHELL_LANGUAGE - Только для Windows 95: язык клавиатуры был изменен, или была загружена новая раскладка символов на клавиатуре.
HSHELL_REDRAW - Только для Windows 95: заголовок окна в панели задач был перерисован. Параметр wParam содержит дескриптор окна.
HSHELL_TASKMAN - Только для Windows 95: пользователь выбрал список задач. Параметр wParam не определен и должен игнорироваться. Оболочка прикладной программы, которая предоставляет список задач, должна возвратить значение ИСТИНА (TRUE), чтобы воспрепятствовать Windows запустить список его задач.
HSHELL_WINDOWACTIVATED - Только для Windows 95: активизация была заменена в другом, не имеющем владельца, окне верхнего уровня. Параметр wParam содержит дескриптор окна.
HSHELL_WINDOWCREATED - Было создано не имеющее владельца окно верхнего уровня. Окно существует только тогда, когда система вызывает функцию ShellProc.
HSHELL_WINDOWDESTROYED - Не имеющее владельца окно верхнего уровня собирается быть разрушенным. Окно все еще существует когда система вызывает функцию ShellProc.


tesseract   (2008-06-24 15:21:00) [19]


> Минус в том что нет примеров на Delphi для взаимодействия
> с этим драйвером.


В принципе там описание самого DEVICEIO для драйвера есть. И даже по полочкам разложен текст.

перевод

invoke CreateThread, NULL, 0, offset WaitForProcessData, g_hEvent, 0, esp

Res:=CreateThread(Nil,0,offset,WaitForProcessData,g_hEvent,0);

И тд.

Только отлаживать следует на VMWARE - падать системка будет часто, а краш дамп изучать довольно неудобная задача для делфиста.


dreamse   (2008-06-24 14:42:00) [20]

Нашел статью которая описывает создание драйвера который перехватывает создание процессов в системе http://nickolay13.narod.ru/Assembler/secrets_Win32/assem31.html

Минус в том что нет примеров на Delphi для взаимодействия с этим драйвером. Как можно с ним взаимодействовать и есть ли возможность написать обработчики к этому драйверу?

p.s сам скомпилированный драйвер есть в архиве к статье


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо