Moderator: MacroQuest Developers


Code: Select all
// 004F7D24: 55 push ebp
// 004F7D25: 8B EC mov ebp,esp
// 004F7D27: 8A 45 10 mov al,byte ptr [ebp+10h]
// 004F7D2A: 56 push esi
struct mckey {
union {
int x;
unsigned char a[4];
};
};
extern unsigned int extern_array[];
int memcheck(unsigned char *buffer, int count, struct mckey key)
{
unsigned int x, i;
unsigned int ecx;
unsigned int eax = ~key.a[0] & 0xff;
// 004F7D2B: F6 D0 not al
// 004F7D2D: 0F B6 C0 movzx eax,al
unsigned int edx = key.a[1] & 0xff;
// 004F7D30: 0F B6 55 11 movzx edx,byte ptr [ebp+11h]
// 004F7D34: 8B 04 85 6C 7B 5C mov eax,dword ptr [eax*4+005C7B6Ch]
// 00
eax = extern_array[eax];
// 004F7D3B: BE FF FF FF 00 mov esi,0FFFFFFh
// 004F7D40: 33 C6 xor eax,esi
eax ^= 0xffffff;
// 004F7D42: 57 push edi
// 004F7D43: 8B C8 mov ecx,eax
// 004F7D45: BF FF 00 00 00 mov edi,0FFh
// 004F7D4A: 23 CF and ecx,edi
ecx = eax & 0xff;
// 004F7D4C: 33 CA xor ecx,edx
ecx ^= edx;
// 004F7D4E: 0F B6 55 12 movzx edx,byte ptr [ebp+12h]
edx = key.a[2] & 0xff;
// 004F7D52: 8B 0C 8D 6C 7B 5C mov ecx,dword ptr [ecx*4+005C7B6Ch]
// 00
ecx = extern_array[ecx];
// 004F7D59: C1 F8 08 sar eax,8
// 004F7D5C: 23 C6 and eax,esi
eax = ((int)eax>>8) & 0xffffff;
// 004F7D5E: 33 C8 xor ecx,eax
ecx ^= eax;
// 004F7D60: 8B C1 mov eax,ecx
// 004F7D62: 23 C7 and eax,edi
// 004F7D64: 33 C2 xor eax,edx
eax = (ecx & 0xff) ^ edx;
// 004F7D66: C1 F9 08 sar ecx,8
ecx = (int)ecx >> 8;
// 004F7D69: 8B 14 85 6C 7B 5C mov edx,dword ptr [eax*4+005C7B6Ch]
// 00
edx = extern_array[eax];
// 004F7D70: 23 CE and ecx,esi
// 004F7D72: 33 D1 xor edx,ecx
edx ^= ecx & 0xffffff;
// 004F7D74: 0F B6 4D 13 movzx ecx,byte ptr [ebp+13h]
ecx = key.a[3] & 0xff;
// 004F7D78: 8B C2 mov eax,edx
// 004F7D7A: 23 C7 and eax,edi
// 004F7D7C: 33 C1 xor eax,ecx
// 004F7D7E: 8B 4D 08 mov ecx,dword ptr [ebp+8]
// 004F7D81: C1 FA 08 sar edx,8
// 004F7D84: 8B 04 85 6C 7B 5C mov eax,dword ptr [eax*4+005C7B6Ch]
// 00
eax = extern_array[(edx & 0xff) ^ ecx];
// 004F7D8B: 23 D6 and edx,esi
// 004F7D8D: 33 C2 xor eax,edx
eax ^= ((int)edx>>8) & 0xffffff;
// 004F7D8F: 8B 55 0C mov edx,dword ptr [ebp+0Ch]
// 004F7D92: 03 D1 add edx,ecx
// 004F7D94: 89 4D 10 mov dword ptr [ebp+10h],ecx
// 004F7D97: 3B CA cmp ecx,edx
// 004F7D99: 73 24 jae 004F7DBF
if (count == 0) return eax;
// 004F7D9B: 53 push ebx
// 004F7D9C: 8B 5D 10 mov ebx,dword ptr [ebp+10h]
// 004F7D9F: 8B C8 mov ecx,eax
// 004F7DA1: 23 CF and ecx,edi
// 004F7DA3: 0F B6 1B movzx ebx,byte ptr [ebx]
// 004F7DA6: 33 CB xor ecx,ebx
// 004F7DA8: C1 F8 08 sar eax,8
// 004F7DAB: 8B 0C 8D 6C 7B 5C mov ecx,dword ptr [ecx*4+005C7B6Ch]
// 00
// 004F7DB2: 23 C6 and eax,esi
// 004F7DB4: 33 C1 xor eax,ecx
// 004F7DB6: FF 45 10 inc dword ptr [ebp+10h]
// 004F7DB9: 39 55 10 cmp dword ptr [ebp+10h],edx
// 004F7DBC: 72 DE jb 004F7D9C
// 004F7DBE: 5B pop ebx
// 004F7DBF: 5F pop edi
// 004F7DC0: 5E pop esi
// 004F7DC1: F7 D0 not eax
// 004F7DC3: 5D pop ebp
// 004F7DC4: C3 ret
for (i=0;i<count;i++) {
x = (int)buffer[i] ^ (eax & 0xff);
eax = ((int)eax >> 8) & 0xffffff;
x = extern_array[x];
eax ^= x;
}
return ~eax;
}
Code: Select all
* Referenced by a CALL at Addresses:
|:00491C55 , :004FC988
|
:004FC7F1 56 push esi
:004FC7F2 57 push edi
:004FC7F3 8B7C240C mov edi, dword ptr [esp+0C]
:004FC7F7 B9C3A44E00 mov ecx, 004EA4C3
:004FC7FC B842C44C00 mov eax, 004CC442
:004FC801 57 push edi
:004FC802 2BC8 sub ecx, eax
:004FC804 51 push ecx
:004FC805 50 push eax
:004FC806 E819B5FFFF call 004F7D24
:004FC80B 8BF0 mov esi, eax
:004FC80D 8BC7 mov eax, edi
:004FC80F F7D0 not eax
:004FC811 33F0 xor esi, eax
:004FC813 B9AA2B4700 mov ecx, 00472BAA
:004FC818 B869874600 mov eax, 00468769
:004FC81D 57 push edi
:004FC81E 2BC8 sub ecx, eax
:004FC820 51 push ecx
:004FC821 50 push eax
:004FC822 E8FDB4FFFF call 004F7D24Code: Select all
pTarget = EQADDR_TARGET;
*pTarget = pSpawnClosest;