[Tutorial] Multiclient Howto

03/24/2009 21:28 Adroxxx#1
Multiclient Howto
Einen Multiclient zu erstellen ist recht einfach, trotzdem oftmals unmöglich für Anfänger. Ganz einfach weil sie keinen Ansatzpunkt finden. In diesem Tutorial zeige ich euch wie man einen Multiclient erstellen kann und diese Technik lässt sich auf so ziemlich jedes Game anwenden.


#Inhalt:
[-]Voraussetzungen & Programme
[-]Theorie
[-]Patching
[-]Nachwort



[-]Voraussetzungen & Programme

Voraussetzungen:
  • Grundlegende Erfahrung im Umgang mit Debuggern
  • Grundlegende ASM Kenntnisse
  • Menschenverstand


Programme:
Als Opfer Spiel nehme ich in diesem Beispiel Darkages. Das ist ein 2D MMO. Ihr könnt aber auch andere Spiele nehmen. Aber ich bezieh mich jetzt nur darauf :P Ihr könnt natürlich auch einen anderen Debugger benutzten... aber unter Win gibts keinen besseren als Olly. An die Oldschooler: Yes softice ist besser aber problematisch unter win xp :P





[-]Theorie

Um einen Multiclient zu erstellen, müssen wir erstmal wissen, was genau im Programm die Instanzen limitiert. Und das zauberwort heißt hier CreateMutex()

Auszug aus der MSDN:

Quote:
HANDLE WINAPI CreateMutex(
__in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes,
__in BOOL bInitialOwner,
__in_opt LPCTSTR lpName
);
CreateMutex befindet sich in der Kernel32.dll / lib. Außerdem nicht wundern , je nachdem ob Unicode oder ANSI kann die Funktion CreateMutexA oder CreateMutexW heißen.
Außerdem in seltenen Fällen noch CreateProcess:

Quote:
BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
Das wichtige bei CreateProcess ist bInheritHandles

Quote:
Originally Posted by MSDN
bInheritHandles [in]

If this parameter TRUE, each inheritable handle in the calling process is inherited by the new process. If the parameter is FALSE, the handles are not inherited. Note that inherited handles have the same value and access rights as the original handles.


[-]Patching

So genug Theorie, jetzt gehts los! Zuerst öffnen wir Darkages.exe in Ollydbg.
Dann drücken wir STRG+A oder machen einen Rechtsklick ins CPU Fenster und klicken auf Analyze -> Analyze Code. Besser noch wenn ihr das Analyze This! Plugin habt, dann klickt ihr da drauf.

[Only registered and activated users can see links. Click Here To Register...]

Dann machen wir wieder einen Rechtsklick -> Search for -> All intermodular calls.
[Only registered and activated users can see links. Click Here To Register...]

Nun sehen wir alle API Calls. Leider etwas durcheinander, aber das bekommen wir auch noch hin :)
Rechtsklick -> Sort by -> Destination.
[Only registered and activated users can see links. Click Here To Register...]

So nun müssen wir CreateMutex(W/A) suchen. Da wir wissen das sich die Funktion in der Kernel32 befindet, wird die suche einfach.
Und wir haben 2 CreateMutexA Funktionen und 3 CreateProcessA Funktionen.
[Only registered and activated users can see links. Click Here To Register...]

Wir doppelklicken nun die erste CreateMutexA Funktionen und kommen dahin:

[Only registered and activated users can see links. Click Here To Register...]

Wir sehen nun an welcher stelle CreateMutex gecallt wird.
PHP Code:
00518290   .  6A 00         PUSH 0                                   ; /MutexName NULL
00518292   
.  6A 00         PUSH 0                                   ; |InitialOwner FALSE
00518294   
.  6A 00         PUSH 0                                   ; |pSecurity NULL
00518296   
.  FF15 8CD26800 CALL DWORD PTR DS:[<&KERNEL32.CreateMute>; \CreateMutexA 
Wir können dort auch sehr schön die CreateMutex Struktur erkennen, wie sie in der MSDN beschrieben wurde.

Dann gehen wir etwas weiter runter in den Code. Dann sehen wir wie irgendwas verschoben wird.

PHP Code:
0051829C   .  8B4D FC           MOV ECX,DWORD PTR SS:[EBP-4]
0051829F   .  8941 04           MOV DWORD PTR DS:[ECX+4],EAX
005182A2   
.  8B55 FC           MOV EDX,DWORD PTR SS:[EBP-4
Besonders als Anfänger, weiß man überhaupt nicht was dort passiert. Das muss man auch nicht unbedingt. Das kommt mit der Zeit, aber schauen wir mal noch ein bisschen tiefer.
PHP Code:
005182A5   .  837A 04 00        CMP DWORD PTR DS:[EDX+4],0
005182A9   
.  75 0E             JNZ SHORT 005182B9 
Dort sehen wir das irgendwas mit 0 verglichen wird, und dann folgt ein JNZ. ( Jump if Not Zero)
Also springt er nur wenn der Vergleich nicht 0 ist. Es ist also ein Conditional Jump. Es hat eine Bedingung.
Dann schauen wir wo wir hinspringen.
[Only registered and activated users can see links. Click Here To Register...]

Wie wir sehen, überspringt er die
PHP Code:
005182B5   . /EB 53             JMP SHORT 0051830A
005182B7   
. |EB 51             JMP SHORT 0051830A 
Und diese springen dann noch weiter.

Lange Rede kurzer Sinn, unser Badboy ist das JNZ. Wir wollen das er immer springt (Unconditional Jump).
Wir klicken also auf das:
PHP Code:
JNZ SHORT 005182B9 
und drücken Leertaste. Wir können aber auch einen Doppelklick machen.
Dann ändern wir das JNZ in JMP und klicken Assemble.

[Only registered and activated users can see links. Click Here To Register...]


So wir haben es geschafft. Oder doch nicht? Ach stimmt, es gab ja 2 CreateMutex und noch 3 CreateProcess die uns Probleme machen könnte.

Also minimieren wir das CPU Fenster und gehen nochmal in das "Found Intermodular calls" - Fenster. Dann machen wir einen Doppelklick auf das 2te CreateMutex und landen hier:

[Only registered and activated users can see links. Click Here To Register...]

Und was sehen unsere Augen da? Wieder ein JNZ!
Ein Doppelklick da drauf, JNZ -> in JMP umändern , Assemble klicken und Fertig.

Aber da waren ja noch die CreateProcess Funktionen. Wir gehen also nochmals in das Intermodular Calls Fenster und machen einen Doppelklick auf das erste CreateProcess. Und wir kommen dahin:
[Only registered and activated users can see links. Click Here To Register...]

Wir erinnern uns, das wichtige war bInheritHandles. Aber es ist hier auf FALSE.
PHP Code:
00535E98  |.  6A 00             PUSH 0                                   ; |InheritHandles FALSE 
Probleme würde es nur machen wenn dort PUSH 1 stehen würde. Wenn das der Fall wäre, müssten wir nur einen Doppelklick da drauf machen und aus dem PUSH 1 ein PUSH 0 machen.

Dann überprüfen wir noch die anderen CreateProcess Funktionen. Aber in unserem Fall, ist überall der bInheritHandles FALSE!

So nun machen wir einen Rechtsklick -> Copy to executeable -> All modifications.
[Only registered and activated users can see links. Click Here To Register...]

Copy All!

[Only registered and activated users can see links. Click Here To Register...]

Dann machen wir einen Rechtsklick -> Save to file

[Only registered and activated users can see links. Click Here To Register...]

Und benennen es erstmal Darkages[fix].exe. Nicht das ihr eure Orginal Datei überschreibt und es funktioniert nicht. Dann starten wir Darkages[fix].exe zwei mal . Und es sollten sich auch 2 Clients öffnen.

Dann könnt ihr euren orginalen Client backupen, und die Darkages[fix].exe ind Darkages.exe umbennen.


[-]Nachwort

Puh. Ist ja doch etwas ausführlicher geworden, als ich mir gedacht habe :)
Ihr werdet in so ziemlich allen Spielen auf CreateMutex und CreateProcess stoßen. Nun wisst ihr auch wie man diese umschreibt, damit man mehrere Clients starten kann.
Probleme auf die ihr stoßen könnt ist das wenn ihr auf CreateMutex doppelklickt und an diese Stelle springt auf den ersten Blick kein JNZ findet. Versucht den Code so gut wie möglich zu verstehen, manchmal ist es etwas weiter unten im Code :) Also sucht schön *g*
Außerdem kann es sein das der Client CRC Checks macht. Dafür gibts aber ein schönes Plugin für PEiD. Damit könnt ihr die neue CRC vom patched client mit der alten überschreiben.

Ist ansich ziemlich Basic, ich hoffe es war verständlich :P
03/25/2009 17:41 DamageBreaker#2
langsam tut sich hier ja schon was in der gamehacking section;)

nice tut und hoffe auf sticky:)
03/25/2009 20:52 cstyler#3
sehr nice tut muss ih mal echt sagen, bekommse von mir ein thx.
Ich bin leider im beriech gamehacking etc ein noob :P
Also ich wollte dich fragen ob du vielleich zeit hast für das game: Martialheroes([Only registered and activated users can see links. Click Here To Register...])
einen multiclienten + bypasser machen könntest, weil ich würde das selbstpobieren,lerne atm c++ bin am anfang
03/25/2009 21:04 DamageBreaker#4
Quote:
Originally Posted by cstyler View Post
sehr nice tut muss ih mal echt sagen, bekommse von mir ein thx.
Ich bin leider im beriech gamehacking etc ein noob :P
Also ich wollte dich fragen ob du vielleich zeit hast für das game: Martialheroes([Only registered and activated users can see links. Click Here To Register...])
einen multiclienten + bypasser machen könntest, weil ich würde das selbstpobieren,lerne atm c++ bin am anfang
mh geh doch einfach nach dem tut dann haste womöglich nen multiclienten und den bypass mhh wie heißt denn die antihack software?


PS: wenn du hilfe brauchst frag mich ruhig;)
03/25/2009 21:05 cstyler#5
okey antihack heißt xtrap

ich sollte dir ja die exe geben, da waren aber 5 exen, mit updater drin, ahbe alles geuploadet ausser updater


[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

p.s. man kann dir keine pms schreiben
03/25/2009 21:13 DamageBreaker#6
Quote:
Originally Posted by cstyler View Post
okey antihack heißt xtrap

ich sollte dir ja die exe geben, da waren aber 5 exen, mit updater drin, ahbe alles geuploadet ausser updater


[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

p.s. man kann dir keine pms schreiben
meinsew jetz mich? mach @ dahin bin verwirrt

k also erstma : was willst du überhaupt machen?
03/25/2009 21:15 cstyler#7
ne meinte treadersteller
und will nen multiclient + bypass, damit ich zb mit 2+accoutn vp amchen kann und mit main farmen oder lvln
03/25/2009 21:38 DamageBreaker#8
Quote:
Originally Posted by cstyler View Post
ne meinte treadersteller
und will nen multiclient + bypass, damit ich zb mit 2+accoutn vp amchen kann und mit main farmen oder lvln
vp? shop oder was? automaton?;) mehr infos
03/25/2009 21:44 cstyler#9
ok bei mh wenn man shop in der hauptstadt macht, bekommt man umgefair jede 5 min 1 vp point(vending poitn)
wenn amn 180 oder 190 points hat , kann man sich gm pot kaufne, der ist dann 200-500gold wert, man braucht ca. 18 stunden für einen pot, also wenn man mit vielen clienten das gleichzeitig macht, bekommt man in der gleichen zeit mehr, weil in 18h 400g ist recht wenig.Deswegen wollte ich multiclient , damit ich also vp points bekomme und gleichzeitig lvln kann, und ich brauche nen bypass, da es oft ftp probleme gibt, deswegen komme ich nie weiter als patcher und xtrap(das antyhacktool von denen) statet meinen pc ständig neu, weil es denkt ich führe hacks aus, zb bei anderen gamen oder icq...
03/25/2009 21:45 Adroxxx#10
Schön das euch mein Tutorial gefällt. Ich werde mir das Spiel mal anschauen, hab aber noch keine Erfahrung mit X-Trap. Falls ich es schaffe, werde ich es posten. Du kannst auch mal den Client in der VMware laufen lassen. Da sollte auch XTrap keine Probleme machen.

Ansonsten spammt den Thread bitte nicht mti OT zu. Den Rest könnt ihr per PN regeln oder einen eigenen Thread aufmachen.

Danke.
03/25/2009 21:53 cstyler#11
habe schon oft mit vmware versucht, aber vmware unterstützt keine 3d games, also geht es da leider nciht, wenn du was neues hast, pm mich eifnach
03/25/2009 22:03 Adroxxx#12
o.O Lad dir mal vielleicht die neue VMWare Version. Sp3w aus dem Forum hier, hat in der VMWare mehrmals S4 league laufen und farmt so. Musste mal im S4 Forum gucken.

Und jetzt:
Bitte kein OT mehr!
03/25/2009 22:08 DamageBreaker#13
Quote:
Originally Posted by Adroxxx View Post
o.O Lad dir mal vielleicht die neue VMWare Version. Sp3w aus dem Forum hier, hat in der VMWare mehrmals S4 league laufen und farmt so. Musste mal im S4 Forum gucken.

Und jetzt:
Bitte kein OT mehr!
WHOOOT!!!

ich habs ma mit der alten probiert das ging kein bisschen da die graka emuliert wird. warum geht es bei der neuen? wird der speicher halbiert? ( dann kann ich ja s4 5ma laufen lassen XD

b2t: mir fällt nix ein sry :D musste das rauslassen
04/23/2009 14:37 Adroxxx#14
Bei der neuen kannst du DirectX installieren. Ging bei der alten glaub ich nicht. Vmwaretools und dann directx. Dann solltest jedes Game zum laufen bringen.

Aber das ein anderes Thema.
04/29/2009 18:29 neydi#15
its best ! plz help me i want a wallhack in sodier front philippines . tnx .