Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Nostale > Nostale Hacks, Bots, Cheats & Exploits
You last visited: Today at 10:29

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Release&TuT] Mutex Killer & Multiclient

Discussion on [Release&TuT] Mutex Killer & Multiclient within the Nostale Hacks, Bots, Cheats & Exploits forum part of the Nostale category.

Reply
 
Old   #1
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Post [Release&TuT] Mutex Killer & Multiclient

Hallo Leute!
Wie schon in anderem Thread geschrieben will ich ein Tutorial machen, wie man einen "echten" Multiclient macht und ein Tool releasen welches den Clienten nicht patcht, sondern den Mutex von Nostale killt. (Das alternative Tool)
=================================================

Inhaltsangabe:
  • Voraussetzungen & Programme
  • Ein kurzer Blick in die Theorie.
  • Wie patche ich den Nostale Client richtig um einen Multiclient zu machen?
  • Ein alternatives Tool, um den Clienten nicht patchen zu müssen.
=================================================

Voraussetzungen & Programme:
  • Grundlegende Erfahrung im Umgang mit Debuggern
  • Grundlegende ASM Kenntnisse
  • OllyDBG
  • C/C++ Kentnisse (für den Multiclient starter)

Theorie:

Um einen Multiclient erstellen zu können, müssen wir wissen, welche Windows Funktionen die Limitierung setzen. Diese sind: CreateMutex(), CreateProcess()

MSDN - CreateMutex:
Quote:
HANDLE WINAPI CreateMutex(
_In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,
_In_ BOOL bInitialOwner,
_In_opt_ LPCTSTR lpName
);
Je nach Zeichensatz(ANSI oder UNICODE) kann die Funktion, CreateMutexA oder CreateMutexW heißen.

Es ist zu beachten dass die CreateProcess Funktion nicht immer vorhanden sein muss. Sie kann auch fehlen
MSDN - 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
);
Was das wichtigste bei den 2 Funktionen ist das: BOOL bInitialOwner / BOOL bInheritHandles.
Auszüge MSDN:
Quote:
Originally Posted by BOOL bInitialOwner
If this value is TRUE and the caller created the mutex, the calling thread obtains initial ownership of the mutex object. Otherwise, the calling thread does not obtain ownership of the mutex. To determine if the caller created the mutex, see the Return Values section.
Quote:
Originally Posted by BOOL bInheritHandles
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.
Das heißt wir müssen aufpassen, dass jeweils diese 2 Variablen auf FALSE bleiben.


Wie beendet man den Mutex eines Prozesses?

Das beenden selbst ist einfach und das Zauberwort für dies heißt: DuplicateHandle()
MSDN-Auszug:
Quote:
BOOL WINAPI DuplicateHandle(
_In_ HANDLE hSourceProcessHandle,
_In_ HANDLE hSourceHandle,
_In_ HANDLE hTargetProcessHandle,
_Out_ LPHANDLE lpTargetHandle,
_In_ DWORD dwDesiredAccess,
_In_ BOOL bInheritHandle,
_In_ DWORD dwOptions
);
MSDN:

Man ruft einfach DuplicateHandle auf, aber mit der Angabe von DUPLICATE_CLOSE_SOURCE (0x1) im Options-Parameter.
Man kann bei Target Prozess Handle und Target Handle NULL angeben, wichtig sind Source Prozess Handle und Source Handle.

Bsp:
Code:
DuplicateHandle(handleToTheRemoteProcess, theRemoteHandle, NULL, NULL, 0, FALSE, 0x1);
Das wars im ganzen, was das schließen angeht.
Um an den Mutex zu kommen, müssen diese Windows NT-Funktionen verwendet werden: NtQuerySystemInformation, NtDuplicateObject, NtQueryObject

Dazu aber mehr, wenn genug Nachfrage deshalb besteht!


Das Patchen:

Genug Theorie, begeben wir uns aufs patchen von Nostale
Wir öffnen NostaleX.dat in OllyDBG.

Im CPU Fenster drücken wir die rechte Maustaste, gehen auf View und wählen NostaleX aus. Somit sind wir im Modul von NostaleX, da wir ja auch hier arbeiten wollen und nicht im ntdll Modul

Jetzt sehen wir ASM-Code von NostaleX. Jedoch ist dieser Code, wie man sieht nicht analysiert, also analysiren wir es! Wir drücken wieder die rechte Maustaste, gehen aber auf Analysis und dann auf Analys Code.

So, nachdem wir den analysirten Code haben, suchen wir nach unserer CreateMutex Funktion. Da NostaleX keine CreateProcess Funktion hat, müssen wir diese nicht suchen. Wieder: Rechte Maustaste ->Search for -> All intermodular calls

Jetzt sollte ein neues kleines Fenster erscheinen mit vielen Funktionen. Wir wollen es sortieren um die CreateMutex Funktion leichter zu finden, also gehen wir wie gefolgt vor: Rechte Maustaste -> Sort by -> destination

Nun suchen wir die CreateMutex Funktion.Wenn wir sie gefunden haben, machen wir einen Doppelklick darauf und wir sollten bei der CreateMutex Funktion sein. Der rot markierte Bereich im 2ten Bild welches nach diesem folgt ist wichtig!

Sooo. Was sehen wir im rot markierten Teil? Unsere Funktion! Und offentsichtlich wird da etwas geprüft verschoben, inkrementiert usw. Jetzt sind die Grundlegenden ASM kentnisse gefragt. Unser eax hat zurzeit den 0 Wert. aber beim
Code:
inc eax
and eax,7F
Wird dem Code der Wert 1 zugewiesen, was auch gleichzeitig heißt, das unser InitialOwner auf TRUE gesetzt wird! Wie machen wir es nun zu einem FALSE?
Na ganz einfach, statt der and - Anweisung werden wir unseren gerade eben inkrementierten eax, wieder dekrementieren. Um dies zu machen, machen wir ein Doppelklick auf and eax,7F und schreiben unsere dekremtnierungs - Anweisung.
Code:
dec eax
Und natürlich machen wir ein hacken bei: "Fill with Nop's".
Glückwunsch, wir haben CreateMutex erfolgreich gepatcht!
Was noch zu tuhen ist, weil die CreateMutex von einer Stelle aufgerufen wird (100% irgendwo beim Programm Entry Point), müssen wir einen Error-Handling überspringen. Um aber zum Entry Point des Programms zu gelangen, müssen wir einmal den Play-Button des Debuggers betätigen und er wird sofort dannach zum Entry Point des Programms springen.
Auf dem Bild ist eine Markierung zu sehen. Diese ist in diesem Fall wichtig.
JNZ = Jump if Not Zero
Dieser Jump wird jedesmal ausgeführt da wir die CreateMutex Funktion verändert haben. Wenn man sich mit dem Debugger spielt, kann man sehen wo man hinspringen wird. Also müssen wir wo anders springen. Wo springen wir? Wir springen vor dem Call, welcher den Splash-Screen des Spiels aufruft, weil ab da läuft das Programm "ohne Fehler" bzw. der Client wird nicht crashen etc.
Wie ich weiß welcher Call den Splash-Screen aufruft? Naja, man muss sich etwas tiefer mit dem beschäftigen. Aber ich habs Anfäger freundlich gemacht und so kann man alles in der folgenden screens erkennen

Unser patch ist ferig, yeah! Was wir noch machen müssen ist, die vorgenommenen Änderungen speichern. Dafür machen wir: Rechte Maustaste -> Copy to executeable -> All modifications
Man wird dann gefragt was man kopieren möchte, wir wählen Copy all.
Nun erscheint ein neues Fenster. In diesem wieder: Rechte Maustaste -> Save file
Die Datei speichern wir als NostaleX_Multiclient.dat

Nun. Jetzt schreiben wir einen kleinen Starter für den Multiclient und sind dann glücklich und zufireden :P
Ich habe die C++ Sprache für dies genommen, aber man kann welche man will nehmen, hauptsache wir starten den Clienten

Ich habe den Code kommentiert(/erklärt) damit ich hier nicht extra erkläre.

Nachdem ihr den Starter erstellt bzw. kompiliert habt, dann verschiebts ihr euren Starter in den Nostale Ordner und startet diesen als Admin! Nun, machts das wie oft ihr es wollt


Release und somit das alternative Tool um den Clienten nicht patchen zu müssen:

Vorerst: Den Source Code bzw. das Tutorial zu so einem Tool werde ich erst dann machen, wenn genug Nachfrage deshalb besteht.
Ausnhame: Mr.Tr33, kannst mir gerne eine PN schicken und wir reden dann darüber, da du wissen wolltest wie sowas funktioniert.

Das Tool wurde in C geschrieben und verwendet die NT - Funktionen. (von der ntdll.dll)

Was das Tool macht?
Es killt den Mutex von Nostale. Somit kannst du Nostale nochmals starten.

Wie verwende ich das Tool?
  • Nostale MutexKiller.rar downloaded und entpacken.
  • Nostale MutexKiller.exe starten. Entweder bevor man Nostale startet, oder nachdem Nostale gestartet ist, wie ihr wollts.

Ich hoffe das Tutorial zum Multiclient hat euch geholfen!
Ebenfalls hoffe ich, dass das Tool, anstatt den Multiclient zu patchen, auch gut ankommt!

Im Anhang findet ihr:
  • Nostale Starter und den Source Code dazu.
  • Nostale MutexKiller Tool
Viel spaß!
Greetz
Attached Files
File Type: rar Nostale Starter.rar (5.8 KB, 164 views)
File Type: rar Nostale MutexKiller.rar (12.1 KB, 157 views)
XxharCs is offline  
Thanks
11 Users
Old 11/29/2013, 20:40   #2
 
Rorc's Avatar
 
elite*gold: 113
The Black Market: 133/2/0
Join Date: Dec 2009
Posts: 16,685
Received Thanks: 4,449
sehr schön geschriebenes Tutorial, endlich mal was, das sich auch Tutorial nennen lassen kann.
Rorc is offline  
Old 11/29/2013, 22:10   #3
 
elite*gold: 0
Join Date: Aug 2013
Posts: 154
Received Thanks: 166
Somebody can translate in english ? google translator isn't good with german and i don't understand what he said.. ^.^ thanks

PS. for multiclient i already released a tutorial but.. thanks for launcher code
Sm•ke is offline  
Old 12/01/2013, 21:56   #4

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Der MutexKiller funktioniert nicht bzw. guckt zu schnell danach und sagt, dass es kein gibt oder bereits tod ist.

Du hast aber nicht wirklich erklärt wie man jetzt theoretisch den laufenden Mutex suchen kann und dann töten kann, sondern wie man ihn rauspatcht.
Ich möchte es nämlich auch in einer anderen Sprache machen.
Mr.Tr33 is offline  
Old 12/02/2013, 10:59   #5
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Quote:
Originally Posted by Mr.Tr33 View Post
Der MutexKiller funktioniert nicht bzw. guckt zu schnell danach und sagt, dass es kein gibt oder bereits tod ist.
Ja, es kommt immer auf den Computer an, wie schnell er jetzt das Game ladet. Das Programm selbst wartet noch 2 sekunden zusätzlich (habs jetzt auf 2 Sekunden geupdated) bevor er nach dem Mutex sucht.
Aber wie im Post schon erwähnt, man kann auch nachdem Nostale gestartet wurde, den MutexKiller starten.

Quote:
Originally Posted by Mr.Tr33 View Post
Du hast aber nicht wirklich erklärt wie man jetzt theoretisch den laufenden Mutex suchen kann und dann töten kann, sondern wie man ihn rauspatcht.
Ich möchte es nämlich auch in einer anderen Sprache machen.
Wie schon im Post erwähnt, wenn genug Nachfrage besteht mach ich das Tutorial.
Die Sache ist die, es geht wirklich in die Tiefe um sowas machen zu können. Das schließen selbst des Mutex ist einfach (das werd ich in die Theorie hinzufügen), aber das bekommen des Mutex ist das schwierige

Du musst auf die Handles des Prozesses zugreifen und sie aufzählen/auflisten.
Das ist so, als würdest du versteckte Prozesse auflisten. (Mögich durch zB: PIDB, CSRSS Process Handle Enumeration,..)


Habe mal den MutexKiller geupdated, dieser wartet jetzt 2 Sekunden bevor er anfängt zu suchen. Ins Tutorial werd ich das beenden des Mutex kurz erwähnen.
XxharCs is offline  
Old 12/02/2013, 16:17   #6

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Ja wäre nett, mich würde es halt interessieren wie das allgemein geht.
Ich verstehe C++ jetzt selbst nicht wirklich, genausowenig kenne ich mich mit Olly aus aber das Prinzip dahinter interessiert mich trotzdem.

Bei deinem jetzigen MutexKiller funktioniert es laut Meldung ... ein zweiter Start von Nostale geht aber leider nicht.
Mr.Tr33 is offline  
Old 12/03/2013, 11:18   #7
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Quote:
Originally Posted by Mr.Tr33 View Post
Bei deinem jetzigen MutexKiller funktioniert es laut Meldung ... ein zweiter Start von Nostale geht aber leider nicht.
Sicher? Wie startest du Nostale und den MutexKiller? Brauche Infos um es zu beheben^^



Sonst wurde der MutexKiller auf WinXP x32, Win7 x64 und Win8 x64 getestet und funktioniert.
XxharCs is offline  
Old 12/03/2013, 14:00   #8

 
Mr.Tr33's Avatar
 
elite*gold: 2778
Join Date: Feb 2012
Posts: 3,527
Received Thanks: 1,044
Habe Win8 64bit.
Habe den MutexKiller natürlich als Admin gestartet und Nostale ganz normal über den Patcher.
Beim zweiten mal starten von Nostale passiert einfach nichts.

Mr.Tr33 is offline  
Old 12/03/2013, 16:13   #9
 
elite*gold: 0
Join Date: Sep 2010
Posts: 132
Received Thanks: 29
etwas sehr kompliziert gemacht aber gut ^^
ich frage mich warum du das mutex überhaupt killst o.o
mein loader startet unendlich viele clienten ohne irgendwas zu killn..
ändere die creation flags auf create_suspended
patch es und lass den prozess weiterlaufen
PainToTheWorld is offline  
Old 12/03/2013, 17:24   #10
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Quote:
Originally Posted by PainToTheWorld View Post
mein loader startet unendlich viele clienten ohne irgendwas zu killn..
ändere die creation flags auf create_suspended
patch es und lass den prozess weiterlaufen
Ist eine Möglichkeit, aber dabei modifizierst du wieder den Client.
Wenn du den Mutex killst, änderst du am Client garnichts und ist auch auf irgendeineweise Cleaner als wenn du den Client patchst.

Quote:
Originally Posted by Mr.Tr33 View Post
Habe Win8 64bit.
Habe den MutexKiller natürlich als Admin gestartet und Nostale ganz normal über den Patcher.
Beim zweiten mal starten von Nostale passiert einfach nichts.
Wenn du das Tool neustartest, was für eine Meldung bekommst du? Dass es bereits beendet wurde oder? Hast auch versucht das Tool zu starten, nachdem Nostale geöffnet worden ist?

Edit: Hab es mal wieder geupdated.
XxharCs is offline  
Old 01/02/2014, 17:56   #11
 
AgnosticFront's Avatar
 
elite*gold: 65
Join Date: Oct 2009
Posts: 457
Received Thanks: 85
Hallo,
bei mir besteht exact das gleiche Problem wie bei Mr.Tr33.

Tool wird als Administrator ausgeführt unter Windows 8 64bit.
Hab es versucht vor NosTale zu öffnen und auch nach.
Leider kann ich keine genaueren Infos geben.

Edit:

Nach mehrmaligem versuchen hat es doch geklappt.
Gewünscht ist aber wohl doch eher das es beim ersten versuch gelingt.
AgnosticFront is offline  
Old 01/07/2014, 14:24   #12
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Ich habe es mal komplett neu auf einer Windows 8 (8.1) Maschine kompiliert und funktioniert gleich beim ersten mal.

Ich bitte um Tests
XxharCs is offline  
Old 01/12/2014, 12:39   #13
 
elite*gold: 0
Join Date: Dec 2009
Posts: 574
Received Thanks: 35
Bei mir (Windows 8.1 x64) funktioniert's tadellos.
Hab's zuvor aber auch nicht getestet, weiß also nicht, ob ich überhaupt Probleme gehabt hätte.
Weiter aber ein großes Lob für das Tutorial, auch wenn ich glaube, dass 85% der Sektion damit überhaupt gar nichts anfangen können, ist es immer wieder schön, wenn Handlungsweisen dokumentiert sind.

Bin ein Freund von ausgiebiger Dokumentation, sowohl von Prozessen, als auch von Quellcode.. Quellcode gab es ja in dem Fall nicht, aber der Prozess (Zumindest vom Client patchen) ist wunderschön dokumentiert. Ich persönlich würde mich sehr freuen, wenn Du Zeit und Lust dazu findest, die Prozesse des Mutexkillers zu dokumentieren oder gar den dokumentierten Quellcode zu releasen.

Liebe Grüße und frohes Schaffen
VolldeppOfDoom is offline  
Thanks
1 User
Old 01/14/2014, 13:54   #14
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
Hab mal den Source Code hinzufügt.. Die wichtigen Teile und was gebraucht wird etc. ist auskommentiert, für den Rest, gehe ich davon aus, dass Grundlage in der Sprache besteht.

Geschrieben, wie schon erwähnt, in C.
Kommentiert hab ich es in Englisch, damit auch Englischsprachige, Verwendung darin finden.
Falls ihr den Code wo anders verwendet oder ähnliches, dann bitte Credits geben!
XxharCs is offline  
Old 01/15/2014, 18:18   #15
 
elite*gold: 0
Join Date: Dec 2009
Posts: 574
Received Thanks: 35
Ich freue mich, dass Du den Source-Code hinzugefügt hast - Ist ja auch noch sehr übersichtlich.

Als alter Programmierstilnazi hab ich aber selbstverständlich was zu meckern:
BOOLs sind super, aber es ist nicht sinnvoll einen BOOL auf eine Ganzzahlliteral zu prüfen (Deine if-Verzweigung in der main()).
Außerdem kann ich mich mit dem Namen "result" nicht so wirklich anfreunden, weil er nicht ausdrückt, was für ein "result" denn da nun drinsteckt. Ein Name wie "creationSuccess" hat mehr Aussagekraft.
Hier komme ich nochmal auf die if-Verzweigung: Wenn Du deinem BOOL einen sinnvollen Namen gibst, kannst Du das ganze recht wörtlich lesen, da in C/++ Zahlwerte >0 als true und <=0 als false interpretiert werden. So in etwa:

Code:
int retval = 0;

if(creationSuccess) // Wenn Erstellung erfolgreich war, dann:
{                         // DAS hier ausführen!
    std::cout << "\n[ERROR]: CreateProcessA failed!" << std::endl;
    _getch();    
    retval = 1; 
}
else                     // Anderenfalls (Wenn nicht erfolgreich) DANN
{                        // Das hier ausführen!
    // CreateProcess war erfolgreich, und der Nostale Client wurde gestartet
    std::cout << "\nSuccessfully started!" << std::endl;
}

_getch();
return retval;
Außerdem habe ich deine returns durch ein return retval ersetzt.
Das ermöglicht es, eindeutig zu sehen, wo deine Prozedur beendet ist. mehrere Returns sind unübersichtlich und ebenso wie zuvor genanntes schwieriger (um nicht zu sagen "schlechter") Programmierstil und bei vielen Programmierern (einschließlich mir) äußerst ungern gesehen.

Freundliche Grüße!

€dit: Ganz streng kannste dir sogar dieses "result"-Ding komplett sparen, indem Du den Funktionsaufruf in die if reinschmeißt, aber das ist ehrlich Geschmackssache
VolldeppOfDoom is offline  
Reply


Similar Threads Similar Threads
[Release]Maestia HackShield Killer + MultiClient + No Updater V.1!
09/06/2015 - Maestia - 49 Replies
Haloo leuts Wiedermal ein neues Update nachdem das Maestia Forum aufgekocht ist. HackShield killer...Funktioniert auf neustem Stand von Maestia und bringt keine Probleme! Anleitung! Patcher -> Starten Pfat angeben -> Maestia.exe Maestia Patchen!
[Release]Florensia HackShield Killer + MultiClient V.X!
06/29/2012 - Florensia - 47 Replies
Sooo jetz lad ich das mal hoch und mach es public ;) HackShield killer...Funktioniert auf neustem Stand von Florensia und bringt keine Probleme! Anleitung! Patcher -> Starten Pfat angeben -> Launcher.exe Florensia Patchen! Start Button -> Drücken
{RELEASE}Getting Neb's Xign Killer working with all hacks{RELEASE}
10/04/2009 - Dekaron Exploits, Hacks, Bots, Tools & Macros - 21 Replies
UPDATING to Picture Tutorial 100% working NO DC picture tutorial..........coming soon TEMPORARY: steps 1 - 15 Step 1 : Install client , Update client , Load game , Login , load map , close game Step 2 : Put the Dekaron_CRC_Bypass_v2.0.rar into bin and extract it Step 3 : Open the launcher that was just extracted to the bin folder. Step 4 : Click Select File... when the Select File... window loads up navigate to you bin folder and double click dekaron.exe, then click Launch
Mutex already created
07/28/2009 - SRO Private Server - 0 Replies
Hi dudes =) When i have isro bots running (using sbot) and i try to launch sjsro, i get that : http://img195.imageshack.us/img195/4618/sanstitre bxz.png i read i need a multi client, but i already have one... can anybody help me?
Mutex error and multiclient
07/02/2007 - Silkroad Online - 0 Replies
Hi guys I have a problem, when one of my character is already ingame , and then i want to launch my second client (using 7ease cracked client) i got this message: "fatal error mutex is already excecuted" anyone can help me pls? :?



All times are GMT +2. The time now is 10:29.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.