Есть ли способ заставить 64-битную систему реализовывать прерывание 2E? - PullRequest
0 голосов
/ 12 апреля 2020

Я сделал руткит режима ядра, который перехватывает 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 не реализован ...

...