Debugger - Packet back-trace?

08/17/2009 23:21 xUsername#1
Hallo,

da sich hier im KalOnline-Forum einige "bekannte" Gesichter befinden, habe ich mal eine Frage, die mich seit (ehrlich) Wochen nervt: Wie zür Hölle kann ich mit diversen Debuggern (z.B. IDE, Ollydbg) Funktionen "zurückverfolgen"?

Ich arbeite gerade an einem MMORPG und versuche die Verschlüsselungs-Routine der Send-Funktion (WS2_32) zu finden. Jedoch habe ich bisher nichts brauchbares gefunden.

Liebe Grüße,
hijax.
08/18/2009 13:05 kalhacker9000#2
Genau das frag ich mich auch.
Also um in Kal jetzt bestimmte Funktionen "zurückverfolgen" zu können, musste denk ich mal ollydbg an kal "ranhängen". Und das geht nur wenn das HS bypassed ist.

Ich hab mich mal gefragt wie die Funktion aus dem kalhackit ging (STRG+Left)....5andr0 hat mir dann gesagt, das ich kal reversen muss und die funktion suchen wo clicks in coordinaten umgewandelt werden und da ein hook reinhaun.

Also wer das erklären kann....ich schließ mich Hijax frage an ^^
08/18/2009 14:51 shad0wZ_#3
Die retn-adresse wird auf den Stack gelegt. Machst nen breakpoint auf deine Funktion, wenn der getriggered wird schaust auf das Stack Window von ollydbg und siehst halt "RETN TO engine.00412345 FROM engine.00419876" o.ä.
08/18/2009 16:47 xUsername#4
Hallo,

die Antworten sind mir schon bekannt. Ich rede außerdem nicht von KalOnline. ;)

Dann hatte ich das "Tracing" schon von vornerein "drauf". Leider frage ich mich, weshalb ich nicht zum gewünschten Ergebnis komme. :/ Ich finde einfach nicht den Call, bei dem das Packet verschlüsselt wird. Setzte ich einen BP auf das zweite "Return", dann lande ich bei einer Prozedur, die ständig aufgerufen wird. Ebenso habe ich mit "Con. BPs" gearbeitet - Fehlversuch.

Na gut - Vielleicht liegt's daran, dass's soweit unmöglich ist. Denn das Spiel existiert schon 'ne lange Zeit - nicht einer hat's bisher geschafft, die Packet-Routine zu knacken.

Ich hab' zu danken.

Liebe Grüße,
hijax.
08/18/2009 16:51 SKH#5
tach
welches game denn (wenn ich fragen darf^^)?
08/18/2009 17:13 syntex#6
Quote:
Originally Posted by shad0wZ_ View Post
Die retn-adresse wird auf den Stack gelegt. Machst nen breakpoint auf deine Funktion, wenn der getriggered wird schaust auf das Stack Window von ollydbg und siehst halt "RETN TO engine.00412345 FROM engine.00419876" o.ä.
kannst auch wenn du Runtime debuggst einfach auf NUM PAD MINUS drücken. Befolgt einfach das was shadowz geschrieben hat ;]

@edit,
du redest ja von nem anderem Spiel oder? Finde erstmal die Send die das Spiel z.B. für Chat oder Laufen nutzt und guck im Stack wo das packet her kommt. Dort wirst du auch die Verschlüssungs funktion finden oder eine SendBeforeCrypt funktion.
08/18/2009 21:12 xUsername#7
Quote:
Originally Posted by syntex View Post
kannst auch wenn du Runtime debuggst einfach auf NUM PAD MINUS drücken. Befolgt einfach das was shadowz geschrieben hat ;]

@edit,
du redest ja von nem anderem Spiel oder? Finde erstmal die Send die das Spiel z.B. für Chat oder Laufen nutzt und guck im Stack wo das packet her kommt. Dort wirst du auch die Verschlüssungs funktion finden oder eine SendBeforeCrypt funktion.
Alles schon getan, syntex. So 'n Kacknap bin ich nicht. :D

Natürlich habe ich ebenso die "-"-Taste genutzt. Ich habe auch, wie du geschrieben hast, zurückverfolgt, wo das Packet herkommt. Problematik ist, dass ich's nicht "handeln" kann. Der Call wird STÄNDIG aufgerufen. Stell's dir so vor:

while (true) {
if(ExisitiertPacket() == true) {
...
}
}

Und diesen Call mit 'nem Con.-BP zu überprüfen geht ebenso wenig. Sagen wir mal so: Ich hätte es gefunden, würde diese Schleife nicht existieren.

syntex? Andere Kontaktmöglichkeit?

Liebe Grüße,
hijax.
08/18/2009 21:36 syntex#8
Quote:
Originally Posted by hijax View Post
Alles schon getan, syntex. So 'n Kacknap bin ich nicht. :D

Natürlich habe ich ebenso die "-"-Taste genutzt. Ich habe auch, wie du geschrieben hast, zurückverfolgt, wo das Packet herkommt. Problematik ist, dass ich's nicht "handeln" kann. Der Call wird STÄNDIG aufgerufen. Stell's dir so vor:

while (true) {
if(ExisitiertPacket() == true) {
...
}
}

Und diesen Call mit 'nem Con.-BP zu überprüfen geht ebenso wenig. Sagen wir mal so: Ich hätte es gefunden, würde diese Schleife nicht existieren.

syntex? Andere Kontaktmöglichkeit?

Liebe Grüße,
hijax.
Nie gesagt das du ein kacknap bist ^^ bist einer der wenigen die es geschaft haben aufzusteigen und den rest hintersich zulassen , egal wieviel flame... dir gehts genauso am arsch vorbei wie mir :O

Ja kannst mich ja mal bei MSN adden :
[Only registered and activated users can see links. Click Here To Register...]
08/19/2009 05:24 shad0wZ_#9
Quote:
Originally Posted by hijax View Post
Leider frage ich mich, weshalb ich nicht zum gewünschten Ergebnis komme. :/ Ich finde einfach nicht den Call, bei dem das Packet verschlüsselt wird. Setzte ich einen BP auf das zweite "Return", dann lande ich bei einer Prozedur, die ständig aufgerufen wird. Ebenso habe ich mit "Con. BPs" gearbeitet - Fehlversuch.
Na weil das Packet nicht verschachtelt von der Verschlüsselungsfunktion aufgerufen wird. Schau halt bei allen Funktionen auf dem Stacktrace drumrum was sie machen, guck was überhaupt geschieht und setz eventuell einen Memory Breakpoint um rauszufinden wo der Buffer beschrieben bzw. geändert wird.
08/19/2009 23:08 xUsername#10
Hallo,

ich hab' mindestens 22 Returns zurückverfolgt... angeschaut... studiert, würde man meinen... Keine dieser Returns führt zu einem Ergebnis. Und weiter nach dem richtigen Aufruf zu suchen, wäre reine Zeitverschwendung. Es war einfach nur ein Versuch, etwas zu schaffen, was bisher keiner geschafft hat. ;D

Eben einer mehr - mir egal. :D

Liebe Grüße,
hijax.