Форум: "Основная";
Текущий архив: 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.005 c