ZwMapViewOfSection: ошибка 0xc0000017 (для ntoskrnl.exe) и 0xc0000604 (для win32k.sys)

Я хочу получить базовый адрес (не путать с основа изображения) непосредственно из двух модулей ядра (файлов) и следующий код работает на 100% от Win XP до Win 7 x32.

Эти ошибки возникают, когда я пытаюсь отобразить ntoskrnl.exe или же win32k.sys на Win 8.1 (до сих пор не проверено в Win 10).

к ntoskrnl.exe выходит 0xc0000017 и с win32k.sys ( с KeStackAttachProcess в csrss.exe процесс, (не тестировался без KeStackAttachProcess) приходит 0xc0000604 (недокументированная ошибка)).

Как исправить?

#define SEC_IMAGE 0x1000000

///////////////////////////// VARIABLES ///////////////////////////////////

CHAR buf[MAXIMUM_FILENAME_LENGTH]="\\SystemRoot\\system32\\ntoskrnl.exe";
OBJECT_ATTRIBUTES oaNtoskrnl,oa;
IO_STATUS_BLOCK stStatusBlock;
HANDLE hNtoskrnl=0,hSection=0;
UNICODE_STRING us;
PVOID pNtoskrnl=0;
ULONG dwViewSize=0;
STRING as;

//////////////////////////////////////////////////////////////////////////

RtlInitString(&as,(PCSZ)buf);
RtlAnsiStringToUnicodeString(&us,&as,TRUE);

DbgPrint("%wZ", &us);

InitializeObjectAttributes(&oaNtoskrnl,&us,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);

status=ZwCreateFile(
&hNtoskrnl,
FILE_READ_DATA,
&oaNtoskrnl,
&stStatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ|FILE_SHARE_WRITE,
FILE_OPEN,
NULL,
NULL,
NULL);

RtlFreeUnicodeString(&us);

if(!NT_SUCCESS(status))
{
DbgPrint("Failed ZwCreateFile! 0x%x \n", status);
}

InitializeObjectAttributes(&oa,NULL,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);

status=ZwCreateSection(
&hSection,
SECTION_MAP_READ,
&oa,
NULL,
PAGE_READONLY,
SEC_IMAGE,
hNtoskrnl
);
if(!NT_SUCCESS(status))
{
DbgPrint(("Failed ZwCreateSection! 0x%x \n", status));
ZwClose(hNtoskrnl);
}

status=ZwMapViewOfSection(
hSection,
NtCurrentProcess(),
&pNtoskrnl,
16,
NULL,
NULL,
&dwViewSize,
ViewUnmap,
NULL,
PAGE_READWRITE
);

if(!NT_SUCCESS(status))
{
DbgPrint("Failed ZwMapViewOfSection! 0x%x \n", status);
ZwClose(hSection);
ZwClose(hNtoskrnl);
}

DbgPrint("Initialize finished! 0x%x \n", pNtoskrnl);

ZwUnmapViewOfSection(NtCurrentProcess(), pNtoskrnl);
ZwClose(hSection);
ZwClose(hNtoskrnl);

РЕДАКТИРОВАТЬ:

После предложений здесь часть изменена, но все еще с той же проблемой (теперь проверено также на Win 10).

ULONG modsz = 0; // receives size of file after execute MyEnumKernelModule()

MyEnumKernelModule("\\systemroot\\system32\\win32k.sys",&ModuleAddress, &modsz);

status=ZwCreateSection(
&hSection,
SECTION_ALL_ACCESS,
&oa,
(PLARGE_INTEGER)modsz,
PAGE_EXECUTE_READWRITE,
SEC_COMMIT,
hNtoskrnl
);

status=ZwMapViewOfSection(
hSection,
NtCurrentProcess(),
&pNtoskrnl,
NULL,
NULL,
NULL,
&modsz,
ViewUnmap,
MEM_RESERVE,
PAGE_EXECUTE_READWRITE
);

-1

Решение

На основании кодов ошибок:

  • Код ошибки: (NTSTATUS) 0xc0000017 (3221225495) — {Недостаточно квоты} Недостаточно квоты виртуальной памяти или файла подкачки для выполнения указанной операции.
  • Код ошибки: (NTSTATUS) 0xc0000604 (3221227012) — Операция была заблокирована, так как процесс запрещает генерацию динамического кода.

Похоже, ограничение процесса на основе ошибки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]