Index:
1. Die Anfänge
1.1 Was kann AutoIt, was kann es nicht?
1.2 "Hello World"
1.3 Variablen
2. Mein erstes Programm
2.1 Einfache Arrays
2.2 Mehrdimensionale Arrays
2.3 (Aim)Bots
2.4 Das GUI
2.5 Koda Formdesigner
3. Andere Hacks
3.1 NomadMemory
3.2 Cheatengine und AutoIt
4. Schlusswort
--------------------------------------------------------------------------
1.1 Was kann AutoIt, was kann es nicht?
Zu allererst ist wichtig, dass man weiß, dass AutoIt nur eine Programmiersprache für Anfänger von Programming und für schnelles Botting und Hacking ist, sie wird euch bei großen Projekten wenig nützen, da sie für professionelle Entwicklung einfach zu simpel ist. Es eignet sich aber eben deshalb gut als Sprache für Einsteiger.
Man kann natürlich auch gleich mit schwereren Sprachen anfangen, aber AutoIt ist ein guter Einstieg.
1.2 "Hello World
Um euch in den Skripteditor SciTe einzuführen, werde ich mit euch zuerst ein standard "Hello World" - Programm schreiben.
Dafür werde ich eine Message Box benutzen, also ein einfaches Popup, das einen Text anzeigt.
Code:
MsgBox(0,"Test","Hello World")
Erklärung:
MsgBox der Befehl für das Anzeigen einer Message Box
0 Das ist im Moment noch unwichtig und zu kompliziert
"Test" Der erste String steht für den Titel der Box
"Hello World" Der zweite String steht für den eigentlichen Text in der Box
1.3 Variablen
Das wichtigste was man zum Anfang des Programmierens wissen muss:
Was sind Variablen?
Variablen werden für die meisten Befehle benutzt. Falls ihr euch an die Schule erinnert, da waren Variablen meistens Buchstaben, also X, Y, Z, etc.
Diese Buchstaben stehen für Zahlen, Wörter oder Ähnliches.
Das funktioniert in AutoIt und den meisten anderen Programmiersprachen genauso, allerdings kann man hier nicht nur Buchstaben benutzen, es können auch ganze Wörter oder selbst Zahlen sein.
Um Variablen in AutoIt zu deklahieren (Festzulegen, was für was sie stehen)
benutzt man das Zeichen $ vor dem Namen der Variable.
Außerdem setzt man noch Dim davor. (Muss man nicht, verhindert aber bestimmte Fehler, auf die ich jetzt nicht eingehen möchte)
Ein Beispiel:
Code:
Dim $Variable1 = 10 Dim $Variable2 = "Hello World"
Und $Variable2 steht für den Satz: Hello World
An dieser Stelle ist noch wichtig zu sagen, dass in AutoIt Strings, also Sätze oder Wörter IMMER mit " " umgeben sind.
2.1 Einfache Arrays
Was sind Arrays?
Arrays sind Variablen, die mehrere andere Variablen speichern.
Klingt kompliziert, ist aber eigentlich ganz simpel.
Sie werden deklahiert wie ganz normale Variablen, nur hängt man dahinter noch eine eckige Klammen an, die anzeigt wieviele Variablen der Array enthält.
Außerdem müssen wir noch Array.au3 includen, wie das geht zeige ich im Beispiel.
Hier ein Beispiel zum besseren Verständnis:
Code:
#include <Array.au3> Dim $Array[3] $Array[0] = "Hello World" $Array[1] = 25 $Array[2] = "String" _ArrayAdd($Array,50) _ArrayDisplay($Array,"Kompletter Array")
#include fügt eone externe AutoIt Datei ein, mit deren Hilfe bestimmze Sachen benutzt werden können, die nicht standardmäßig in AutoIt enthalten sind
Dim $Array[3] deklahiert einen Array mit insgesamt 4 speicherbaren Werten. Aber warum nicht 3 Werte?
Im nächsten Abschnitt sieht man, das ich bei $Array[0], also bei der 0ten Variable von $Array begonnen habe, das macht insgesamt dann also 4 Variablen.
Mit dem neuen Befehl _ArrayAdd füge ich dem Array ($Array, den Wert 50) hinzu, dieser wird einfach in den frühesten, ncoh nicht belegten Platz eingefügt, in unserem Fall $Array[3]
2.2 Mehrdimensionale Arrays
Ich werde hier nicht zu sehr auf Arrays eingehen, da man als kleiner Progger überhaupt nicht alles braucht, trotzdem können mehrdimensionale Arrays hilfreich sein...
Während Eindimensionale Arrays wie Listen arbeiten,
fungieren z.B. Zweidimensionale Arrays wie Tabellen.
Sie werden ähnlich deklahiert:
Code:
Dim $ZArray[10][5]
Es gibt auch Vieldimensionale Arrays, also Würfel als dreidimensionale Arrays oder Vierdimensionale Arrays, ohne eine definierbare Form
Also:
Code:
Dim $DArray[10][10][5]
Code:
Dim $VArray[5][10][5][10]
Und der Array VArray kann 2500 Variablen vierdimensional speichern.
2.3 (Aim)Bots
Nun zu einem ganz anderen Thema, das wohl der Grund ist, warum AutoIt von so vielen benutzt wird, es hat funktionen, die es zu einem perfekten Botprogramm machen.
Dazu gehören z.B.
Sleep()
PixelSearch()
MouseMove()
MouseClick()
HotKeySet()
_Func() / Func()
PixelGetColor()
While x
Do x Until y
Und natürlich auch das einfache GUI Design, zu dem ich später noch komme.
Um einen einfachen Aimbot zu programmieren, werd ich euch wieder einen Code zeigen und dann alles erklären. Dabei nehme ich an, dass die gegner als orangefarbene Punkte angezeigt werden.
Wie man an die genau Farbe als Hex-Angabe kommt, zeige ich euch noch später.
Code:
HotKeySet("{F8}","_Exit") While 1 $Search01 = PixelSearch(0,0,1800,1800,0xFF3300) If IsArray($Search01) = True Then MouseMove($Search01 [0], $Search01 [1],1) MouseClick("left") EndIf WEnd Func _Exit() Exit EndFunc
HotKeySet setzt den Hotkey F8 auf die Funktion _Exit, welche ich am Ende deklahiere. Der Code
Code:
Func _Exit() Exit EndFunc
Aber dieser Abschnitt interesiert uns eigentlich am meisten:
Code:
While 1 $Search01 = PixelSearch(0,0,1800,1800,0xFF3300) If IsArray($Search01) = True Then MouseMove($Search01 [0], $Search01 [1],1) MouseClick("left") EndIf WEnd
Die Variable $Search01 ist der Pixelsearch Nach dem Pixel mit der Farbe 0xFF3300 im Radius von Pixel 0,0 (oben,links) 1800,1800 (unten,rechts) also der ganze Bildschirm. Der Nächste schritt überprüft, ob die Farbe gefunden wurde und wenn ja:
Dann Bewege die Maus zur Position des Pixels und klicke mit links.
Das wäre ein einfacher Aimbot
2.4 Das GUI
Wie schon erwähnt, ist das GUI Design in AutoIt besonders leicht verständlich, trotzdem gibt es natürlich Dinge zu beachten.
Es gibt 2 Gruppen, zwischen denen bei AutoIt unterschieden wird, und zwar:
GUI und GUICTRL
Als GUI (Grafical User Interface) wird das Fenster an sich bezeichnet,
mit GUICreate wird ein neues Fenster erstellt, an das GUI wird immer eine Variable gebunden:
Code:
$Fenster1 = GUICreate(250,250,1,1)
Dabei gibt die erste Zahl der Kombination immer Rechts/Links und die Zweite Oben/Unten an.
Als GUICTRL (Grafical User Interface Control) werden die Eingabemechanismen für das GUI bezeichnet, also Buttons, Labels, Inputboxen, etc.
Mit GUICtrlCreate wird ein neuer Mechanismus erstellt, dieser wird ebenfalls an eine Variable gebunden. Außerdem wird noch angehängt, was man erstellen will:
Code:
$Button1 = GUICtrlCreateButton(100,50,1,1)
2.5 Koda Formdesigner
Wenn man sich mühsames Abmessen und Ausrechnen von Positionen und Längen sparen will gibt es ein super Programm: den Koda Formdesigner. Damit lassen sich in sekundenschnelle Fenster und Funktionen gut erstellen und platzieren.
Nur zu empfehlen!
3.1 NomadMemory
Mit AutoIt kann man natürlich nicht nur Bots machen, sondern auch andere Hacks, dazu gehört auch Memoryhacking.
Dies ist mit NomadMemory möglich (Es geht zwar auch ohne, aber damit ist es wesentlich leichter).
Mit NomadMemory können Anwendungen geöffnet und bestimmte Hex-Werte darin verändert werden.
Beispielcode:
Code:
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <NomadMemory.au3> #RequireAdmin $Form1 = GUICreate("Hack", 207, 100, 192, 125) $Checkbox1 = GUICtrlCreateCheckbox("Geld", 8, 8, 81, 17) $Checkbox2 = GUICtrlCreateCheckbox("Leben", 8, 32, 81, 17) $Input1 = GUICtrlCreateInput("", 88, 8, 105, 21) $Input2 = GUICtrlCreateInput("", 88, 32, 105, 21) $Button1 = GUICtrlCreateButton("Start1", 88, 55, 105, 21) $Button2 = GUICtrlCreateButton("Start2", 88, 80, 105, 21) GUISetState(@SW_SHOW) $Money = 0x102461A0 $HP =0x00104A02 While 1 $nMsg = GUIGetMsg($Form1) Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 If ProcessExists("Game.exe") <> 0 Then MsgBox(0,"Hack","Game.exe found!") $PID = ProcessWait("Game.exe") $OPEN = _MemoryOpen($PID) $NMoney = GUICtrlRead($Input1) If GUICtrlRead($Checkbox1) = 1 Then _MemoryWrite($Money, $OPEN, $NMoney, "dword") EndIf Else MsgBox(0,"Hack","Game.exe not found!") EndIf Case $Button2 If ProcessExists("Game.exe") <> 0 Then MsgBox(0,"Hack","Game.exe found!") $PID = ProcessWait("Game.exe") $OPEN = _MemoryOpen($PID) $NHP = GUICtrlRead($Input1) If GUICtrlRead($Checkbox1) = 1 Then _MemoryWrite($Money, $OPEN, $NHP, "dword") EndIf Else MsgBox(0,"Hack","Game.exe not found!") EndIf EndSwitch WEnd
Das ist ein einfacher Memoryhack den ich kurz gecoded habe. Er basiert nicht auf einem echten Spiel und die Adressen sind nur ausgedacht! Das dient nur zur Demonstration
Also, das GUI interessiert uns gar nicht, ich wollte nur das der Code vollständig ist.
Wir fangen an mit:
Code:
Case $Button1 If ProcessExists("Game.exe") <> 0 Then MsgBox(0,"Hack","Game.exe found!") $PID = ProcessWait("Game.exe") $OPEN = _MemoryOpen($PID) $NMoney = GUICtrlRead($Input1) If GUICtrlRead($Checkbox1) = 1 Then _MemoryWrite($Money, $OPEN, $NMoney, "dword") EndIf Else MsgBox(0,"Hack","Game.exe not found!") EndIf
Überprüfe ob der Prozess existiert.
Wenn ja, dann kommt eine Message Box mit Titel "Hack" und der Beschriftung "Game.exe found!"
(Ich springe kurz runter zum Ende):
Code:
Else MsgBox(0,"Hack","Game.exe not found!")
(Wieder zurück):
Code:
$PID = ProcessWait("Game.exe") $OPEN = _MemoryOpen($PID)
(Letzter Schritt):
Code:
$NMoney = GUICtrlRead($Input1) If GUICtrlRead($Checkbox1) = 1 Then _MemoryWrite($Money, $OPEN, $NMoney, "dword") EndIf
Lese den Wert der Checkbox, die überprüft, ob der Hack durchgeführt werden soll, wenn sie geclickt ist (True/1) dann Überschreibe den Hex-Wert "Geld"
wenn nicht, tue garnichts.
Code:
_MemoryWrite($Money, $OPEN, $NMoney, "dword")
Die Anordnung ist _MemoryWrite(Variable mit Hexwert zu Überschreiben, Variable mit geöffnetem Prozess, Variable mit neuem Dezimalwert, Typ des neuen Wertes (Optional))
Und das war der ganze Code
3.2 Cheatengine und AutoIt
Dies ist nur eine kurze Anmerkung. Im ersten Teil, habe ich nur erklärt, wie man Hex-Adressen und die zugehörigen Values verändert. Jetzt erkläre ich, wie man an die Adressen kommt.
Wer sich mit CE auskennt, kann diesen Teil einfach auslassen.
Zuerst öffnet ihr das Programm, das ihr jacken wollt. Famgt am besten nicht gleich mit Onlinespielen an, da diese oft mit Hackshields o.Ä. ausgestattet sind und manche Values encrypted oder Serverside sind. Am besten fangt ihr mit etwas einfachem an, wie Geld oder Leben in einem Offlinegame zu hacken.
Also wir fangen an indem wir das Programm und Cheatengine öffnen.
Jetzt sehen wir uns den Wert des Geldes an, angenommen dieser beträgt 500, dann gehen wir zu Cheatengine und klicken auf den lauchtenden PC in der linken oberen Ecke, suchen und öffnen unseren Prozess. Wir ändern erstmal die Sucheinstellungen auf Exact Value und All (Byte to Double) wir könnten auch einzeln nach 4 Bytes, Float, Double, etc. suchen, aber wir wissen ja nicht, als was der Geldwert gespeichert ist. Jetzt geben wir 500 ein und klicken auf First Scan.
Es werden warscheinlich mehrere tausend Adressen gefunden. Jetzt geben wir etwas Geld aus z.B. 50, dann suchen wir nach 450 mit Next Scan.
Das machen wir solange, bis wir nurnoch ein paar Adressen übrig haben ca. 3-4 manchmal auch nur 1 oder auch 5 oder 6 kommt ganz auf das Spiel an.
Dann ändern wir einfach den Wert wie es uns gefällt.
Jetzt aber wieder zu AutoIt:
Euch wird auffallen, dass die Adressen garnicht mit 0x anfangen. Allerdings erkennt AutoIt Hex-Adressen nur, wenn man 0x davor setzt (bitte fragt nicht warum, ich hab auch keine Ahnung)...
Jetzt können wir die gefundenen Adressen für unseren Hack benutzen!
4. Schlusswort
Ich hoffe das Tutorial hat euch geholfen und es war nicht zu komliziert, ein bisschen viel Text vielleicht, aber Proggen ist halt keine allzu leichte Sache
Wenn euch noch was einfallen sollte oder etwas unklar ist bitte meldet euch schreibt nen Post, PM mich... oder so.
Und wenn ihr Zeit habt bitte THX
MFG Dradgeyo