Unlimited Ammo
Code:
#define ADR_UNLAMMO1 0xAFDAFC
#define ADR_UNLAMMO2 0x98BCC8
DWORD AmmoCall;
_declspec(naked)void iAsm_UnlAmmo_Patch()
{
__asm
{
mov eax,dword ptr ds:[ADR_UNLAMMO1]
test eax,eax
jmp loc_retn
push 8
call AmmoCall
add esp,4
test eax,eax
je loc_xor
mov dword ptr ds:[eax],ADR_UNLAMMO2
mov word ptr ds:[eax+4],0
mov dword ptr ds:[ADR_UNLAMMO1],eax
retn
loc_xor:
xor eax,eax
mov dword ptr ds:[ADR_UNLAMMO1],eax
loc_retn:
retn
}
}
AmmoCall = 0x803ED4;
void *DetJmp(BYTE *src, const BYTE *dst, const int len)
{
BYTE *jmp =(BYTE*)malloc(len+5);
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);
return(jmp-len);
}
Code:
if(unlAmmo == 1)
{
AmmoCall = 0x803ED4;
DetJmp((BYTE*)ADR_UAMMO,(BYTE*)iAsm_UnlAmmo_Patch,5);
}
Hans211(Detour)



