簡介信息: Windows 7 64位。 C++。 64位應用程序和DLL的。沒有MS Detours掛鉤。API無掛鉤掛鉤
問題:我一直在努力解決在Windows中演示掛鉤的工作示例問題。大多數TUTS在那裏似乎是在時間,其中32位Windows XP是唯一的操作系統已經寫......因爲我已經克服的瞭解64位的障礙,成功注入的DLL。我在這個知識之旅中的下一個步驟是掛鉤。 爲了符合這個話題的懷舊情緒,MS的Detours不支持64位(免費),我肯定不會爲任何東西支付10,000美元。所以我追求this tutorial中的傳統方法。
這嘖嘖是真棒,但我有一個小麻煩了解這一細分市場:
void BeginRedirect(LPVOID newFunction)
{
BYTE tempJMP[SIZE] = {0xE9, 0x90, 0x90, 0x90, 0x90, 0xC3};
memcpy(JMP, tempJMP, SIZE);
DWORD JMPSize = ((DWORD)newFunction - (DWORD)pOrigMBAddress - 5);
VirtualProtect((LPVOID)pOrigMBAddress, SIZE,
PAGE_EXECUTE_READWRITE, &oldProtect);
memcpy(oldBytes, pOrigMBAddress, SIZE);
memcpy(&JMP[1], &JMPSize, 4);
memcpy(pOrigMBAddress, JMP, SIZE);
VirtualProtect((LPVOID)pOrigMBAddress, SIZE, oldProtect, NULL);
}
特別,我與tempJMP字節掙扎,所有的memcpy的事情。我有一個記事本的InsertDate()函數的地址,我想劫持,但我不知道在哪裏瞄準它...這是新函數的地址嗎?或者它不是相對的? Idk,我只是在尋找一些指針。