ich habe die letzen Tage an einem Toolkit gearbeitet, dass vielleicht auch für andere noch nützlich sein könnte. Deshalb wollte ich das hier einfach mal veröffentlichen.
Worum geht es?
Das Wallhacking Toolkit ermöglicht es, D3D-Wallhacks zu erstellen, ohne eine Programmiersprache zu beherrschen. Es lässt sich jedoch auch dazu benutzen, Strides oder NumVertices und PrimitiveCounts zu loggen.
Wie funktioniert das ganze?
Ein ausführliches HowTo in englisch ist schon mit dabei, aber ich werd' das ganze hier nochmal auf deutsch erklären:
Wallhacking Toolkit
- Vorwort
- Logging
- Hack erstellen
- Nachwort
[*] Vorwort
Zunächst erkläre ich mal, wie genau die Wallhacks, die das Toolkit erstellt, damit man versteht, was man hier genau tun muss.
Was sind Wallhacks? Ich denke, das sollte jedem klar sein, der sich das hier durchliest. Wallhacks erlauben es einem Spieler (meistenst in Shootern) andere Spieler durch Wände zu sehen, was ein großer Vorteil ist, da er dann schneller reagieren kann.
Aber wie funktioniert das ganze?
Das Toolkit ist momentan nur für D3D9-Spiele geschreiben. Alles andere funktioniert momentan noch nicht. Ich denke aber, dass ich in den nächsten Tagen, noch einen Support für D3D8-Spiele einbauen werde.
D3D9-Spiele haben eine sogenannte Methode, mit der sie Objekte auf den Bildschirm zeichnen. Diese nennt sich: IDirect3DDevice9::DrawIndexedPrimitive()
Diese wird von Direct3D bereitgestellt und das Spiel ruft sie mit bestimmten Parametern auf. Wenn man diese Parameter überwacht, kann man feststellen, was gerade denn genau auf den Bildschirm gezeichnet wird. Ein Wallhack setzt nun genau hier an. Er überwacht die Parameter und sollte er feststellen, dass ein Spieler gezeichnet wird, so zeichnet er diesen immer in den Vordergrund (vor Wände etc.).
Nun ist es allerdings so, dass diese Parameter von Spiel zu Spiel unterschiedlich sind. Deshalb muss man, um einen Wallhack zu erstellen, diese erst herausfinden und den Wallhack dann anweisen, genau diese zu verwenden.
Ein bisschen konkreter: Die Parameter (die der Wallhack hier verwendet) heißen UINT NumVertices und UINT PrimitiveCount.
Diese beiden Parameter sind nicht die einzige Möglichkeit zu überprüfen, was gerade gezeichnet wird. Es gibt noch einen weiteren und zwar UINT stride. In manchen Fällen ist es wesentlich einfacher diesen zu verwenden, in manchen nutzt er allerdings garnichts. Wenn man stride verwendet ist die Wahrscheinlichkeit groß, dass man mit einem stride-Parameter alle Spieler auf einmal markieren kann (bei NumVertices und PrimitiveCount benögt man mehrere Werte). Es kann jedoch auch passieren, dass ALLE Objekte eines Spiels mit einem Stridewert gedrawt werden, was zu Folge hat, dass einfach der komplette Bildschirm einfarbig ist. Außerdem ist es öfter so, dass bei stride einige Objekte in den Vordergurnd gebracht werden, die keine Spieler sind.
Genug Theorie, jetzt geht's los !
[*] Logging
Als Logging bezeichnet man den Prozess des Herausfindens der Parameter.
Ich werde zuerst das StrideLogging erklären. PrimitiverCount und NumVertices geht ganz einfach anaolg dazu.
Der Vorteil dieses Toolkits ist der, dass es eine grafische Oberfläche bereitstellt. Die macht das Loggen wesentlich schneller, als wenn man nur einzelne Tasten ingame benutzen kann. Das Problem dabei: Viele D3D-Spiele laiufen im Vollbildmodus. Wie komm ich dann an die GUI?
Um dieses Problem zu umgehen, hab ich in das ganze remote gemacht. Das heißt, man kann nun einfach das Spiel auf einem PC laufen lassen und die GUI auf einem anderen PC. So kann man sehr schnell alle Werte loggen. Das ganze auf einem Rechner auszuführen macht nur dann Sinn, wenn man das Spiel im Fenstermodus starten kann.
Gut, dann mal los.
Als erstes müsst ihr das Spiel starten, für das ihr den Wallhack erstellen wollt.
Anschließend müsst ihr die StrideLogger.dll in den Prozess injizieren. Das könnt ihr mit einem beliebigen DLL-Injector machen. Ich benutze hier Winject.
Als nächstes wird die StrideLoggerGUI.exe auf dem zweiten Rechner gestartet. Dort einfach die IP des Rechners eingeben, auf dem das Spiel läuft, API auswählen und auf "Connect" klicken. Solltet ihr das ganze auf dem gleichen Rechner laufen lassen, einfach die 127.0.0.1 stehen lassen.
Wartet nun, bis dieses Fenster aufgeht:
Das ist das Hauptfenster. Hier eine kurze Erklärung:
- Hier kann man Listen einsehen, speichern oder Elemente löschen
- Farbe und Z-Buffer Einstellungen
- Der Startpunkt beim NumVertices-Logging
- Der Maximalwert für "Start". Dieser wird benutzt, damit die TrackBar richtig verwendet werden kann
- Öffnet die "ZoomBar". Wird gleich noch genauer eklärt.
- Fügt die aktuelle NumVertices/PrimitiveCount-Kombination hinzu
- Setzt primitveCount-Start auf 0 und primitiveCount-Range auf 10000, so dass alle primitiveCount Werte markiert werden
- Das gleiche für NumVerticves
- Setzt alle Werte zurück
Um einen Stride zu loggen, muss als erstes "Range" gesetzt werden. Range gibt an, wie viele Strides ab Start markiert weden sollen. Ein Beispiel:
Start = 52
Range = 19
Alle Objekte mit einem Stride von 52 bis 71 werden markiert.
Range sollte einen Wert haben, der es erlaubt, einigermaßen Schnell auf der TrackBar zu scrollen, aber dennoch nicht so groß ist, dass zu viele Strides markiert werden.
Anfangs würde ich da vielleicht 20 empfehlen.
Nachdem Range gesetzt ist, kann man anfangen den "Strart"-Balken langsam nach oben zu ziehen, bis die gesuchten Objekte (Spieler) markiert werden.
Wenn das der Fall ist, ganze einfach auf "Zoom" klicken und auf diesem Balken wieder scrollen, bis die Player wieder markiert werden. Dann nur noch auf Set klicken.
Jetzt muss dieser Stride in die Stride-Liste hinzugefügt werden. Das geht ganz einfach mit einem Klick auf "Add".
Dieser Prozess muss nun wiederholt werden, bis alle Spieler markiert werden (meistens reicht 1 Stride).
Jetzt müssen die geloggten Strides gespeichert werden. Einfach auf "Lists->Stride List->Save" klicken und einen Ort auswählen.
Wie bereits gesagt, kann man alternativ auch primVerts (also eine Kombination aus NumVertices und PrimitiveCount) geloggt werden. Diese haben den Nachteil, dass jedes Playermodel einen eigenen hat und deshalb der Loggingaufwand um einiges größer ist. Dafür funktioniert das immer und man hat im Normalfall keine anderen Objekte, die auch noch in den Vordergund gezeichnet werden.
Zuerst muss der NumVertices Wert geloggt werden. Dazu klickt man auf "All Prim", was dafür sorgt, dass jedes Objekt, egal welchen PrimitiveCount-Wert es hat, markiert wird (natürlich nur, wenn es in der NumVertices-Reichweite liegt).
Dann einfach analog zum Strideloggen, den NumVertices-Wert loggen. Allerdings würde ich hierbei den Rangewert auf 100 bis 150 setzen, je nach dem, wie schnell die Verbindung zwischen den 2 PC's und euer Auge ist.
Wenn ihr nach dem "Zoom"-Klicken den exakten Wert habt, macht das gleiche mit PrimitiveCount. Range auf 100 setzen, scrollen bis das Objekt markiert wird, Zoomen und den exakten Wert herausfinden.
Schließlich, wenn ihr den NumVertices UND den PrimitveCount-Wert habt, noch auch "Add" drücken.
Auch das muss nun wiederholt werden, bis alle Spieler markiert sind (kann eine Weie dauern).
Dann wieder auf "Lists->PrimVert List->Save".
Das war das Logging.
[*] Hack erstellen
Das ist ein sehr einfacher Schritt. Startet einfach WallhackMaker.exe. Es sollte sich nun dieses Fenster öffnen:
Klickt auf "Browse Template" und wählt ein beliebiges Template aus. Welches sollte ich nehmen? Nun, die Unterschiede sind folgende: Es gibt verschiedene Tempates für D3D8 und D3D9. Für ein D3D9 Spiel muss auch ein D3D9-Template gewählt werden. Zu erkennen sind diese am Namen.
Als nächstes gibt es noch SINGLEDRAW und DOUBLEDRAW Templates. SINGLEDRAW Templates sind ganz normale Wallhacks. Bei DOUBLEDRAW Templates wird jeder Spieler zweimal in verschiedenen Farben gezeichnet. Einmal mit und einmal ohne Z-Buffer. Das hat zur Folge, dass die Teile eines Spielers, die sich vor einer Wand befinden, in einer anderen Farbe gezeichnet werden, als die, die sich hinter einer Wand befinden.
Nachdem ihr euer Template geöffnet habt müsst ihr einen .psf oder .ssf file öffnen. Das ist das, was bei eurem Logging herausgekommen ist. Ihr könnt auch sowohl einen .psf, als auch einen .ssf file verwenden.
Jetzt nur noch auf "Make" klicken und einen Speicherort klicken.
Jetzt habt ihr einen fertigen Wallhack in Form einer DLL. Diese einfach noch mit einem DLL-Injector ins Spiel injizieren und euer Wallhack sollte funktionieren
[*] Nachwort
Hoffentlich hilft dieses Toolkit jemandem und spart Zeit.
Momentan wird nur D3D9 unterstützt. Ich denke, dass ich in das ganze noch ein wenig erweitern werde.
Aus irgendeinem Grund funktioniert das nicht, mit CS:S. Es scheint ein paar Probleme mit den Hooks zu geben. Je nach dem wie viel Zeit ich habe, werde ich mal schauen, dass das wieder läuft.
Ich werde wahrscheinlich auch noch den Sourcecode zu dem Projekt veröffentlichen. Ganz einfach aus dem Grund, dass sobald ein Spiel irgendeine Protection (meinetwegen gegen D3D-Hooking hat) das ganze Projekt für dieses Spiel völlig nutzlos ist. Wenn ich allerdings den Sourcecode veröffentliche, besteht die Möglichkeit, das ganze mit einem Bypass neu zu kompilieren.
Falls ihr den fertigen Wallhack irgendwie transportieren wollt (auf einen Server hochladen, auf einen USB-Stick ziehen) achtet darauf, dass die ADS nicht verloren gehen. Deshalb sicherheitshalber zippen.
Viel Spaß damit,
Sydr4 [

Hier könnt ihr euch den Spaß downloaden:







