Code:
#include <windows.h>
bool bWallHack=false;
bool bNoRecoil=false;
bool bNameTags=false;
unsigned char *playerFlag = (unsigned char*)0x00445480;
unsigned char xwallhackpatch[2] = { 0x6a, 0x12 }; // push 12, patched
unsigned char owallhackpatch[2];// copy unpatched
unsigned long fireRecoil = (unsigned long)0x00457D2E;
unsigned char oRecoilPatch[5];
unsigned long xTeamcheck = (unsigned long)0x0042E1AC; //Orig 0x0F 0x85 0xCE 0x00 0x00 0x00
unsigned long xVisible = (unsigned long)0x0042E1CE; //Orig 0x74 0x25
unsigned char oTeamCheckPatch[6] = { 0x0F, 0x85, 0xCE, 0x00, 0x00, 0x00 };
unsigned char oVisiblePatch[2] = { 0x74, 0x25 };
void doWallhack(void)
{
unsigned long orig;
if(bWallhack==false)
{
VirtualProtect(playerFlag, sizeof(xwallhackpatch), PAGE_EXECUTE_READWRITE, &orig);
memcpy(playerFlag, &xwallhackpatch, sizeof(xwallhackpatch));
VirtualProtect(playerFlag, sizeof(xwallhackpatch), orig, &orig);
bWallHack=true;
}
else
{
VirtualProtect(playerFlag, sizeof(owallhackpatch), PAGE_EXECUTE_READWRITE, &orig);
memcpy(playerFlag, &owallhackpatch, sizeof(owallhackpatch));
VirtualProtect(playerFlag, sizeof(owallhackpatch), orig, &orig);
bWallHack=false;
}
}
void doNoRecoil(void)
{
if(bNoRecoil==false)
{
//nop 5 bytes @ fireRecoil
bNoRecoil=true;
}
else
{
VirtualProtect(fireRecoil, sizeof(oRecoilPatch), PAGE_EXECUTE_READWRITE, &orig);
memcpy(fireRecoil, &oRecoilPatch, sizeof(oRecoilPatch));
VirtualProtect(fireRecoil, sizeof(oRecoilPatch), orig, &orig);
bNoRecoil=false;
}
}
void doNametags(void)
{
if(bNameTags==false)
{
//nop 6 bytes @ xTeamCheck
//nop 2 bytes @ xVisible
}
else
{
VirtualProtect(xTeamcheck, sizeof(oTeamCheckPatch), PAGE_EXECUTE_READWRITE, &orig);
memcpy(xTeamcheck, &oTeamCheckPatch, sizeof(oTeamCheckPatch));
VirtualProtect(xTeamcheck, sizeof(oTeamCheckPatch), orig, &orig);
VirtualProtect(xVisible, sizeof(oVisiblePatch), PAGE_EXECUTE_READWRITE, &orig);
memcpy(xVisible, &oVisiblePatch, sizeof(oVisiblePatch));
VirtualProtect(xVisible, sizeof(oVisiblePatch), orig, &orig);
}
}
void InitBackups(void)
{
unsigned long orig;
VirtualProtect(playerFlag, sizeof(owallhackpatch), PAGE_EXECUTE_READWRITE, &orig);
memcpy(owallhackpatch, playerFlag, sizeof(owallhackpatch));
VirtualProtect(playerFlag, sizeof(owallhackpatch), orig, &orig);
VirtualProtect(fireRecoil, sizeof(oRecoilPatch), PAGE_EXECUTE_READWRITE, &orig);
memcpy(oRecoilPatch, fireRecoil, sizeof(oRecoilPatch));
VirtualProtect(fireRecoil, sizeof(oRecoilPatch), orig, &orig);
}
void HackThread(void)
{
InitBackups();
while(1)
{
if(GetAsyncKeyState(VK_NUMPAD0)&1) // Panic key
{
DisableAll();
}
if(GetAsyncKeyState(VK_NUMPAD1)&1)
{
doWallhack();
}
if(GetAsyncKeyState(VK_NUMPAD2)&1)
{
doNametags();
}
if(GetAsyncKeyState(VK_NUMPAD3)&1)
{
doNoRecoil();
}
Sleep(1);
}
}
BOOL __stdcall DllMain(HMODULE hinst, DWORD reason, void *useless)
{
DisableThreadLibraryCalls(hinst);
if(reason == 1)
{
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)HackThread, 0, 0, 0);
}
return TRUE;
}
I've removed some parts of the code(patch util related) since the patching utility I used is not mine.