Я сделал руткит режима ядра, который перехватывает idt в записи 2e на 64-битной машине. Я заметил, что ntdll.dll проверяет ds: 7FFE0308h, чтобы проверить, является ли машина 32-битной или 64-битной. ntdll.dll
Теперь я пытаюсь вызвать конкретный c процесс, ведущий себя так, будто машина 32-битная, чтобы реализовать int 2e. Я пытался изменить ds: 7FFE0308h на explorer.exe:
NTSTATUS change_32_64(int Pid)
{
char Writeval;
PEPROCESS Process; // our target process
PsLookupProcessByProcessId((HANDLE)Pid, &Process);
PVOID Address = get_addr(); // ds+7FFE0308h
KeReadProcessMemory(Process, Address, &Writeval, 1);
DbgPrint("well 32-64 bit is %x\n", (UINT8)Writeval);
Writeval ^= 0x01;
offWP();
KeWriteProcessMemory(Process, &Writeval, Address, 1);
onWP();
KeReadProcessMemory(Process, Address, &Writeval, 1);
DbgPrint("well 32-64 bit is now %x\n", (UINT8)Writeval);
return STATUS_SUCCESS;
}
код работает и изменяет ds: 7FFE0308h, но int 2e не реализован ...