Конференция "WinAPI" » Ловушка на запуск файлов. Hook на CreateProcess
 
  • sfary (21.08.10 00:10) [0]
    Подскажите. Есть ли готовые решения.

    Допустим. Запускаю какой-то файл, нужно до его запуска показать мне, что этот файл пытается запуститься.. даже если его запускает другое приложение по CreateProcess
  • Rouse_ © (21.08.10 01:34) [1]
    Решения есть - антивирусы. Именно они реализуют данный функционал.
    Хук в самом простом случае ставить нужно на SDT и теневую SST на NtCreateProcessEx
  • sfary (21.08.10 09:42) [2]
    да. это надо.
  • Игорь © (21.08.10 10:03) [3]

    > sfary   (21.08.10 00:10)



    madCodeHook в usermod'е, а kernelmode SDT в сети полно примеров скачай WDK http://club.shelek.ru/viewfiles.php?id=2 и флаг в руки
  • sfary (21.08.10 10:53) [4]
    Что удалось найти. Возможно ли это переделать под 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
  • Игорь © (21.08.10 11:02) [5]

    > sfary   (21.08.10 10:53) [4]
    > Как поймать запускающийся процесс, и вывести его допустим
    > в messagebox или memo


    А зачем, цель какая?

    Вы наверное вирус пишите?
  • sfary (21.08.10 11:11) [6]
    Пишу антивирус. На данный момент у меня определяет запуск процессов из разници кол-ва. по циклу. Сами понимаете, это неудобно. Для антивирусного монитора нужен хук.

    Не спрашивайте зачем мне это надо, этот антивирус для конкретных целей.. как дополнение.
  • sfary (21.08.10 11:14) [7]
    http://slil.ru/29578798

    в этой версии есть ошибки, так что необходимо заменить мои циклы на хук.
  • Игорь © (21.08.10 11:15) [8]
    И кстати на заметку в Windows Vista и выше NtCreateProcess и NtCreateProcessEx вам не поможет, в этих ОС нужно перехватывать NtCreateUserProcess
  • sfary (21.08.10 11:22) [9]
    Да, в курсе usermod надо, желательно простой apihook, в режиме ядра не требуется, с этим одни проблемы.. да и не требуется.

    Размещу вашу рекламу в этот бесплатный проект.
  • Игорь © (21.08.10 11:36) [10]

    > sfary   (21.08.10 11:14) [7]
    > http://slil.ru/29578798



    > не требует подключения к интернету, не требует обновления


    Я уже хочу поставить себе

    Вы озвучте $ и мы всем форумом вам напишем HOOK CrateProcess по типу  вот этого http://delphisources.ru/pages/sources/system/2010-year/process-protector.html исходника который я написал в радостном угаре ничего не зная о програмирование драйверов, надеюсь меня не сильно будут бить за все BSOD которые он вызвал
  • sfary (21.08.10 11:40) [11]
    http://delphisources.ru/pages/sources/system/2010-year/process-protector.html

    хотел применить это к блокированию системных файлов от внедрения writememory но затем понял, что это нарушит работу windows =)

    проект бесплатный, так что с него ничего не поиметь. только могу разместить вашу рекламу.
  • sfary (21.08.10 11:44) [12]
    i.websvc[hotdog]gmail.com

    Игорь, рановато ставить, косяков много.
  • Игорь © (21.08.10 11:49) [13]

    > sfary   (21.08.10 11:40)


    Ваш энтузиазм похвален но даже будь вы МД у вас уйдет на это месяцы, а то и годы...

    Забейте у вас ничго не получиться
  • sfary (21.08.10 11:58) [14]
    так я подобные проекты за 3 дня поднимаю, на массы. =)

    с хуком было бы грамотнее.
  • Игорь Шевченко © (22.08.10 18:27) [15]
    аудит надо использовать, а не ерундой страдать.
  • Игорь © (22.08.10 22:35) [16]

    > Игорь Шевченко ©   (22.08.10 18:27) [15]


    Какой то довольно известный антивирус на этом принципе основан, ни каких хуков, забыл название
  • sfary (24.08.10 00:51) [17]
    аудит не работает на компьютерах большинства людей, по умолчанию администратор. Можно конечно перевести человека под юзера с аудитом, но это так же не поможет выполниться шпионскому ПО.
  • sfary (24.08.10 01:16) [18]

    > но это так же не поможет выполниться шпионскому ПО.
    >

    :D не то.

    Аудит не помешает шпионскому ПО, тем более всегда находились способы выбраться в нулевое кольцо. Процесс не стоит на месте, Rootkits/Bootkit
    последние практически не выгружаемы для антивирусов.

    В любом случае, предотвратить какую-то часть от исполнения лучше, в моем случае (как мне кажется) не хилую.

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

    Проект в любом случае будет достаточно популярен, так как есть база для внедрения. Приму любую информацию касаемо темы.
  • Сергей М. © (24.08.10 09:53) [19]
  • Игорь © (24.08.10 12:32) [20]

    > sfary


    Перехват PsSetCreateProcessNotifyRoutine, пока есть проблемка, не могу получить полный путь запускаемого процесса, из usermode не получаеться, надо получать в драйвере, доработаю позже, щас занет пока, под x64 драйвер подписан, надо только отключить проверку цифровой подписи F8

    http://www.onlinedisk.ru/file/501133/
  • Игорь © (24.08.10 12:47) [21]
    Тестировал под Windows XP SP2, Seven, x64 Seven
  • Сергей М. © (24.08.10 13:41) [22]

    > Игорь ©   (24.08.10 12:32) [20]
    > Перехват PsSetCreateProcessNotifyRoutine


    Нафига его перехватывать-то ?
  • Игорь © (24.08.10 14:25) [23]

    > Сергей М. ©   (24.08.10 13:41) [22]


    Да это я так образно
  • Сергей М. © (24.08.10 15:54) [24]

    > Игорь ©   (24.08.10 14:25) [23]


    Даже если "образно", то как это поможет цели - "еще до запуска" ?
    Никак.
    Вот в Висте и 2008-м сервере - там появилась PsSetCreateProcessNotifyRoutineEx, она реально поможет.
  • Игорь © (24.08.10 16:14) [25]

    > Сергей М. ©   (24.08.10 15:54) [24]


    Процесс еще не инициализировался, не загрузил ни одну dll, что он может?

    А мы можем спокойно его замочить если он нам не понравился чем либо
  • sfary (25.08.10 19:41) [26]
    Возможно ли определить, что процесс полностью инициализировался (только с windows dll) после чего поставить его на паузу. Если функция определения на его вирусность дала добро, то его выгружаем, в противном случае убираем с паузы. На данный момент это требуется. Сильно драйвера не требуются, ошибок много будет и лёгкость утеряется.
 
Конференция "WinAPI" » Ловушка на запуск файлов. Hook на CreateProcess
Есть новые Нет новых   [134431   +10][b:0][p:0.003]