トランポリンの作成に成功し、プロセス メモリ空間についてさらに学習した後、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を学ぶのが大好き