यहां कोड का कुछ मानक टुकड़ा है जहां हम हुक को हमारे ब्याज के कार्य की शुरुआत में कुछ बाइट्स को पुनः लिखते हैं। मेरा सवाल है: हमें पुनः लिखने वाली स्मृति के टुकड़े को दोबारा क्यों दोहराना पड़ता है? क्या हम इसे 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
}
ठीक है, आप नहीं करते हैं। जब तक आप जो भी करते हैं उस पर आप कभी सफल नहीं होते। इससे आपके द्वारा खोले गए दरवाजे के माध्यम से कार्यक्रम को हैक करने के लिए दूसरों के लिए यह बहुत दिलचस्प हो जाएगा। –
@ हंसपैसेंट, लेकिन दूसरों को ऐसा करने से रोकने के लिए क्या रोक सकता है, अर्थात् इसमें वर्चुअलप्रोटेक्ट(), मेरे (या मूल) बाइट्स और वर्चुअलप्रोटेक्ट() को फिर से लिखना? – withkittens