перехват NtCreateProcessEx как по SectionHandle получить адресс

Тема в разделе "WASM.BEGINNERS", создана пользователем foxhunter, 19 мар 2007.

  1. foxhunter

    foxhunter New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    10
    перезватую NtCreateProcessEx,
    на этом этапе я так понимаю EPROCESS еще не создан, есть только обьект "раздел",Section ,мне нужно узнать адресс образа на винте, подскажите как это сделать и какой функцией?
    пробовал NtQuerySection, но она возвращает не то что надо, я даже не знаю что т.к. функция недокументирована

    вот отладочная информация
    пример при пуск->выполнить->калькулятор
    ImageInformation это структура которую возвращает NtQuerySection
    00000000 0.00000000 Driver loaded
    00000001 2.93073845 //----------------hook----------------//
    00000002 2.93082881 ThreadHandle = 14274308
    00000003 2.93086433 DesiredAccess = 2035711
    00000004 2.93089533 ObjectAttributes = 0
    00000005 2.93092608 ParentProcess = -1
    00000006 2.93095660 CreateFlags = 0
    00000007 2.93098617 SectionHandle = 1268
    00000008 2.93101716 DebugPort = 0
    00000009 2.93104720 ExceptionPort = 0
    00000010 2.93107867 JobMemberLevel = 0
    00000011 2.93118596 NtQuerySection returned STATUS_SUCCESS
    00000012 2.93121886 -----------------ImageInformation-----------------
    00000013 2.93131804 ImageInformation.TransferAddress = ‹Eя6‰GяЂ
    00000014 2.93461728 call NtCreateProcessEx success
    00000015 2.93480086 //----------------end-----------------//
     
  2. foxhunter

    foxhunter New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    10
    блин, никто не знает?, может эту тему переместить в os.kernel ?,

    вообще задача перехватить создание процесса, и при определенном его имени
    разрешить его запуск или отменить
    может кто-то сталкивался с такой задачей
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    были уже такие темы.. поройся в поиске
    NtQuerySection никто вроде не использовал
     
  4. foxhunter

    foxhunter New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    10
    в том то и дело, что темы были , а вразумительных ответов небыло :)
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    начиная с XP есть PsGetProcessImageFileName
    для более ранних где-то на сайте валялись статьи Four-F'а.. там было
     
  6. foxhunter

    foxhunter New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    10
    Код (Text):
    1. LPSTR NTAPI PsGetProcessImageFileName   (PEPROCESS Process)        
    2. {
    3.        return (LPSTR)Process->ImageFileName;
    4. }
    мда..., вот такой код у нее в исходниках винды

    1. я спрашивал про Section т.к. при вызове NtCreateProcess EPROCESS еще не создана, или я ошибаюсь?

    2. Если перехватывать NtCreateThread то ClientID возвращается какойто левый, и NtQueryInformationThread возвращает INVALID_HANDLE, не знаю в чем дело, я об этом писал в другом моем топике про NtCreateThread
    там я код вылаживал
     
  7. Nouzui

    Nouzui New Member

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

    ps:
    блин.. я думал, XP еще не утекла
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    ответ: NtQueryVirtualMemory
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    wrk
     
  10. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    там я не нашел
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    и вообще, NtQueryVirtualMemory не экспортируется, ее номер в SDT зависит от ядра, и она требует наличия какого-нибудь процесса, в контексте которого можно сначала спроецировать секцию.. а потом эту секцию придется отмапливать..
    так что легче все равно воспользоваться жеско зашитыми смещениями, и извлечь все нужное из Section->ControlledArea->FilePointer (или что-то в этом роде)
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    \base\ntos\ps\pshelper.c
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    понятно, в тотале глюки, в архиве он строчку не находит..
    ps: и за каким она nonpageable?
     
  14. foxhunter

    foxhunter New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    10
    ну а что это за структуры?
    я пробовал PSECTION_OBJECT, PSUBSECTION
    Код (Text):
    1. typedef struct _SUBSECTION
    2. {
    3.     PCONTROL_AREA ControlArea;
    4.     union
    5.     {
    6.         ULONG LongFlags;
    7.         MMSUBSECTION_FLAGS SubsectionFlags;
    8.     } u;
    9.     ULONG StartingSector;
    10.     PMMPTE SubsectionBase;
    11.     ULONG UnusedPtes;
    12.     ULONG PtesInSubsection;
    13.     struct _SUBSECTION *NextSubSection;
    14. } SUBSECTION, *PSUBSECTION;
    15.  
    16. typedef struct _SEGMENT_OBJECT
    17. {
    18.     PVOID BaseAddress;
    19.     ULONG TotalNumberOfPtes;
    20.     LARGE_INTEGER SizeOfSegment;
    21.     ULONG NonExtendedPtes;
    22.     ULONG ImageCommitment;
    23.     PCONTROL_AREA ControlArea;
    24.     PSUBSECTION Subsection;
    25.     PLARGE_CONTROL_AREA LargeControlArea;
    26.     PMMSECTION_FLAGS MmSectionFlags;
    27.     PMMSUBSECTION_FLAGS MmSubSectionFlags;
    28. } SEGMENT_OBJECT, *PSEGMENT_OBJECT;
    29.  
    30. typedef struct _SECTION_OBJECT
    31. {
    32.     PVOID StartingVa;
    33.     PVOID EndingVa;
    34.     PVOID LeftChild;
    35.     PVOID RightChild;
    36.     PSEGMENT_OBJECT Segment;
    37. } SECTION_OBJECT, *PSECTION_OBJECT;
    ObReferenceObjectByHandle в любом случае

    Код (Text):
    1. status = ObReferenceObjectByHandle(SectionHandle,DesiredAccess,NULL,KernelMode,&subsection,NULL);
    2. или
    3. status = ObReferenceObjectByHandle(SectionHandle,DesiredAccess,NULL,KernelMode,&section,NULL);
    возвращает section->segment = 0
    и subsection->ControlArea = 0

    хотя эти структуры и заполняются

    вообще нашел исходник на тему перехвата процесса (там перехватывается NtCreateSection ), но он бсод выдает, хотя там есть откомпилированные исходники, там все работает :),
    может кто розберется в чем дело, вот ссылка
    статья
    http://www.codeproject.com/system/soviet_protector.asp
    исходник
    http://www.codeproject.com/system/soviet_protector/soviet_protector_src.zip
    и откомпилированный пример
    http://www.codeproject.com/system/soviet_protector/soviet_protector_demo.zip
     
  15. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Section->Segment->ControlArea->FilePointer, если точнее
    конкретнее тебе ничего сказать не могу, вот статья Four-F, о которой я тебе говорил, если надо: http://www.wasm.ru/print.php?article=drvw2k14