Code:
void* BypassDetour( void* pvAddress, const void* pvBuffer, size_t stLen )
{
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery( pvAddress, &mbi, sizeof( mbi ) );
VirtualProtect( mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &mbi.Protect );
void* pvRetn = memcpy( pvAddress, pvBuffer, stLen );
VirtualProtect( mbi.BaseAddress, mbi.RegionSize, mbi.Protect, &mbi.Protect );
FlushInstructionCache( GetCurrentProcess( ), pvAddress, stLen );
return pvRetn;
}
DWORD WINAPI GameKick()
{
DWORD EHSvc = 0;
do{
EHSvc = (DWORD)GetModuleHandleA("Ehsvc.dll");
Sleep(100);
}while(!EHSvc);
BypassDetour((void*)EHSVC::ADR_GAMEKICK,(PBYTE)"\xEB",1);
BypassDetour((void*)0x45BE64,(PBYTE)"\xEB",1);//CRC PATCH ERROR
BypassDetour((void*)0x4DCE84,(PBYTE)"\xEB",1);//SELF CRC
return 1;
}
DWORD WINAPI Bypass()
{
DWORD hEhSvc = 0;
do{
hEhSvc = (DWORD)GetModuleHandleA("Ehsvc.dll");
Sleep(100);
}while(!hEhSvc);
//prevent HS detecting
BypassDetour((void*)(hEhSvc+0x709F1),(PBYTE)"\xC2\x10\x00", 3);
BypassDetour((void*)(hEhSvc+0x09B30),(PBYTE)"\xC2\x04\x00", 3);
BypassDetour((void*)(hEhSvc+0x2F0A0),(PBYTE)"\xC2\x04\x00", 3);
BypassDetour((void*)(hEhSvc+0x15030),(PBYTE)"\xC2\x04\x00", 3);
BypassDetour((void*)(hEhSvc+0x71E7C),(PBYTE)"\xC2\x04\x00", 3);
BypassDetour((void*)(hEhSvc+0x7275D),(PBYTE)"\xC2\x04\x00", 3);
BypassDetour((void*)(hEhSvc+0x6B3B2),(PBYTE)"\xC3", 1);
BypassDetour((void*)(hEhSvc+0x12440),(PBYTE)"\xC3", 1);
//prevent HS starting cicle for monotoring
BypassDetour((void*)(hEhSvc+0x121A1),(PBYTE)"\x90\x90\x90\x90\x90\x90", 6);
BypassDetour((void*)(hEhSvc+0x0839A),(PBYTE)"\xE9\xC9\x00\x00\x00", 5);
//prevent HS jmp to code detect
BypassDetour((void*)(hEhSvc+0x729F3),(PBYTE)"\x90\x90", 2);
BypassDetour((void*)(hEhSvc+0x26867),(PBYTE)"\x90\x90", 2);
BypassDetour((void*)(hEhSvc+0x15530),(PBYTE)"\x90\x90", 2);
BypassDetour((void*)(hEhSvc+0x2CFAA),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0x12FCA),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0xA3204),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0x8AFF5),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0x0A0A8),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0x6A99C),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0x18097),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0x4FA4F),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0x4FB36),(PBYTE)"\xEB", 1);
BypassDetour((void*)(hEhSvc+0x4FC24),(PBYTE)"\xEB", 1);
//prevent HS blocking code
BypassDetour((void*)(hEhSvc+0x3372F),(PBYTE)"\x31", 1);
BypassDetour((void*)(hEhSvc+0x3626E),(PBYTE)"\x31", 1);
BypassDetour((void*)(hEhSvc+0x341CC),(PBYTE)"\x31", 1);
BypassDetour((void*)(hEhSvc+0x9D6AE),(PBYTE)"\x31", 1);
BypassDetour((void*)(hEhSvc+0x357A0),(PBYTE)"\x31", 1);
//prevent HS unhook code
BypassDetour((void*)(hEhSvc+0x7DFCD),(PBYTE)"\xEB",1);
BypassDetour((void*)(hEhSvc+0x7DFF7),(PBYTE)"\xEB",1);
BypassDetour((void*)(hEhSvc+0x7629A),(PBYTE)"\xEB",1);
return 1;
}
void BypassLoop(void) {
for(;;) {
Bypass();
Sleep(10000);
}
}
void GameKickL(void) {
for(;;) {
GameKick();
Sleep(1000);
}}