在成功构建蹦床并了解有关进程内存空间的更多信息后,我在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变为API,但我被告知这是不正确的,让我大家都感到困惑。你们都看到了什么问题吗?请描述一下。我喜欢学习o3o