Offensichtlich handelt es sich um ein Array von Elementen bestehend aus 4 Bytes, EDX ist der Index.Quote:
Hallo Leute, ich bin mal wieder da und habe in der WarRock.exe eine Sache gefunden:
call dword ptr [esi+edx*4+0000D0]
Kann mir einer sagen, was das genau macht und wie ich die Adresse von diesen "[EDX*4+ESI+14]" bekomme?
Du benutzt ein Offset du brauchst aber die ASM_NODELAY.Quote:
void ZeroDelay()
{
if(GetAsyncKeyState(VK_F7)&1)
{
const BYTE zero_delay_on[3] = { 0x90, 0x90, 0x90 };
{
DWORD dwProtect;
VirtualProtect((void*)(OFS_ZeroDelay), 3, PAGE_EXECUTE_READWRITE, &dwProtect);
memcpy((void*)(OFS_ZeroDelay), &zero_delay_on, 3);
VirtualProtect((void*)(OFS_ZeroDelay), 3, dwProtect, NULL);
}
}
} was is daran falsch? oder is die addresse falsch??
#define OFS_ZeroDelay 0x00103F8
Warum geht das nicht? Soll ich noch Structs posten?Quote:
FLOAT ZombieOPKPosX;
FLOAT ZombieOPKPosY;
FLOAT ZombieOPKPosZ;
DWORD dwMyMap = *(INT*)(dwPlayer+ADR_OFFSET_MAP);
if (CH_ZombieOPK==1)
{
/*Blind Bullet*/
ZombieOPKPosX = 3805.408936F;
ZombieOPKPosY = 104.5786362F;
ZombieOPKPosZ = 3798.268799F;
}
xPatch p_rArtillery1 ( ADR_Artillery1 ,(BYTE*)"\x90\x90" , 2 );
xPatch p_rArtillery2 ( ADR_Artillery2 ,(BYTE*)"\x90\x90" , 2 );
xPatch p_rArtillery3 ( ADR_Artillery3 ,(BYTE*)"\xEB" , 1 );
xPatch p_rArtillery4 ( ADR_Artillery4 ,(BYTE*)"\xEB" , 1 );
xPatch p_rArtillery5 ( ADR_Artillery5 ,(BYTE*)"\xEB" , 1 );
xPatch p_rArtillery6 ( ADR_Artillery6 ,(BYTE*)"\x90\x90\x90\x90\x90" , 5 );
xPatch p_rArtillery7 ( ADR_Artillery7 ,(BYTE*)"\xEB" , 1 );
xPatch p_rArtillery8 ( ADR_Artillery8 ,(BYTE*)"\x90\x90" , 2 );
xPatch p_rArtillery9 ( ADR_Artillery9 ,(BYTE*)"\x90\x90\x90\x90\x90\x90" , 6 );
xPatch p_rArtillery10 ( ADR_Artillery10 ,(BYTE*)"\xEB" , 1 );
if(RedLine.rASMCall.Artillery)
{
p_rArtillery1.Patch();
p_rArtillery2.Patch();
p_rArtillery3.Patch();
p_rArtillery4.Patch();
p_rArtillery5.Patch();
p_rArtillery6.Patch();
p_rArtillery7.Patch();
//p_rArtillery8.Patch();
p_rArtillery9.Patch();
}
else
{
p_rArtillery1.Restore();
p_rArtillery2.Restore();
p_rArtillery3.Restore();
p_rArtillery4.Restore();
p_rArtillery5.Restore();
p_rArtillery6.Restore();
p_rArtillery7.Restore();
//p_rArtillery8.Restore();
p_rArtillery9.Restore();
}
ADR_Artillery1 0x004DBC2F ADR_Artillery2 0x004DBE6B ADR_Artillery3 0x00567013 ADR_Artillery4 0x005670A6 ADR_Artillery5 0x00566DEE ADR_Artillery6 0x0054BCE6 ADR_Artillery7 0x00566F8D ADR_Artillery8 0x00567123 ADR_Artillery9 0x0054BCA8 ADR_Artillery10 0x00575BC7
Quote:
DWORD BeginJMPBack;
void __cdecl SingleStepDetectionEHS ()
{
__asm cmp eax,0x10501
__asm jmp detectiondone1
__asm cmp esi,0x10705
__asm jmp detectiondone2
__asm cmp ecx,0x10703
__asm jmp detectiondone2
detectiondone1:
__asm mov eax,0
detectiondone2:
__asm mov esi,0
detectiondone3:
__asm mov ecx,0
__asm jmp dword ptr [BeginJMPBack];
}
int __stdcall DetouringHackShield ( DWORD Detail , DWORD CrcCheck )
{
DWORD dwEhSvc = 0;
do{
dwEhSvc = (DWORD)GetModuleHandle("EhSvc.dll");
Sleep(1000);
} while(!dwEhSvc)
BeginJMPBack(dwEhSvc+0x71936);
DetourCreate((PBYTE)(dwEhSvc+0x71691),(LPBYTE)Sing leStepDetectionEHS,5);
__asm
{
push eax
push edx
mov eax,CrcCheck
mov edx,[eax+0xC]
mov Details,edx
pop edx
pop eax
}
if ( CrcCheck == 0x12 && Detail == 0x0A )
{
MemWrite((void*)dwEhSvc+0x09F10)(void*)"\xC2\x04\x 00",3);
}
return (1);
}
Usage :
DetouringHackShield ( 0x12, 0x0A );