PacketHeader Problem

06/27/2012 06:47 Crack-wtf#1
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.


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.
06/28/2012 02:21 bloodx#2
Ich glaube nicht dass Header + Buffer INT sind oO
und PacketHeader die sich ändern? Auch eher nicht.
06/28/2012 09:30 Crack-wtf#3
Naja es scheint sowas wie Funktionen für Folgende Server zu geben.
- Login Server
- World Server
- Chat Server

Ich habe durch bisschen Reversen rausfinden können, dass die zeit überprüft wird, welche in diesen Bytes steht.

Habe es aber hinbekommen.

Der Code ist zwar unsauber, aber wens Interessiert.

(Ps: Bei der ChatFunktion befindet sich ein Konstanter byte, welcher beim WorldServer nicht vorhanden ist. Durch diesen Filtere ich es. Und beim LoginServer checke ich 2 Addressen, welche 1 sind wenn man Eingeloggt, und im WorldServer ist. Wenn das der Fall ist, ist der LoginServer nicht mehr da, also im RAM.)

06/28/2012 16:39 Tyrar#4
Quote:
Originally Posted by bloodx View Post
Ich glaube nicht dass Header + Buffer INT sind oO
und PacketHeader die sich ändern? Auch eher nicht.
Header und Buffer können im pseudocode durchaus INT sein, vorallem da es auch nur adressen sind :o

@TE: wenn sich die header allerdings ändern ist das eindeutig falsch was du versuchst ;)
06/28/2012 16:51 Crack-wtf#5
Jo alles außer PacketLen waren Addressen.

Habe es aber wie gesagt schon geklärt.

Aber mal eine OT frage.

Weis jemand wieso mein Injector wenn er vor dem Spiel Gestartet wird, die dll nicht injecten kann?

Es steht zwar dass sie Injectet wurde, aber mein Hook wurde nicht gesetzt ;O
06/28/2012 17:37 Omdi#6
Quote:
Originally Posted by Crack-wtf View Post
Jo alles außer PacketLen waren Addressen.

Habe es aber wie gesagt schon geklärt.

Aber mal eine OT frage.

Weis jemand wieso mein Injector wenn er vor dem Spiel Gestartet wird, die dll nicht injecten kann?

Es steht zwar dass sie Injectet wurde, aber mein Hook wurde nicht gesetzt ;O
Warte am Besten 500ms bis du den Hook setzt.
06/28/2012 17:54 tnd0#7
An 32/64bit hast du gedacht? Ansonsten kannst du keine .net lib in einen native prozess laden bzw. musst vorher dann das .net framework dareinladen und initialisieren. Andersum sollte es ohne weiteres gehen. Außerdem sollte man entweder die originaldatei patchen, so dass diese deine DLL automatisch von selbst lädt, oder, wenn das Programm gestartet ist und der MainThread sich im interruptable state befindet via CreateRemoteThread laden. Wenn du einen fertigen Injector benutzt, macht der warscheinlich genau das. Wenn dein Zielprogramm sich gegen DLLInjections wehrt, hat es vermutlich LoadModule oder LoadLibrary(Ex) von sich selbst gehookd oder sogar nach start einfach nil-gepointert.
06/28/2012 18:10 Crack-wtf#8
Ist jetzt kein Problem.
Ich habe einfach ne Message eingebaut dass man erst das game starten soll, und dann das tool.

Ist nich schlimm für nen Packet Editor.