Giriş yap
En iyi yollayıcılar
Hello EMO | ||||
EMO | ||||
eMoStyLe | ||||
BesimBICER | ||||
GameKinG | ||||
Crysis | ||||
~>!.DεvιLρяιεsт.!<~ | ||||
MeTaL | ||||
TrueCrime | ||||
djhayal3t |
Istatistikler
Toplam 203 kayıtlı kullanıcımız varSon kaydolan kullanıcımız: crayzboy76
Kullanıcılarımız toplam 1186 mesaj attılar bunda 862 konu
Arama
Sosyal yer imi
Sosyal bookmarking sitesinde Emo, Emo nedir, Emo resimleri, Emo Kıyafetleri, Emo Sözleri, Emo Oyunları, EmoTurkey, Emo Nickler, Emo Avatarları, Punk, Punk Resimleri, Punk Avatarları, Rock, Rock Resimleri, Rock Avatarları, Msn Nickleri, Msn Avatarları, Müzik adresi saklayın ve paylaşın
Sosyal bookmarking sitesinde EMO Style ForumPro - Hos Geldiniz adresi saklayın ve paylaşın
Kimler hatta?
Toplam 6 kullanıcı online :: 0 Kayıtlı, 0 Gizli ve 6 Misafir Yok
Sitede bugüne kadar en çok 217 kişi C.tesi Tem. 29, 2017 1:46 am tarihinde online oldu.
En son konular
Reklam
[Tutorial] Multiclient Howto
1 sayfadaki 1 sayfası
[Tutorial] Multiclient Howto
[QUOTE=Adroxxx;1992154]
#Inhalt:
[-]Voraussetzungen & Programme
[-]Theorie
[-]Patching
[-]Nachwort
[SIZE="4"]
[-]Voraussetzungen & Programme[/SIZE]
Voraussetzungen:
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 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
[SIZE="4"]
[-]Theorie[/SIZE]
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:
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:
Das wichtige bei CreateProcess ist bInheritHandles
[SIZE="4"]
[-]Patching[/SIZE]
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.
Dann machen wir wieder einen Rechtsklick -> Search for -> All intermodular calls.
Nun sehen wir alle API Calls. Leider etwas durcheinander, aber das bekommen wir auch noch hin
Rechtsklick -> Sort by -> Destination.
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.
Wir doppelklicken nun die erste CreateMutexA Funktionen und kommen dahin:
Wir sehen nun an welcher stelle CreateMutex gecallt wird.
[php]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
[/php]
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]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]
[/php]
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]005182A5 . 837A 04 00 CMP DWORD PTR DS:[EDX+4],0
005182A9 . 75 0E JNZ SHORT 005182B9
[/php]
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.
Wie wir sehen, überspringt er die
[php]005182B5 . /EB 53 JMP SHORT 0051830A
005182B7 . |EB 51 JMP SHORT 0051830A
[/php]
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]JNZ SHORT 005182B9[/php]
und drücken Leertaste. Wir können aber auch einen Doppelklick machen.
Dann ändern wir das JNZ in JMP und klicken Assemble.
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:
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:
Wir erinnern uns, das wichtige war bInheritHandles. Aber es ist hier auf FALSE.
[php]00535E98 |. 6A 00 PUSH 0 ; |InheritHandles = FALSE
[/php]
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.
Copy All!
Dann machen wir einen Rechtsklick -> Save to file
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.
[SIZE="4"]
[-]Nachwort[/SIZE]
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 [/QUOTE]
[SIZE="5"]Multiclient Howto[/SIZE]
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.
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
[SIZE="4"]
[-]Voraussetzungen & Programme[/SIZE]
Voraussetzungen:
- Grundlegende Erfahrung im Umgang mit Debuggern
- Grundlegende ASM Kenntnisse
- Menschenverstand
Programme:
- [URL="http://www.darkages.com/"]Darkages[/URL]
- [URL="http://www.ollydbg.de/version2.html"]OllyDBG[/URL]
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 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
[SIZE="4"]
[-]Theorie[/SIZE]
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:
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:
Das wichtige bei CreateProcess ist bInheritHandles
[SIZE="4"]
[-]Patching[/SIZE]
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.
Dann machen wir wieder einen Rechtsklick -> Search for -> All intermodular calls.
Nun sehen wir alle API Calls. Leider etwas durcheinander, aber das bekommen wir auch noch hin
Rechtsklick -> Sort by -> Destination.
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.
Wir doppelklicken nun die erste CreateMutexA Funktionen und kommen dahin:
Wir sehen nun an welcher stelle CreateMutex gecallt wird.
[php]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
[/php]
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]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]
[/php]
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]005182A5 . 837A 04 00 CMP DWORD PTR DS:[EDX+4],0
005182A9 . 75 0E JNZ SHORT 005182B9
[/php]
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.
Wie wir sehen, überspringt er die
[php]005182B5 . /EB 53 JMP SHORT 0051830A
005182B7 . |EB 51 JMP SHORT 0051830A
[/php]
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]JNZ SHORT 005182B9[/php]
und drücken Leertaste. Wir können aber auch einen Doppelklick machen.
Dann ändern wir das JNZ in JMP und klicken Assemble.
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:
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:
Wir erinnern uns, das wichtige war bInheritHandles. Aber es ist hier auf FALSE.
[php]00535E98 |. 6A 00 PUSH 0 ; |InheritHandles = FALSE
[/php]
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.
Copy All!
Dann machen wir einen Rechtsklick -> Save to file
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.
[SIZE="4"]
[-]Nachwort[/SIZE]
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 [/QUOTE]
Similar topics
» [Tutorial] Gamehacking Howto I [German]
» CSS [Tutorial] D3D Wallhack.
» [C/C++] Hooking Tutorial
» C++ -- DLL Tutorial { 2 } | Hp Mp Hook
» C++ -- DLL Tutorial { 1 }
» CSS [Tutorial] D3D Wallhack.
» [C/C++] Hooking Tutorial
» C++ -- DLL Tutorial { 2 } | Hp Mp Hook
» C++ -- DLL Tutorial { 1 }
1 sayfadaki 1 sayfası
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz
Cuma Ağus. 29, 2014 8:33 am tarafından Hello EMO
» goldenchase.net maden yaparak para kazanma
Cuma Ağus. 29, 2014 8:18 am tarafından Hello EMO
» etichal hacker görsel egitim seti
Çarş. Ağus. 06, 2014 4:57 am tarafından Hello EMO
» KO TBL Source C#
Ptsi Ara. 09, 2013 6:36 am tarafından Hello EMO
» x86 Registers
C.tesi Ağus. 24, 2013 5:02 am tarafından Hello EMO
» [Tutorial] Pegando Address, Pointers de WYD
Çarş. Tem. 10, 2013 7:25 am tarafından Hello EMO
» [Tutorial] Pegando Address, Pointers de CS Metodo²
Çarş. Tem. 10, 2013 7:23 am tarafından Hello EMO
» [Tutorial] Aprendendo basico deASM OLLYDBG
Çarş. Tem. 10, 2013 7:22 am tarafından Hello EMO
» Basic C# DLL injector
Ptsi Tem. 08, 2013 7:48 am tarafından Hello EMO