Huhu, hier habt ihr die Packet offsets für Disconnects Source für ALLE server ;) (auch P-Server :))
(c) by Disconnect
[/PHP]
Das war die Function zum Suchen...
und so benutzt ihr das dann :)
PHP Code:
DWORD SearchPattern(char* pattern,DWORD start_offset ,DWORD ende)
{
DWORD offset=start_offset;
DWORD start=offset;
DWORD backoffset=0;
DWORD size =strlen(pattern)-1;
DWORD foundoffset=0;
char * pEnd=pattern;
while(1)
{
char &myposition=*(char*)offset;
if ((pEnd[1]!='x'))
{
char temp=(char)strtoul(pEnd, &pEnd, 0x10);
if (temp==myposition)
{
if (foundoffset==0)
{
foundoffset=offset;
}
}
else
{
pEnd=pattern;
if (foundoffset != 0)
offset=foundoffset;
foundoffset=0;
}
}
else
{
pEnd=&pEnd[2];
}
offset++;
if (((DWORD)pEnd-(DWORD)pattern>=size)||(offset>=ende))
break;
}
return foundoffset;
}
PHP Code:
[php]
DWORD Offset1;
DWORD Offset2;
DWORD Offset3;
DWORD Offset4;
PHP Code:
BYTE *EncryptionKey = NULL;
void SendPacket(BYTE *src, DWORD PacketLength)
{
if (EncryptionKey != NULL)
{
void (__fastcall *addSecurityByte)(void *) = (void (__fastcall *)(void *))Offset1;
void *temp = (void *)*((DWORD *)0x005F4FC8);
BYTE *Backup = *(BYTE **)((DWORD)temp + 0x30);
DWORD Backup2 = *(DWORD *)((DWORD)temp + 0x38);
*(BYTE **)((DWORD)temp + 0x30) = src;
*(DWORD *)((DWORD)temp + 0x38) = PacketLength;
(*addSecurityByte)(temp);
*(BYTE **)((DWORD)temp + 0x30) = Backup;
*(DWORD *)((DWORD)temp + 0x38) = Backup2;
void (*EncryptMyPacket)(BYTE *, BYTE *, BYTE *, DWORD) = (void (__cdecl *)(BYTE *, BYTE *, BYTE *, DWORD))(Offset2 - 5);
BYTE *EncryptedPacket = new BYTE[1000];
(*EncryptMyPacket)(EncryptedPacket, src, EncryptionKey, PacketLength+1);
DWORD FinalPacketLength = ((PacketLength + 1) % 8 == 0) ? (PacketLength + 1) : ((((PacketLength + 1) / 8) + 1) * 8);
send(*(SOCKET *)((DWORD)temp + 0x244), (const char *)EncryptedPacket, FinalPacketLength, 0);
delete EncryptedPacket;
}
}
PHP Code:
__declspec(naked) void DetouredFunction()
{
BYTE *dst;
BYTE *src;
BYTE *key;
DWORD len;
__asm
{
pushad
pushfd
mov ebp, esp
mov eax, [esp+0x28]
mov dst, eax
mov eax, [esp+0x2C]
mov src, eax
mov eax, [esp+0x30]
mov key, eax
mov eax, [esp+0x34]
mov len, eax
}
//Hier callt ihr am besten eine seperate Funktion
__asm
{
popfd
popad
sub esp, 0x08
push ebx
push esi
jmp Offset2
}
}
void HookInternalCall()
{
*(BYTE *)(Offset2) = 0xE9;
*(DWORD *)(Offset2 + 1) = (DWORD)&DetouredFunction - Offset2 - 5;
Offset2 += 5;
}
PHP Code:
BYTE *dst;
BYTE *src;
BYTE *key;
DWORD len;
DWORD ReturnOffset;
__declspec(naked) void DetouredFunction2()
{
__asm
{
pushad
pushfd
mov eax, [esp+0x24]
mov ReturnOffset, eax
mov eax, label1
mov [esp+0x24], eax
mov eax, [esp+0x28]
mov dst, eax
mov eax, [esp+0x2C]
mov src, eax
mov eax, [esp+0x30]
mov key, eax
mov eax, [esp+0x34]
mov len, eax
popfd
popad
mov eax, [esp+0x10]
sub esp, 0x08
jmp Offset3
}
label1:
__asm
{
pushad
pushfd
}
//Hier callt ihr am besten eine seperate Funktion
__asm
{
popfd
popad
jmp ReturnOffset
}
}
void HookInternalCall2()
{
*(BYTE *)(Offset3) = 0xE9;
*(DWORD *)(Offset3 + 1) = (DWORD)&DetouredFunction2 - Offset3 - 5;
Offset3 += 7;
}
PHP Code:
BYTE *Packet;
DWORD PacketLength;
__declspec(naked) void DetouredFunction3()
{
__asm
{
pushad
pushfd
mov edx, [ecx+0x20]
mov esi, [ecx+0x14]
add esi, edx
mov Packet, esi
mov eax, [esp+0x28]
mov PacketLength, eax
}
//Hier callt ihr am besten eine seperate Funktion
__asm
{
popfd
popad
mov eax, ecx
mov edx, [eax+0x20]
jmp Offset4
}
}
void HookInternalCall3()
{
*(BYTE *)(Offset4) = 0xE9;
*(DWORD *)(Offset4 + 1) = (DWORD)&DetouredFunction3 - Offset4 - 5;
Offset4 += 5;
}
und so benutzt ihr das dann :)
PHP Code:
printf("[0x%6d] Found Offset1 \b",Offset1=SearchPattern("8A 81 5C 02 00 00 84",0x00400000,0x007FFFFF));
printf("[0x%6d] Found Offset2 \b",Offset2=SearchPattern("83 EC 08 53 56 57 8B 7C 24 24 8B C7 25 07 00 00 80 79 05 48 83 C8 F8 ",0x00400000,0x007FFFFF));
printf("[0x%6d] Found Offset3 \b",Offset3=SearchPattern("8B 44 24 10 83 EC 08 8B",0x00400000,0x007FFFFF));
printf("[0x%6d] Found Offset4 \b",Offset4=SearchPattern("8B C1 8B 50 20 8B 48 1C",0x00400000,0x007FFFFF));