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