ここでは、興味のある機能の始めにいくつかのバイトを書き換えるフックをインストールする標準的なコードを示します。私の質問は、なぜ、書き換えられたメモリを再保護する必要があるのでしょうか?アクセス許可をPAGE_EXECUTE_READWRITE
にするだけでいいですか?ここでは、元のバイトを常に元に戻して、再度読み直す必要があると仮定します。フック:権限を復元するためにVirtualProtect()をもう一度実行する必要があるのはなぜですか?
if (VirtualProtect(funcPtr, 6, PAGE_EXECUTE_READWRITE, &dwProtect)) // make memory writable
{
ReadProcessMemory(GetCurrentProcess(), (LPVOID)funcPtr, Hook::origData, 6, 0); // save old data
DWORD offset = ((DWORD)hook - (DWORD)funcPtr - 5); //((to)-(from)-5)
memcpy(&jmp[1], &offset, 4); // write address into jmp
memcpy(Hook::hookData, jmp, 6); // save hook data
WriteProcessMemory(GetCurrentProcess(), (LPVOID)funcPtr, jmp, 6, 0); // write jmp
VirtualProtect(funcPtr, 6, dwProtect, NULL); // reprotect
}
まあ、そうではありません。あなたがしていることに決して成功しない限り。そうすれば、あなたが開いたままのドアから他の人がプログラムをハックするのは面白いものになります。 –
@HansPassantでも、他の人が同じことをするのを止めることができます。つまり、VirtualProtect()にフックして、私の(または元の)バイトとVirtualProtect()を書き直しますか? – withkittens