2

在成功搭建蹦床并详细了解进程内存空间后,我在 MessageBoxA 上测试了蹦床。它工作得很好,所以我决定最终将代码用于它应该首先用于的用途,通过挂钩 NtQuerySystemInformation 隐藏一个进程。重定向功能应该可以正常工作,但是我用来编写 jmp 指令的代码现在每次都会导致任务管理器崩溃。

        BYTE tmpJMP[5] = {0xE9,0x00,0x00,0x00,0x00}; //jmp,A,D,D,R
        memcpy(JMP,tmpJMP,5);
        DWORD Addr = ((DWORD)func - ((DWORD)oNtQuerySystemInformation + 0x5));

        for (int i=0;i<4;++i)
            JMP[i+1] = ((BYTE*)&Addr)[i];

        if (VirtualProtect((LPVOID)oNtQuerySystemInformation,5,PAGE_EXECUTE_READWRITE,&oldProtect) == FALSE)
            MessageBox(NULL,L"Error unprotecting memory",L"",MB_OK);

        memcpy(oldBytes,(LPVOID)oNtQuerySystemInformation,5);

        if (!WriteProcessMemory(GetCurrentProcess(),(LPVOID)oNtQuerySystemInformation,(LPCVOID)JMP,5,NULL))
            MessageBox(NULL,L"Unable to write to process memory space",L"",MB_OK);

        VirtualProtect((LPVOID)oNtQuerySystemInformation,5,oldProtect,NULL);

        FlushInstructionCache(GetCurrentProcess(),NULL,NULL);

我是这样写到内存中的。我似乎找不到代码的问题。我在想,也许 API 之间的内存会发生变化,但有人告诉我这是不正确的,这让我很困惑。大家看到有什么不对吗?请描述性。我爱学习o3o

4

0 回答 0