Перехват запуск процесса точнее файла

Тема в разделе "WASM.WIN32", создана пользователем ABC, 4 сен 2005.

  1. ABC

    ABC New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    92
    Можно ли перехватить запуск процесса

    и проверить например на размер а затем

    продолжеть его запуск...
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    PsSetCreateProcessNotifyRoutine adds a driver-supplied callback routine to, or removes it from, a list of routines to be called whenever a process is created or deleted.


    Код (Text):
    1. NTSTATUS
    2.   PsSetCreateProcessNotifyRoutine(
    3.     IN PCREATE_PROCESS_NOTIFY_ROUTINE  NotifyRoutine,
    4.     IN BOOLEAN  Remove
    5.     );


    Parameters

    NotifyRoutine

    Specifies the entry point of a caller-supplied process-creation callback routine.

    Remove

    Indicates whether the routine specified by NotifyRoutine should be added to or removed from the system's list of notification routines. If FALSE, the specified routine is added to the list. If TRUE, the specified routine is removed from the list.

    Include

    ntddk.h



    Return Value

    PsSetCreateProcessNotifyRoutine can return one of the following:



    STATUS_SUCCESS

    The given NotifyRoutine is now registered with the system.

    STATUS_INVALID_PARAMETER

    The given NotifyRoutine has already been registered so this is a redundant call, or the system has reached its limit for registering process-creation callbacks.
     
  3. ABC

    ABC New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    92
    А что CreateProcess не подойдет?
     
  4. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55
    А что, прочитать в MSDN что делает CreateProcess, и сравнить с тем, что требуется (в заголовке темы/тексте сообщения) не получается?



    Если имеется в виду перехват API CreateProcess с целью перехвата запуска процессов /sorry за стиль, ничего в голову не идет/, то работать оно будет. Но способ, предложенный Ms Rem, с точки зрения практического использования удобнее.



    ABC

    Старайтесь формулировать вопрос так, чтобы он был понятен окружающим.
     
  5. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    ну и как интересно стало из NotifyRoutine запретить запуск

    у меня например не получилоcь



    работоспособен вариант хука на все процессы kernel32!CreateProcessInternalW или (титиретически, сам не пробовал) хук куда-нибудь на ntoskrnl!ZwCreateSection
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    NotifyRoutine используется только для мониторинга запуска, но не для запрета.







    Работоспособен только в Windows XP, в 2000 нет такой функции. Да и обойти можно запустив процесс стредствами NativeAPI.





    Не лучший вариант, так как эта ф-я еще много для чего используется. Лучше на ZwCreateProcess и в Windows XP еще на ZwCreateProcessEx
     
  7. Skif

    Skif New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2003
    Сообщения:
    55




    Краткая пробежка по www.google.com показала, что это вполне возможно. Самостоятельно экспериментировать времени, к сожалению, нет.
     
  8. MiraclE

    MiraclE New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    38
    Адрес:
    Kazakhstan
    Тогда еще лучше перехватывать PspCreateProcess,

    а поиск функции осуществлять по сигнатуре Ж)
     
  9. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Не лучше, так как 100% гарантировать нахождение данной функции нельзя. И поиск по сигнатрурам далеко не лучший метод, так как привязан к конкретной версии ОС и даже часто к конкретному SP. Более универсальный метод - дизассемблировать функцию в которой есть ссылка на искомый элемент, определять команду которая к нему обращается и извлекать оттуда. При правильной реализации можно добиться работоспособности такого поиска на любой ос начиная с NT4 и заканчивая лонгхорном, даже возможно это будет работать и на следующих версиях ОС, хотя 100% гарантию дать нельзя.

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

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ




    есть и на в2к и на нт4 и даже на 9х...

    обойти - да, можно причем сорцы общедоступны







    ну если только процессы то наверное, не пробовал

    мне просто приходится мониторить загрузку всех модулей поэтому я так люблю sections особенно их mapview
     
  11. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Не знаю, какая винда у тебя, но у меня kernel32 от Windows 2000 такую функцию не экспортирует. Если не вериться, могу выложить kernel32.
     
  12. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ




    не то чтобы не верится просто на основе этой функции у меня лично одна утиль базируется уже лет так 5 во всех имеющих распространение виндах



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



    навскидку с первой попавшейся машины (w2k as sp4):



    ----- tdump kernel32.dll > kernel32.inf

    Turbo Dump Version 4.2.16.1 Copyright (c) 1988, 1996 Borland International

    Display of File KERNEL32.DLL



    Old Executable Header



    DOS File Size B5710h (743184. )

    Load Image Size 450h ( 1104. )

    Relocation Table entry count 0000h ( 0. )

    Relocation Table address 0040h ( 64. )

    Size of header record (in paragraphs) 0004h ( 4. )

    Minimum Memory Requirement (in paragraphs) 0000h ( 0. )

    Maximum Memory Requirement (in paragraphs) FFFFh ( 65535. )

    File load checksum 0000h ( 0. )

    Overlay Number 0000h ( 0. )



    Initial Stack Segment (SS:SP) 0000:00B8

    Program Entry Point (CS:IP) 0000:0000





    Portable Executable (PE) File



    Header base: 000000C8



    CPU type 80386

    Flags 230E [ executable backwards 32bit library ]

    DLL flags 0000 [ ]

    Linker Version 5.C

    Time stamp 3EF274DC

    O/S Version 5.0

    User Version 5.0

    Subsystem Version 4.0

    Subsystem 0003 [ Windows character ]

    Object count 00000004

    [skipped]

    Exports from KERNEL32.dll

    827 exported name(s), 827 export addresse(s). Ordinal base is 1.

    Ordinal RVA Name

    ------- -------- ----

    0000 0001b65b AddAtomA

    0001 0000df58 AddAtomW

    [skipped]

    0071 000206b1 CreatePipe

    0072 0001c0a0 CreateProcessA

    0073 0001bf86 CreateProcessInternalA

    0074 00011ba0 CreateProcessInternalW

    0075 00038628 CreateProcessInternalWSecure

    0076 0000b252 CreateProcessW

    0077 000133c3 CreateRemoteThread

    --------
     
  13. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    http://ms-rem.dot-link.net/kernel32.rar



    Kernel32.dll от Win2K SP2.

    Я тоже с перехватом этой функции прогу както делал, и у меня она в этой винде не запустилась по причине ее отсутствия.