![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват запуска приложения [D7, Win2k, WinXP]
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 сам скомпилированный драйвер есть в архиве к статье