Also, erstellt euch ein neues au3 Script. Nun kann es auch schon direkt losgehen. Als erstes wollen wir eine GUI (graphical user interface = grafische Benutzeroberfläche) machen bei der wir 2 Checkboxen machen (also 2 verschiedene Funktionen). Da ich nicht der Fan on solchen Start Buttons bin, machen wir es direkt so dass unser kleines Programm nach S4 prüft. Also hier nochmal die Aufgaben als Liste:
1. Erstellen einer GUI mit 2 verschiedenen Funktionen
2. Automatisches Wartn auf den S4Client
3. Ändern der Werte
4. Beenden des Programmes
Also, ich hoffe ihr versteht schon ein bisschen AutoIt und den Umgang mit dem Koda Form Designer. Also, geht in Scite klickt dort auf auf Tools. Nun klickt ihr auf Koda Form Designer. Dort könnt ihr alles mögliche an eurer GUI einstellen. Aber da wir nur 2 Checkboxen haben wollen fügen wir diese ein.
Die eine Checkbox nennen wir Shophack, die andere No Fog. Vergesst bitte nicht eure GUI umzubennen!
So nun fügen wir diese in Scite ein.
Doch dieser Code ist einfach nur Hässlich. Wieso? Nunja, erstes sind 1-2 Includes unnötig außerdem sind viele Sache Zeilenverschwendung und die Variablen müssen noch umbenannt werden. Also, welche Includes sind denn unnötig? Also auf jeden Fall die ButtonConstants.au3 und dann noch bedingt die GUIConstantsEx.au3. Was macht sie denn so unnütz? Diese Includes sind vollgepumpt mit Variablen. Doch die meisten bauchen wir hier nicht. Also entfern bitte folgendes:
Code:
#include <ButtonConstants.au3> #include <GUIConstantsEx.au3>
Code:
#Region ### START Koda GUI section ### Form=
Code:
#EndRegion ### END Koda GUI section ###
Code:
GUISetState(@SW_SHOW)
Code:
GUISetState()
Code:
Case -3
So, weiter gehts. Man sagt ja immer man soll die Trainer als Admin starten. Doch wir können das auch umgehen mit dem Befehl #RequireAdmin. Damit überprüft das Programm ob Adminrechte vorhanden sind, und teilt einen mit das dieses Programm welche erfordert. Also setzen wir den Befehl #RequireAdmin ganz oben am Anfang unseres Scriptes hin.
Achja, falls ihr eine Funktion nicht versteht, dann markiert sie und drückt F1. Dann öffnet sich das AutoIt Hilfefenster und dort ist die Funktion erklärt, meistens auch mit Beispielen.
Nun geht es weiter zum Überprüfen, ob der Prozess namens S4Client.exe vorhanden ist. Wenn ja soll er eine Funktion aufrufen. Doch wie stellen wir das am besten an? Schauen wir uns mal diesen Codeteil genauer an:
Code:
While 1 $nMsg = GUIGetMsg() Switch $nMsg Case -3 Exit EndSwitch Wend
Code:
Case -3 Exit
Code:
If ProcessExists("S4Client.exe") <> 0 Then
_Werte_Ändern()
EndIf
Code:
Func _Werte_Aendern() EndFunc
Code:
#include "NomadMemory.au3"
Code:
#include <NomadMemory.au3>
Diesen setzen wir nun ganz oben bei den WindowsConstants.au3 hin, es ist egal ob drüber oder drunter.
So, nun geht es ans Memorychanging. Dies ist nicht sonderlich schwer wenn man die Funktionen versteht. Folgende Arbeitsabläufe müssen wir machen:
1. Den Memory von S4Client.exe öffnen
2. Auslesen ob ein Häckchen in der Checkbox gesetzt wurde
3. In den Speicher schreiben
4. Den Memory von S4 Client.exe schließen
5. Das Programm beenden
So fangen wir an. Als erstes müssen wir dem Programm sagen welchen Prozess er öffnen soll. Dafür nutzen wir ProcessExists. Dieser Befehl holt sich die PID (Process ID) von den angegebenen Prozess und gibt diese zurück. Da er diese zurückgibt müssen wir das ja irgendwo speichern. Dafür setzen wir diesen Befehl einfach in eine Variable. Das dürfte dann so aussehen:
Code:
$PID = ProcessExists("S4Client.exe")
Code:
Func _Werte_Aendern()
$PID = ProcessExists("S4Client.exe")
EndFunc
Code:
$Open = _MemoryOpen($PID)
So, nun müssen wir abfragen ob Chophack oder No Fog ausgewählt worden ist. Dafür gibt es den Befehl GuiCtrlReat. Diese Aufgabe werden wir in einer If Abfrage lösen. Hier mal die Lösung:
Code:
If GUICtrlRead($Shophack) = 1 Then EndIf If GUICtrlRead($No_Fog) = 1 Then EndIf
So, nachdem wir jetzt wissen wofü 1 und 0 steht können wir auch direkt mit dem Werteändern beginnen. Dafür haben wir den Befehl _MemoryWrite. Dieser ist etwas kompliziert. Schauen wir uns doch mal die Syntax an.
Code:
_MemoryWrite($iv_Address, $ah_Handle, $v_Data, $sv_Type = 'dword')
$iv_Address -> Hier unsere Adresse. Vergesst nicht das 0x davor da die gesuchten Adressen mit Cheat Engine fast immer Hexdezimal sind.
$ah_Handle -> Das Prozesshandle. Also unsere $Open Variable
$v_Data -> unser Wert in den wir die Adresse ändern wollen. Merkt euch, den Wert in "" zu schreiben.
$sv_Type = 'dword' -> Den Typ des Wertes den wir nutzen. Es gibt viele unterschiedliche Typen, hier mal ein paar aufgelistet:
Float -> Floats sind Gleitkommazahlen, also Zahlen wie 1.4 oder 1 oder 6.7846485 oder 23512873.23768123. Floats sind 4 Bytes groß.
Doule -> Double sind doppelte Floats. Dementsprechend sind sie 8 Bytes groß. Dadurch lassen sich deutlich präzisere Zahlen errechnen.
char -> chars sind strings. Also Werte wie "Hallo" oder "Deine Mudda123" oder "elite34_5"
long -> das sind Werte im 4 Bytes Bereich
So, das genug Datentypen, wenn ihr mehr braucht könnt ihr sie ja einfach mal googeln. Nur eins muss ich euch noch klar machen, nämlich der Umgang mit char. Angenommen ich habe das Wort "Hallo", dann müsste ich folgendes bei $sv_Type = 'dword' schreiben:
char[6]
Wieso char[6]? Char um unseren Programm zu sagen das wir ein Wort nehmen. Die 6 steht für die Buchstabenanzahl + 1. Unser Wort "Hallo" besteht aus 5 Buchstaben. Plus 1 gerechnet ergiebt dies die Zahl 6. Doch wieso +1? Das liegt daran dasman beim Schreiben des Speichers ein Byte mehr benutzen muss. Doch wieso? Weil ein String mit einem "\00" Byte abgeschlossen wird. Desswegen wird bei Cheat Engine auch gefragt "Terminate string with zero".
Aber weiter nun zum Memorychange Befehl. Angenommen wir haben die Adresse 0x00D3F00C (keine Angst, die Adresse ist uralt und gilt schon lange nichtmehr). Diese ist ein String namens "Off". Wir wollen diesen String in On changen um unseren Shophack zu erzielen. Also sieht unser Befehl so aus:
Super, da dies der Shophack ist müssen wir den aber auch in die Abfrage des Shophacks reintun. Welche war das nochmal?
Also müsste dass dann so aussehen:
Gut gemacht, nun aber noch No Fog. Angenommen wir haben die Adresse 0x00F87CD1 (Diese Adresse funktioniert ebenfalls nicht da sie erfunden ist). Diese Adresse ist ein Float und wir möchten sie in den Wert 6.2 ändern (ist kein Originalwert denn No Fog ist eigentlich ein String aber ich möchte euch noch zeigen wie das in Float geht). Also selbe Frage wieder. Wo packen wir das hinein?
Okay, und wie würde es mit dem MemoryWrite Befehl aussehen?
So, ich muss aber noch sagen dass ihr das "Float" nicht unbedingt großschreiben müsst. Ihr könnt zB auch FLOAT oder float schreiben dass ist egal. Hauptsache ist dass das Programm es versteht.
So, das war es ja auch schon fast. Es fehlen uns noch 2 Arbeitsvorgänge. Das schließen des Speichers (auf Englisch Memory) und das beenden des Programmes. Als erstes schließen wir mal den Memory. Wo? Unter unsere ganze If Abfragen. Zum schließen des Speichers gibt es den Befehl _MemoryClose. Dieser ähnelt stark den _MemoryOpen Befehl. Doch wie nutzen wir ihn? Ganz simpel, geöffnet haben wir den Memory mit _MemoryOpen und haben es in der Variable $Open gespeichert. Da wir nun den geöffneten Memory schließen wollen, nehmen wir einfach wieder die $Open Variable und überschreiben diese. Das sollte dann so aussehen:
Fein gemacht. Nun noch das Beenden des Programmes. Dafür gibt es den Befehl Exit. Also schreiben wir direkt unser unseren _MemoryClose Befehl ein Exit.
Respekt, ihr habt soeben euren Trainer fertig gemacht. Eure Funktion _Werte_Aendern dürfte nun so aussehen
Noch etwas, wenn ihr euren Source kommentieren wollt dann setzt vor euren Kommentaren ein ";". Also zB so
Code:
;Hallo das ist ein Kommentar
Da ihr mit eurem Programm nun fast fertig seid geht es um den Feinschliff. Drückt dafür einfach STRG + T. Schon wird eurer AutoIt Source in die richtige Form gebracht und ist gleich viel Überswichtlicher. Nun geht es ums Compilen. Dabei wird euer geschriebener Source kompressiert und in einer ausführbaren Datei auf euren Computer gespeichert. Wenn ihr Compilen wollt drückt ihr STRG + F7. Dann kommt ihr in das Compile Fenster von AutoIt. Jetzt bestehen trotzdem noch ein paar Fragen. Ich würde ruch empfehlen bei Output type A3X auszuwählen.
Aus den Grund weil dadurch euer Script in der Laufzeitumgebung von AutoIt gestartet wird und somit mehr Rechte hat. Der Nachteil ist, dass der Traineruser AutoIt installiert haben muss. Wenn ihr bei Output type EXE ausgewählt habt dann brauch der User zwar kein AutoIt aber es wird höchstwahrscheinlich nicht funktionieren da euer Programm nicht genug Rechte hat. Also empehle ich euch A3X auszuwählen.
Nun noch Output arch.
Dort müsst ihr auswählen für welche Bit Systeme euer Programm läuft. Ich empfehle euch "Compile X86 version. (default)" auszuwählen, da es dann bei 32 Bit und 64 bit funktioniert.
So, ob ihr UPX benutzen wollt müsst ihr wissen. Wenn ihr euer Programm im Anschluss noch mit Themida packen wollt (geht nur wenn ihr es als EXE compilen tut) dann dürft ihr UPX nicht auswählen.
Wenn ihr fertig seid drückt ihr auf Compile Script und euer Programm wird erstellt.
Das war es auch schon mit meinem kleinen Tutorial. Ich hoffe doch sehr ihr habt etwas gelernt und nicht nur C&P gemacht. Man sollte schließlich wissen was man tut
Bei Fragen jeglicher Art steh ich euch natürlich zur Verfügung. Es würde mir aber gefallen wenn ihr die Fragen in diesen Thread posten würdet da ich nicht so auf PM Spam stehe.
Ansonsten, schönen Tag noch!
Btw, wer nicht googlen kann findet diverse Dateien unten im Anhang
Downloads






