перезватую 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-----------------//
блин, никто не знает?, может эту тему переместить в os.kernel ?, вообще задача перехватить создание процесса, и при определенном его имени разрешить его запуск или отменить может кто-то сталкивался с такой задачей
начиная с XP есть PsGetProcessImageFileName для более ранних где-то на сайте валялись статьи Four-F'а.. там было
Код (Text): LPSTR NTAPI PsGetProcessImageFileName (PEPROCESS Process) { return (LPSTR)Process->ImageFileName; } мда..., вот такой код у нее в исходниках винды 1. я спрашивал про Section т.к. при вызове NtCreateProcess EPROCESS еще не создана, или я ошибаюсь? 2. Если перехватывать NtCreateThread то ClientID возвращается какойто левый, и NtQueryInformationThread возвращает INVALID_HANDLE, не знаю в чем дело, я об этом писал в другом моем топике про NtCreateThread там я код вылаживал
гм, а действительно, обсуждали что-то подобное, но без особых результатов.. в общем, я не знаю ps: блин.. я думал, XP еще не утекла
и вообще, NtQueryVirtualMemory не экспортируется, ее номер в SDT зависит от ядра, и она требует наличия какого-нибудь процесса, в контексте которого можно сначала спроецировать секцию.. а потом эту секцию придется отмапливать.. так что легче все равно воспользоваться жеско зашитыми смещениями, и извлечь все нужное из Section->ControlledArea->FilePointer (или что-то в этом роде)
ну а что это за структуры? я пробовал PSECTION_OBJECT, PSUBSECTION Код (Text): typedef struct _SUBSECTION { PCONTROL_AREA ControlArea; union { ULONG LongFlags; MMSUBSECTION_FLAGS SubsectionFlags; } u; ULONG StartingSector; PMMPTE SubsectionBase; ULONG UnusedPtes; ULONG PtesInSubsection; struct _SUBSECTION *NextSubSection; } SUBSECTION, *PSUBSECTION; typedef struct _SEGMENT_OBJECT { PVOID BaseAddress; ULONG TotalNumberOfPtes; LARGE_INTEGER SizeOfSegment; ULONG NonExtendedPtes; ULONG ImageCommitment; PCONTROL_AREA ControlArea; PSUBSECTION Subsection; PLARGE_CONTROL_AREA LargeControlArea; PMMSECTION_FLAGS MmSectionFlags; PMMSUBSECTION_FLAGS MmSubSectionFlags; } SEGMENT_OBJECT, *PSEGMENT_OBJECT; typedef struct _SECTION_OBJECT { PVOID StartingVa; PVOID EndingVa; PVOID LeftChild; PVOID RightChild; PSEGMENT_OBJECT Segment; } SECTION_OBJECT, *PSECTION_OBJECT; ObReferenceObjectByHandle в любом случае Код (Text): status = ObReferenceObjectByHandle(SectionHandle,DesiredAccess,NULL,KernelMode,&subsection,NULL); или status = ObReferenceObjectByHandle(SectionHandle,DesiredAccess,NULL,KernelMode,§ion,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
Section->Segment->ControlArea->FilePointer, если точнее конкретнее тебе ничего сказать не могу, вот статья Four-F, о которой я тебе говорил, если надо: http://www.wasm.ru/print.php?article=drvw2k14