Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- By : unCoder
- WebSite www.dev-point.com
- */
- #include <Windows.h>
- #define SIZE 6
- typedef BOOL (WINAPI *pTerminateProcess)(HANDLE, UINT);
- BOOL WINAPI MyTerminateProcess(HANDLE, UINT);
- void BeginRedirect(LPVOID);
- pTerminateProces pOrigMBAddress = NULL;
- BYTE oldBytes[SIZE] = {0}; // بايت يحمل البآيتات الاصلية لكي نتمكن من عمل unHook
- BYTE JMP[SIZE] = {0}; // متغير يحمل بتات القفزة
- DWORD oldProtect; // دي ورد ليحمل حماية ادرس الدالة بعد تغييره للقفزة
- DWORD myProtect = PAGE_EXECUTE_READWRITE;
- INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
- {
- switch(Reason)
- {
- case DLL_PROCESS_ATTACH:
- pOrigMBAddress = (pTerminateProcess)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "TerminateProcess"); // جلب ادرس الدالة وإسناده للبوينتر
- if(pOrigMBAddress != NULL)
- BeginRedirect(MyTerminateProcess); بدأ تغيير ادرس الدالة إلى الفنكشن الخآص بنا
- break;
- case DLL_PROCESS_DETACH: // if library unload
- memcpy(pOrigMBAddress, oldBytes, SIZE); // إرجآع ادرس الدالة الأصلي
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- break;
- }
- return TRUE;
- }
- void BeginRedirect(LPVOID newFunction)
- {
- ///// القفزة JMP x x x x RET
- BYTE tempJMP[SIZE] = {0xE9, 0x90, 0x90, 0x90, 0x90, 0xC3};
- ///// نسخ البايتات للمتغير الجديد
- memcpy(JMP, tempJMP, SIZE);
- // حساب حجم القفزة = ادرس الفنكشن الجديد - ادرس الدالة - 5
- DWORD JMPSize = ((DWORD)newFunction - (DWORD)pOrigMBAddress - 5);
- // تغيير حماية ادرس الدالة لنتمكن من الكتابة والقرآءة منه
- VirtualProtect((LPVOID)pOrigMBAddress, SIZE, PAGE_EXECUTE_READWRITE, &oldProtect);
- // حفظ ادرس الدالة في متغير لنتمكن من عمل unHook
- memcpy(oldBytes, pOrigMBAddress, SIZE);
- // وضع الادرس اللذي سنقفز اليه وتم حسابه في الأعلى JMP [ x x x x ] RET
- memcpy(&JMP[1], &JMPSize, 4);
- // تغيير ادرس الدالة لأدرس القفزة اللتي ستؤدي للفنكشن الخىص بنا
- memcpy(pOrigMBAddress, JMP, SIZE);
- // إرجاع الحماية القديمة
- VirtualProtect((LPVOID)pOrigMBAddress, SIZE, oldProtect, NULL);
- }
- BOOL WINAPI MyTerminateProcess(HANDLE hProcess,UINT uExitCode)
- {
- // ننفذ مانريد ->
- MessageBoxA(0, "Can't Terminate", "Hooked",MB_ICONERROR);
- return false; // إرجاع قيمة
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement