Фильтр процессов

Тема в разделе "WASM.NT.KERNEL", создана пользователем Doctor_Leshiy, 18 мар 2011.

  1. Doctor_Leshiy

    Doctor_Leshiy New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2011
    Сообщения:
    2
    Задрасте всем)
    Есть проблема с PsSetCreateProcessNotifyRoutineEx(). Надо перехватывать старт процессов и запрещать им стартовать.
    Код (Text):
    1. #include <ntddk.h>
    2.  
    3. /*typedef struct _PS_CREATE_NOTIFY_INFO {
    4.   SIZE_T              Size;
    5.   union {
    6.     ULONG  Flags;
    7.     struct {
    8.       ULONG FileOpenNameAvailable  :1;
    9.       ULONG Reserved  :31;
    10.     };
    11.   };
    12.   HANDLE              ParentProcessId;
    13.   CLIENT_ID           CreatingThreadId;
    14.   struct _FILE_OBJECT *FileObject;
    15.   PCUNICODE_STRING    ImageFileName;
    16.   PCUNICODE_STRING    CommandLine;
    17.   NTSTATUS            CreationStatus;
    18. } PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;*/
    19.  
    20. CreateProcessNotifyRoutine( __inout   PEPROCESS Process,
    21.                            __in      HANDLE ProcessId,
    22.                            __in_opt  PPS_CREATE_NOTIFY_INFO CreateInfo
    23.                            )
    24. {
    25.     //DbgPrint("%d",ProcessId);
    26.     CreateInfo->CreationStatus = STATUS_ACCESS_DENIED;
    27. }
    28.  
    29.  
    30. VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject)
    31. {
    32.     PsSetCreateProcessNotifyRoutineEx(  (PCREATE_PROCESS_NOTIFY_ROUTINE_EX) CreateProcessNotifyRoutine, TRUE);
    33.     DbgPrint("Unload!\n");
    34. }
    35.  
    36. DriverEntry(IN PDRIVER_OBJECT DriverObject,  IN PUNICODE_STRING RegistryPath)
    37. {
    38.     PsSetCreateProcessNotifyRoutineEx(  (PCREATE_PROCESS_NOTIFY_ROUTINE_EX) CreateProcessNotifyRoutine, FALSE);
    39.     DriverObject->DriverUnload = UnloadRoutine;
    40.     DbgPrint("Driver loaded");
    41.    
    42.     return STATUS_SUCCESS;
    43.  
    44. }
    функция регистрации калбека возвращает STATUS_ACCESS_DENIED, не пойму почему
     
  2. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    RTFM:
     
  3. Doctor_Leshiy

    Doctor_Leshiy New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2011
    Сообщения:
    2
    Да MSDN я то читал) А вот с англиским сильно не дружу)
     
  4. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Так подружитесь: вся актуальная техническая документация - именно на английском языке, и не имея возможности читать её - вы не сможете написать хоть сколь-нибудь серьёзную программу.
     
  5. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    Упс!
    Узай эту функцию "PsSetCreateProcessNotifyRoutine" она и более рания(С 2000 ) и менее проблематичная ... :)
     
  6. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Cr4sh
    Т.е. если драйвер не подписан, то эту функцию ему использовать не позволено? или я что-то не правильно тоже понял про флаг в PE хидере IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY?
     
  7. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    RET
    Все вы правильно поняли ...

    Еще есть такая функция ObRegisterCallbacks
    STATUS_ACCESS_DENIED The callback routines do not reside in a signed kernel binary image. Сдесь четко говорится о подписи ...

    Как вариант можно пропатчить LDR_DATA_TABLE_ENTRY ну и MmVerifyCallbackFunction....