-
Подскажите. Есть ли готовые решения.
Допустим. Запускаю какой-то файл, нужно до его запуска показать мне, что этот файл пытается запуститься.. даже если его запускает другое приложение по CreateProcess
-
Решения есть - антивирусы. Именно они реализуют данный функционал. Хук в самом простом случае ставить нужно на SDT и теневую SST на NtCreateProcessEx
-
да. это надо.
-
-
Что удалось найти. Возможно ли это переделать под CreateProcess
program aHookProc;
uses
Windows,
advApiHook;
var
TrueMessageBoxA: function(hWnd: HWND; lpText, lpCaption:
PAnsiChar; uType: UINT): Integer; stdcall;
function NewMessageBoxA(hWnd: HWND; lpText, lpCaption:
PAnsiChar; uType: UINT): Integer; stdcall;
begin
TrueMessageBoxA(0, 'Перехват установлен!', 'HookProc', 0);
end;
begin
MessageBoxA(0, 'Новый метод API перехвата.', 'HookProc', 0);
HookProc('user32.dll', 'MessageBoxA', @NewMessageBoxA, @TrueMessageBoxA);
MessageBoxA(0, 'Не работает!', 'HookProc', 0);
UnhookCode(@TrueMessageBoxA);
MessageBoxA(0, 'Перехват снят.', 'HookProc', 0);
end.
И конкретно по WindowsSDK CreateProcess \ но собрать не получилось. http://www.vba90.com/post/vb17/vb17967.htmдля редактирования первого примера понадобится второй. type
TCreateProcess = function(lpApplicationName: PChar; lpCommandLine: PChar;
lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL; stdcall;
TCreateProcessA = function(lpApplicationName: PAnsiChar; lpCommandLine: PAnsiChar;
lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
lpCurrentDirectory: PAnsiChar; const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL; stdcall;
TCreateProcessW = function(lpApplicationName: PWideChar; lpCommandLine: PWideChar;
lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL; stdcall; Как поймать запускающийся процесс, и вывести его допустим в messagebox или memo
-
> sfary (21.08.10 10:53) [4] > Как поймать запускающийся процесс, и вывести его допустим > в messagebox или memo
А зачем, цель какая?
Вы наверное вирус пишите?
-
Пишу антивирус. На данный момент у меня определяет запуск процессов из разници кол-ва. по циклу. Сами понимаете, это неудобно. Для антивирусного монитора нужен хук.
Не спрашивайте зачем мне это надо, этот антивирус для конкретных целей.. как дополнение.
-
-
И кстати на заметку в Windows Vista и выше NtCreateProcess и NtCreateProcessEx вам не поможет, в этих ОС нужно перехватывать NtCreateUserProcess
-
Да, в курсе usermod надо, желательно простой apihook, в режиме ядра не требуется, с этим одни проблемы.. да и не требуется.
Размещу вашу рекламу в этот бесплатный проект.
-
-
-
i.websvc[hotdog]gmail.com
Игорь, рановато ставить, косяков много.
-
> sfary (21.08.10 11:40)
Ваш энтузиазм похвален но даже будь вы МД у вас уйдет на это месяцы, а то и годы...
Забейте у вас ничго не получиться
-
так я подобные проекты за 3 дня поднимаю, на массы. =)
с хуком было бы грамотнее.
-
аудит надо использовать, а не ерундой страдать.
-
> Игорь Шевченко © (22.08.10 18:27) [15]
Какой то довольно известный антивирус на этом принципе основан, ни каких хуков, забыл название
-
аудит не работает на компьютерах большинства людей, по умолчанию администратор. Можно конечно перевести человека под юзера с аудитом, но это так же не поможет выполниться шпионскому ПО.
-
> но это так же не поможет выполниться шпионскому ПО. >
:D не то.
Аудит не помешает шпионскому ПО, тем более всегда находились способы выбраться в нулевое кольцо. Процесс не стоит на месте, Rootkits/Bootkit последние практически не выгружаемы для антивирусов.
В любом случае, предотвратить какую-то часть от исполнения лучше, в моем случае (как мне кажется) не хилую.
Игорь взялся помочь нужным хорошим кодом, так как в действительности мне это не осилить. Постараюсь переписать с начала, минималистский апи интерфейс и оптимизированный код определения и дизасма для доп. анализа.
Проект в любом случае будет достаточно популярен, так как есть база для внедрения. Приму любую информацию касаемо темы.
-
-
> sfary
Перехват PsSetCreateProcessNotifyRoutine, пока есть проблемка, не могу получить полный путь запускаемого процесса, из usermode не получаеться, надо получать в драйвере, доработаю позже, щас занет пока, под x64 драйвер подписан, надо только отключить проверку цифровой подписи F8 http://www.onlinedisk.ru/file/501133/
-
Тестировал под Windows XP SP2, Seven, x64 Seven
-
> Игорь © (24.08.10 12:32) [20] > Перехват PsSetCreateProcessNotifyRoutine
Нафига его перехватывать-то ?
-
> Сергей М. © (24.08.10 13:41) [22]
Да это я так образно
-
> Игорь © (24.08.10 14:25) [23]
Даже если "образно", то как это поможет цели - "еще до запуска" ? Никак. Вот в Висте и 2008-м сервере - там появилась PsSetCreateProcessNotifyRoutineEx, она реально поможет.
-
> Сергей М. © (24.08.10 15:54) [24]
Процесс еще не инициализировался, не загрузил ни одну dll, что он может?
А мы можем спокойно его замочить если он нам не понравился чем либо
-
Возможно ли определить, что процесс полностью инициализировался (только с windows dll) после чего поставить его на паузу. Если функция определения на его вирусность дала добро, то его выгружаем, в противном случае убираем с паузы. На данный момент это требуется. Сильно драйвера не требуются, ошибок много будет и лёгкость утеряется.
|