Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Вниз

Перехват запуска приложения   Найти похожие ветки 

 
dreamse   (2008-06-24 11:37) [0]

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

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

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

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

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

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

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

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

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


 
tesseract ©   (2008-06-24 11:46) [1]


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


Можно. Про D2/3 - это явный прогон, да и  sys-драйвер тебе тут абсолютно не нужен.

Например, определсиь, как драйвер будет определять запуск приложения?  Драйвера от честнейших ATI/NVIDIA заточки, вроде как в сервисе определяют. И потом уже говорят драйверу, что и как врубать.


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


А COM-сервера / java апплеты, ты считаешь за приложения ?

Давай лучше согласимся, что ты немного фигней страдаешь. Информацию на второстепенных форумах начерпал, и думаешь, что программу напишешь за каникулы ?  Такой софт можно годами писать.


 
dreamse   (2008-06-24 11:55) [2]

> tesseract ©   (24.06.08 11:46) [1]

> А COM-сервера / java апплеты, ты считаешь за приложения ?

Надо бы но пока не считаю, пока основа это *.com и *.exe

> Давай лучше согласимся, что ты немного фигней страдаешь. Информацию на второстепенных форумах начерпал, и думаешь, что программу напишешь за каникулы ?  Такой софт можно годами писать.

3 вариант который я привел уже реализован, и работает прекрастно на XP вот с вистой проблемы и я решил переделать для более стабильной работы.

p.s на счет каникул ты слегка загнул :) на 3 года ты всего старше.
p.p.s что же касаеться тымы : фигня - не фигня ... то есть такое понятие как : Начальство сказало НАДО вот и пишу :)

еще 5 вариант. Перехват API функций Windows на создание процесса.
Пока его прорабатываю, но к сожалению информации мало


 
tesseract ©   (2008-06-24 11:57) [3]


> Перехват API функций Windows на создание процесса.


А свой эксплорер написать ? В принципе всё административно решаеться, без допсофта.


 
dreamse   (2008-06-24 12:08) [4]

> tesseract ©   (24.06.08 11:57) [3]

> А свой эксплорер написать ?

Уже написан и проводник и аналог IE и куча всего другого.

Но тут вопрос не стоит так что нужно или не нужно ... тут вопрос : НАДО! по этому и пишу. И прошу мне в этом помочь а не рассуждать делать ли мне это или нет.


 
dreamse   (2008-06-24 13:37) [5]

Пока откопал только что нужно копать в сторону

ZwCreateProcess и PsSetCreateProcessNotifyRoutine

Информации как обычно мало :( Может кто видел уже решение ?


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

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

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

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


 
tesseract ©   (2008-06-24 15:21) [7]


> Минус в том что нет примеров на 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-25 13:29) [8]

Сделал 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.


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

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

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


 
Amoeba ©   (2008-06-25 15:29) [10]


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

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


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


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

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


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


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


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


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

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

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

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

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

Неа


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

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


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

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


 
DVM ©   (2008-12-26 22:37) [16]


> Eraser ©

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


 
Eraser ©   (2008-12-26 22:52) [17]

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

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


 
Leonid Troyanovsky ©   (2008-12-27 11:22) [18]


> dreamse   (27.06.08 06:33) [13]

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

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

> dreamse   (24.06.08 11:37)

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

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

--
Regards, LVT.


 
Starik   (2008-12-28 14:28) [19]

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


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

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


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

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

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

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


 
Eraser ©   (2009-03-30 21:12) [22]

> [21] dreamse   (30.03.09 21:03)


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

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

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

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


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

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

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


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

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

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


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


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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.006 c
2-1260985904
serko
2009-12-16 20:51
2010.02.21
Появляются пробелы в полях...


15-1260806036
{RASkov}
2009-12-14 18:53
2010.02.21
3G Modem


3-1235049122
Ragazor
2009-02-19 16:12
2010.02.21
Вопросы оптимальности и производительности


2-1261117696
maximkok
2009-12-18 09:28
2010.02.21
Как применить тему xp(.theme) без предупреждения?


1-1237987586
Валигози
2009-03-25 16:26
2010.02.21
Как прервать консольное приложение по Ctrl+C ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский