Browsing posts in: MW2 Bot in C#

MW2 Bot in C# – Teil 9

In Teil 9 geht es um einen Aimbot bzw. genauer gesagt eine Aimbot-Implementation. Die genaue Mathematik wird zwar nicht ausgelassen, aber nur angeschnitten.

Im Grunde genommen gibt es zwei Arten einen Aimbot zu schreiben:

  1. Man holt sich per GetTagPos() die Position des Kopfes, wandelt den Vector3 in Screenkoordinaten (Vector2) um und verwendet SetCursorPos() der WindowsAPI auf den Punkt an. Das entspricht einer „Mausbewegung“ zum Gegner.
  2. Man verwendet etwas Vector-Mathematik und rechnet den Winkel von Pos1 (eigene Pos) zu Pos2 (Gegnerpos) aus. Nun addiert man diesen Differenzwinkel dem eigenen ViewAngle hinzu und schon aimed man auf das Ziel.

In diesem Artikel wird Methode 2 verwendet, da es einfach präziser und sauberer ist. Am Rand: Mein erster Versuch für einen MW2 Bot mit einem DirectX Overlay hat Methode 1 verwendet 😉

Nachdem meine tollen Paint-Skillz versagt haben muss nun ein Bild herhalten. Eigentlich wollte ich das ganze über ein 3D-Koordinatensystem illustrieren… Wie immer sollte man sich das Bild nicht nur verkleinert anschauen 😉

Oben links sind Debugausgaben zu sehen, u.a. auch meine aktuellen ViewAngles. Dabei befindet sich die Y-Achse exakt gerade aus (parallel zum Boden) und der X-Wert zeigt nach „Norden“.

Continue Reading

0

MW2 Bot in C# – Teil 8

Da ich gut aus der Exkursion zurückgekehrt bin wird es gleich einen weiteren Artikel in der MW2 Bot Serie geben. In diesem wird es sich um die, schon in Teil 0 angesprochene, InlineASM Verwendung unter C# drehen. Dabei wird die SendCommandToConsole-Funktion verwendet, welche es erfordert den Stack zu fixxen. Zudem ist diese Funktion relativ unkomplex und klein, daher kann man sie gut als „Modell“ verwenden 😉

Aber bevor ich über die mehr oder weniger komplexen Vorgänge rede, hier erstmal die Funktion in C++:

VOID SendCommandToConsole( CHAR* szCommand )
{
	DWORD dwSend = (DWORD)0x004D3EA0;  // Die Adresse von SendCommandToConsole
 
	_asm push	szCommand // Wir pushen unseren Command, bzw die Adresse, auf den Stack
	_asm push	0 // Wir pushen eine null auf den Stack (Verwendung unbekannt)
	_asm call	dwSend // Da wir alle erforderlichen Sachen auf dem Stack haben wird die Funktion angesprungen
	_asm add	esp, 0x8 // Und es wird der Stack gefixxt
}

Sieht doch ganz überschaubar aus 😛 Zu erwähnen ist noch, dass auf diesen ASM-Code noch ein RET folgen muss, was aber in diesem Fall vom Compiler später übernommen wird.

Um ASM-Code von C# auszuführen braucht es mindestens folgende Schritte:

  1. Per VirtualAlloc Platz für den Code schaffen. Dabei muss der Speicher auf PAGE_EXECUTE_READWRITE gesetzt werden! Daher ist auch die Verwendung von Marshal.AllocHGlobal nicht möglich, es muss die reine WinAPI verwendet werden.
  2. Den Code zu dem reservierten Speicher kopieren.
  3. Ein Delegate mit dem Typ void auf den Anfang des Codes setzen
  4. Eine Funktion des Types des Delegates erstellen und aufrufen.

Continue Reading

0

MW2 Bot in C# – Teil 7

Heute wird es um einen simplen Triggerbot gehen. Simple daher, weil eine extremst simple Technik verwendet wird. Um den Triggerbot „exakt“ zu haben, müsste man man trigonometrischen Funktionen und Winkeln rechnen, aber wir machen es uns einfacher.

Wir berechnen, ob sich unsere Bildschirmmitte (Da wo wir hinschießen 😉 ) sich in einem Radius zur Mitte des Spielers befindet. Dieser Radius wird aus dem Mainroot-Bone und dem Neckbone gebildet und davon die Hälfte zu der Mainroot-Position in Y-Richtung dazu addiert.Das ganze klingt kompliziert, aber eine kleine Grafik sollte ein bisschen Klarheit schaffen:

Continue Reading

0

MW2 Bot in C# – Teil 6

In den nächsten Tagen werde ich nicht zum posten kommen, daher hier noch ein kleiner Artikel. Es handelt sich um ein relativ simples, aber dennoch extremst cooles Feature. Der Bone-ESP!

Der Bone-ESP zeigt uns einfach jeden der 20 Knochen an. In diesem Gesamtbild  ergibt sie die Entfernung, sowie die Positionierung (liegen, stehend) des Spielers. Dadurch können wir auf eine Box um den Spieler oder so einfach verzichten und das ganze sieht echt gut aus (wenn man es in Bewegung sieht :P)

Continue Reading

0

MW2 Bot in C# – Teil 5

In diesem Teil werden wir einen Nametag-Hack schreiben. Dieser zeigt einfach die ganze Zeit (auch durch Wände) den Namen von Gegnern über deren Köpfen an. Das ist jetzt nicht soooo spektakulär, dennoch ist es gut zum Verständnis von (später folgenden) komplexeren Aktionen.

Um es erst einmal in Pseudocode auszudrücken; Im Grunde müssen wir folgende Schritte machen:

  1. Gehe jeden Spieler-Eintrag in dem Array durch
  2. Wende die WorldToScreen Funktion auf die Position an um die 3D Koordinaten in ein 2D System zu bekommen
  3. Zeichne den Namen des Spielers an der WorldToScreen Position

Klingt relativ simple, oder?

Ich habe hierzu eine Klasse MW2Player, welche die Container von Entity und Clientinfo aus den vorherigen Teilen beinhaltet. Zudem gibt es ein Member „Vector2 vPosOnScreenLast“, welche jeweils geupdated wird:

Continue Reading

0

MW2 Bot in C# – Teil 4

Willkommen zum (richtigen) vierten Teil der Tutorialserie! Hier wird es sich endlich um Delegates  (Funktionszeiger) drehen, mit denen wir eine Font registrieren werden und Text zeichnen! Dabei wird auch auf die Hürde eingegangen, das manche native Funktionen nicht von C# aufgerufen werden können.

Im letzten Teil haben wir die MemoryHelper Klasse behandelt, welche auch die Funktion „GetFunctionFromAddress<T>“ enthält. Anhand dieser Funktion werden wir sofort mit dem ersten Funktionszeiger anfangen, welcher eine Font (Schriftart) der Engine registriert und uns das Handle zurückliefert. Der native C++-Code sieht dazu so aus:

typedef void* (*GetFontType_)(char* FontName, int Unknown1);

Diese Funktion erwartet also einen FontName, sowie unbekannter zweiter Parameter als Integer. Zudem wird ein Handle, hier in Form eines void-Zeigers zurückgeliefert. Ein Void-Zeiger ist einfach ein Zeiger ohne einen bestimmten Datentyp wie Int oder Char.

Continue Reading

0

MW2 Bot in C# – Teil 3

In diesem Teil möchte ich auf das Auslesen von Strukturen aus dem Speicher und meiner Art von Management dieser Klassen eingehen. Am Ende wird noch die Klasse MemoryHelper angeschnitten, welche uns einiges an Abeit ersparen wird 🙂

Bisher haben wir eine Klasse, die Clientinfo Klasse, angeschaut. Diese können wir jetzt direkt verwenden und darauf zugreifen. Doch was ist, wenn wir eine zusätzliche Variable für Clientinfo brauchen oder sogar ein Referenz auf eine andere Klasse? Hier ein Beispiel wie es dann aussehen könnte…

public class Gamemanager
{
   ClientInfo[] arClientinfos;
   // Jetzt fällt auf, wir würden auch noch gerne die Namen in einem einzelnen Array haben
   String[] arNames;
   // Und jetzt wollen wir noch jeder ClientInfo-Klasse eine ID zuordnen:
   Int[] ClientinfoIDs;
}

Das Chaos wäre nach min. 2 weiteren dieser Sachen komplett. Daher hab ich mich entschlossen das ganze über OOP und sog. Container-Klassen zu lösen. Ich weiß nicht ob das einem Design-Pattern entspricht, aber ich vermute mal stark 😀

Continue Reading

0

MW2 Bot in C# – Was will er eigentlich?

In den letzen Tagen hab ich des öfteren die Frage bekommen: „Was kann denn dieser Bot alles?“, „Was bringt das?“ etc. Daher möchte ich hier, vor dem 4. Teil meiner Serie, eine kleine Vorschau geben was Euch noch erwartet und welche Features der Bot haben wird. Zudem möchte ich erwähnen dass ich nur wirklich Spass mit meinem Bot habe, wenn ich damit andere „Hacker“ (wie sie sich nennen -.-) mal zeigen kann was ihr 1337-public-shitbozz kann 😉

Natürlich sollte am Anfang zu erwähnen sein, dass man nicht einfach so, ohne zuvor Grundlagen zu vermitteln, einen Bot coden kann. Und diese Grundlagen werden euch noch bis min. dem 6. Teil der Serie erwarten.

Aber um einen kleinen Ausblick zu geben was der Bot später können wird:

  • Ein Wallhack / ESP, welcher einzelne Bones anzeigt. Des weiteren für jeden Bone eine Überprüfung ob dieser sichtbar ist oder nicht.
  • Ein Nametag-Hack (zeigt die Spielernamen über den Köpfen an).
  • Ein Aimbot, welcher auf jeden einzelnen Knochen Zielen kann.
  • Ein Quickscopebot! (wolltet ihr nicht schon immer mal über 200m einem Cheater in den Kopf Quickscopen?). Quickscopen = Mit einem Sniper reinzoomen bis der Streufaktor 0 erreicht, schießen und wieder rauszoomen.
  • Ein Triggerbot = Sobald ein Gegner unter dem Fadenkreuz (des Snipers) ist wird automatisch geschossen

Natürlich können noch ein paar Fun-Features wie ein 360° Quickscope Bot etc. dazukommen, aber das sollte erstmal das grobe sein.

Und hier noch ein Bild vom aktuellen Stand. Leider kann ich kein Video machen, da dieses, zumindest für den Quickscope Bot, zu krass lagged.



Weiterhin viel Spass beim lesen 😉

Easy

0

MW2 Bot in C# – Teil 2

In Teil 2 beschäftigen wir uns mit dem erstellen von Strukturen und Klassen, welche später mit diesen Informationen aus dem Speicher geholt werden.

Die Hauptschwierigkeit bei dem Erstellen von Strukturen liegt darin, dass sie genauestens beschrieben werden müssen. Wir müssen explizit sagen wo was hingehört, dass wir auch die richtigen Werte in den richtigen Variablen haben 😉 Sprachen wie C++ haben dieses Problem übrigens nicht, da wird einfach sequenziell vorgegangen und das passt dann jeweils auch.

Ich werde hier eine der vielen umgeschriebenen Klassen werde ich hier vorstellen, da sie alle „Schwierigkeiten“ ders expliziten Klassenlayouts hervorhebt. Für alle Klassen und Offsets die ich verwende gehen die Credits an das UC-Forum, bzw. genauer diesen Thread.

Continue Reading

0

MW2 Bot in C# – Teil 1

Willkommen zum ersten „richtigen“ Teil des MW2 Bots. Hier wird vorallem auf das CLR-Hosting eingegangen und am Ende die Basis-Funktionen und der Hook der zu injectenden DLL erklärt.

Widmen wir uns zu erst dem CLR-Hosting. Die in Teil 0 angesprochene Problematik, managed Code in einem unmanaged Programm auszuführen wird durch das sog. Hosting eines CLR-Interfaces umgangen. Auf Wikipedia gibt es zu dem Thema einen schönen Beitrag und eine noch schönere Grafik:


Continue Reading

0

Seiten:12