Hallo leute.
Ich habe ein Problem, und würde mal gerne fragen ob jemand mir weiterhelfen kann.
Ich habe für das spiel Dragonball Online die PacketSend Funktion gedetourt.
WSA_Send Hooken bringt nichts da packets verschlüsselt.
Jedenfalls hat die Funktion 3 Parameter.
"int PacketHeader(denke mal es ist der header) , int PacketBuffer, int PacketLen"
Klappt alles wie es soll.
Aber es gibt ein Problem.
Für jede Aktion ist ein anderer header.
Also ChatAktionen haben nen eigenen Header, Bewegungsaktionen usw auch.
Und nach einem Neustart sind die Header wieder anders.
Ich habe also keine Chance PacketHacks zu erstellen.
Lediglich einen Packet Editor habe ich erstellt.
Und jetzt wollte ich fragen, ob jemand ahnung hat wie ich mit dem Problem umgehen soll, und ob ich richtig in der annahme bin, dass es sich hierbei um den PacketHeader handelt, und nicht um eine Socket Id o.ä. (Bin nich der beste auf dem gebiet ^^)
EDIT: Wen es interessiert, hier die Pseudocode Version der Funktion.
PHP Code:
char __thiscall 00426B30(void *this, int PacketHeader, int PacketBuffer, int PacketLen)
{
int v4; // eax@1
void *v5; // edi@1
int v6; // esi@1
char v7; // ST27_1@2
int v9; // eax@6
int v10; // ebx@6
signed int v11; // [sp-Ch] [bp-38h]@9
signed int v12; // [sp-8h] [bp-34h]@9
int v13; // [sp-4h] [bp-30h]@9
void *v14; // [sp+14h] [bp-18h]@1
v5 = this;
v14 = this;
v4 = 00426DE0(PacketHeader);
v6 = v4;
if ( !v4 )
return 0;
v77a82250(v4 + 436);
v7 = *(_DWORD *)(v6 + 60) == 4;
v77a82210(v6 + 436);
if ( !v7 )
{
if ( !v57c0869(v6 + 520) )
{
(**(void (__thiscall ***)(_DWORD, _DWORD))v6)(v6, 1);
00426AA0(v5, v6);
}
return 0;
}
v9 = 0042C3C0();
v10 = 0;
if ( v9 )
v10 = 0042BE40(v9, PacketLen);
if ( !(unsigned __int8)0042C310() )
{
v13 = (int)"PushPacket Error, Packet wrong";
v12 = 1;
v11 = 280;
LABEL_10:
0043PacketBufferF0(v5, "CNtlNetImp_IOCP::PushPacket", v11, v12, v13);
if ( v10 )
(**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
00426FB0(v14);
return 0;
}
if ( 00438230(v10) )
{
v13 = (int)"PushPacket Error, in PostPacket()";
v12 = 1;
v11 = 288;
goto LABEL_10;
}
if ( v10 )
(**(void (__thiscall ***)(_DWORD, _DWORD))v10)(v10, 1);
00426FB0(v5);
return 1;
}
EDIT2: Scheiße das sieht irgendwie kompliziert aus. An Der Addresse, die ich für den PacketHeader/SocketID halte, stehen viele bytes, und 1 - 3 bytes ändern sich immer nach der reihe.
Also quasi ein Zeitmesser oder sowas.
Wenn ich auch nur einen Byte verändere kackt das game ab.