Hi guys, today i decided to make a small Tutorial for you.
In this Tutorial ill teach you how to find and edit the necessary
patches for Multiclient.
This tools will be used in the Tutorial:
OllyDBG
Lets start (this way works for the most Games).
First of all Start OllyDBG and load Nspk.exe (File --> Open).
If you have opened the Nksp.exe Simply click on Run (F9) and wait
a lil, a small Messagebox should appear to tell you that the
program could not run itself. Now press F12 or click on Pause.
When the Program is paused, click alt + F9 or Debug -->
Execute till user Code (the programm will resume now and wait
for your input). Instead of Paused, the status should be 'Back to User'
now. Now you can click on the OK Button and we will break right after
the Messagebox. Scroll up to get a View at the code. Now it should
look like this -->

For us just the line JNZ SHORT Nksp.00404FF9 is important.
JNZ means Jump if not Zero. If you click on it, you will see
that it jumps over the Messagebox and thats what we want.
We will simply patch it to jump always over the Messagebox.
To do this, doubleclick the JNZ and change the JNZ to JMP.
JMP = Jump without any condition. The Line should look like
that now --> JMP SHORT Nksp.00404FF9. Now do a rightclick
--> Copy to Executable --> all modifications --> Copy all.
A new Window will appear now, just do a rightclick on it and click
Save file. You should use a name like Nspk[patched].exe to hold
the original Nksp.exe. Now load up the new exe that you just saved
(F3 or File --> Open). Now do the same you did at the Start.
Run --> wait for the Messagebox --> Pause (F12) ---> Back to User
(Alt + F9) --> click on OK. This time we see the Messagebox in the Code
Again but there isnt any conditional Jump over the Messagebox just a retn.
Anyway, since there is a RETN right above the Messagebox, the program
must jump to the Messagebox from anywhere. So we go to the first line of the
Messagebox (PUSH 0) and rightclick it. Now click on Go to and you will see
that there are two conditional jump that will jump to this Messagebox.
Now click on the first jump (JE = Jump if equal) to follow it. We could simply
nop booth of the Jumps (rightclick --> Binary --> fill with nops) but we wont do
it since there is a smaller patch. Just scroll up until you see this Code:

We see a Messagebox that says Last Chaos is already running.
There we already found another necessary patch for the Multiclient.
Anyway, now take a look. Do a normal click on booth jumps and
follow them to see where the destination of this two jumps is.
The first Jump (jnz) looks pretty nice for me. Its jumping over the
Last Chaos is already running message and also over booth jumps
that jump to the Messagebox we just saw. I think you know now how
to edit this but if you dont know it, ill explain it one more time.
Doubleclick the JNZ and change it to JMP. Jnz = Jump if not Zero,
JMP = Jump. The line should look like that now:

Save the Patches. If you dont know how, simply take a look above
where i already explained it. Gratz, you got your selfmade Multiclient.
I hope your got a lil expirience from this now, this way of patching
for Multiclient works for a lot of different games but of course not for all.
Other games also have extra checks like Mac Adress and more.
Thanks for reading this Tutorial, if you got any problems or if you got
any suggestions feel free to post it here. I should add a Zoomhack and
a Namepatch tutorial soon but for now have fun ^_^
If reversing is intresting for you i suggest you to take a look at this Tutorials:

Everything its pretty good explained and you can also get a lot of reversing
expirience from this Tutorials.
Deutsch:
Hi Leute, habe mich dazu entschieden ein kleines Tutorial
für euch zu machen. In diesem Tutorial werde ich euch
beibringen wie man die stellen die man zu patchen hat
findet und wie man diese Patchen muss.
Diese Programme braucht ihr fürs tutorial:
OllyDBG
Dann mal los(diese Methode klappt übrigens bei den meisten Spielen).
Als erstes startet Ollydbg und öffnet die Nspk.exe (File --> Open).
Wenn du das gemacht hast, klick auf Run oder drück F9 und warte
bis eine Messagebox auftaucht mit folgendem inhalt: "this program
could not run itself". Jetzt macht einen klick auf Pause oder drückt
F12. Wenn das Programm pausiert ist, drückt alt + F9 oder geht auf
Debug --> Execute till user code. Das Programm wird dann wieder
laufen und auf eingaben vom Benutzern warten. Da wo grade noch
Paused stand sollte jetzt 'Back to User' stehen. Wenn dies der
Fall ist klickt bei der Messagebox auf OK und das Programm
wird direkt nach der Messagebox anhalten. Scrollt ein bischen
hoch um einen blick auf den Code zu werfen. Das sollte dann
in etwa so aussehen -->

Für uns ist nur die Zeile JNZ SHORT Nksp.00404FF9 wichtig.
JNZ heißt jump if not zero (springe wenn nicht 0). Wenn du
diese Zeile anklickst, siehst du links neben der Zeile eine
Linie die dir Zeigt wohin der jump springt. Du wirst sehen
das der sprung über die Messagebox geht und das ist was
wir wollen. Um das zu erreichen werden wir das Programm
dazu bringen immer über diese Messagebox zu springen das
tun wir folgendermaßen:
Macht einfach einen Doppelklick auf JNZ und ändern dann
das jnz zu jmp (jmp = JUMP always). Die Zeile sollte jetzt
so aussehen: JMP SHORT Nksp.00404FF9. Jetzt macht
einen rechtsklick --> Copy to executable --> all modifications
--> Copy all. Ein neues Fenster wird sich dann öffnen, in dem
neuen Fenster macht ihr nochmal einen Rechtsklick und geht
auf Save File. Am besten nennt ihr die exe dann nksp[patched].exe
damit die original Datei nicht überschrieben wird. Jetzt öffne die
Datei die du grade gespeichert hast (F3 oder File --> Open).
Jetzt macht einfach das was ihr am Anfang schon gemacht habt.
Run --> auf eine Messagebox warten --> Pause(F12) --> Back to
User (Alt + F9) --> klick auf OK. Guckt euch nun erstmal den Code an.
Diesmal gibt es keinen Jump der über die Messagebox springen würde
aber das ist kein Problem. Genau über der Messagebox ist steht retn (return).
Das heisst das das Programm von irgendwo zu der Messagebox springen
muss die wir grade gesehen haben da ein retn (return) zu einer anderen Stelle
im Programm springt. Mach nun einen Rechtsklick direkt auf der Zeile unter
dem retn in diesem Fall ist dies der erste Parameter der Messagebox.
Jetzt klickt auf Go to und ihr werdet sehen das da 2 Sprünge mit Bedingungen
sind, die zu unserer Messagebox springen. Klickt jetzt auf den ersten jump
(JE = Jump if equal / Springe wenn gleich) um bei der Zeile zu landen.
Wir könnten jetzt natürlich beide Jumps noppen (Rechtsklick --> Binary Edit
--> Fill with nops | nop = no operation / nichts tun) aber das werden wir nicht
tun weil wir nicht soviel Patchen müssen um an unserer Ziel (Multiclient) zu
kommen. Scrollt einfach mal ein bisl hoch bis ihr diesen Code seht:
.Wir sehen eine Messagebox mit dem Text "Last Chaos is already running"
(Last Chaos läuft bereits). Jetzt denkt ein bischen nach, wir haben eine
Stelle gefunden die wir auch unbedingt patchen müssen damit wir Last
Chaos mehr mals laufen lassen können. Jetzt klickt mal auf beide Jumps
und guckt wo diese hinspringen (du kannst auch einen Rechtsklick auf
einen Jump machen und auf Follow klicken...). Der erste jump sieht
doch schonmal sehr vielversprechend aus. Der Spring springt über die
Last chaos is already running Messagebox und über die beiden Sprünge
die zu der Messagebox springen die wir grade gesehen haben. Ich denke
mal ihr solltet jetzt wissen wie ihr den jump dazu bringt immer zu springen
zur sicherheit werde ichs aber nochmal erklären. Macht einen Doppelklick
auf JNZ und ändert das jnz zu jmp. Jnz = Jump if not zero / Springe wenn
nicht 0. Jmp = Jump = Spring immer. Die Zeile sollte danach ca so aussehen:
.Kommt drauf an wie ihr eure Datei genannt haben beim speichern. Jetzt könnt
ihr die den gepatchten Client speichern. Wenn ihr nicht wisst wie, guckt einfach
ein bisl weiter oben als ich zum ersten mal erklärt habe wie das geht.
Fertig ? Herzlichen glückwunsch. Ich hoffe du hast ein bischen reversing
Erfahrung bekommen. Diese Methode um einen multiclient Patch zu machen,
klappt für viele verschiedene Spiele aber natürlich nicht für alle.
Manche Spiele haben extra checks zb Packetchecks mit der Mac Adresse
und noch einiges mehr. Danke das du dir die Zeit genommen hast dieses
Tutorial zu lesen, wenn du irgendwelche probleme haben solltest, oder
irgendwelche Verbesserungsvorschläge zum Tutorial poste es einfach
hier im Thread. Falls für euch reversing ganz intressant ist, kann ich euch
folgende Tutorials sehr empfehlen:

Bei diesen Tutorials ist alles sehr gut erklärt und man sammelt einiges
an reversing Erfahrung jedoch sind diese Tutorials auf Englisch.






