Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- VOID *Salta(BYTE *src, CONST BYTE *dst, CONST INT len)
- {
- //BYTE *jmp = (BYTE *)malloc(len + 5);
- //BYTE *jmp = (BYTE *)VirtualAlloc(0, len + 5, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
- /*
- BYTE *jmp = new BYTE[len + 5];
- std::cout << "New jmp start : " << std::hex << static_cast<void*>(jmp) << std::endl;
- DWORD dwback;
- VirtualProtect(src, len, PAGE_READWRITE, &dwback);
- memcpy(jmp, src, len);
- jmp += len;
- jmp[0] = 0xE9;
- *(DWORD *)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
- src[0] = 0xE9;
- *(DWORD *)(src + 1) = (DWORD)(dst - src) - 5;
- for(INT i = 5; i < len; i++) src[i] = 0x90;
- VirtualProtect(src, len, dwback, &dwback);
- */
- BYTE *detour = (BYTE *)VirtualAlloc(0, len + 10, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
- DWORD dwback;
- VirtualProtect(src, len, PAGE_READWRITE, &dwback);
- memcpy(detour, src, len);
- src[0] = 0xE9;
- *(DWORD *)(src+1) = (DWORD)(detour - src) - 5; //Jmp from EndScene to detour
- VirtualProtect(src, len, dwback, &dwback);
- detour += len;
- detour[0] = 0xE9;
- *(DWORD *)(detour+1) = (DWORD)(dst - detour) - 5; //Jmp to hkEndScene
- detour += 5;
- detour[0] = 0xE9;
- *(DWORD *)(detour + 1) = (DWORD)(src + len); //Jmp to EndScene + 5
- std::cout << "src : " << std::hex << static_cast<void*>(src) << std::endl;
- std::cout << "detour : " << std::hex << static_cast<void*>(detour) << std::endl;
- std::cout << "new : " << std::hex << static_cast<void*>(src + 5) << std::endl;
- return(src + 5);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement