Hallo liebe E*PvP Community,
ich habe es ja bereits in einem Thread genannt, nun werde ich hier ein richtiges Tutorial posten.
Ich werde im Folgenden nochmals darauf eingehen, wie ihr ohne Bypass mit CheatEngine Adressen suchen könnt. Außerdem werde ich darauf eingehen, wie ihr mit AutoIT einen Trainer erstellt(NomadMemory.au3 wird nicht benötigt!) Ich habe bewusst nur die WinApi funktionen erklärt, ganz einfach aus dem Grund, dass jeder noob mit der NomadMemory umgehen kann und man daraus nichts lernt. Anhand der Api calls sieht man viel deutlicher was man eigentlich gerade macht.
Ich werde versuchen, alles so weit es geht zu erklären, damit das ganze kein stumpes Step by Step oder C&P TuT wird, die mir nämlich srsly gegen den Strich gehen. Nun gut, ich hoffe ihr nehmt es ein bisschen ernst und lest alles wenn es euch interessiert
English:
Hello, E*PVP Community
Like I’ve said already in another thread, I made a great tutorial for you.
In the following I will explain, how you can search addresses with CheatEngine without any Bypass.
Besides, you will find out, how you can make a Trainer using AutoIT.(No NomadMemory.au3 needed!)
I’ll try to explain everything so far as I can, to prevent it of becoming a dumb Step By Step Tutorial or just a C&P TuT that I really don’t like. Anyways, I hope that you’ll be serious to this and read everything if you are interested
Like I’ve said already in another thread, I made a great tutorial for you.
In the following I will explain, how you can search addresses with CheatEngine without any Bypass.
Besides, you will find out, how you can make a Trainer using AutoIT.(No NomadMemory.au3 needed!)
I’ll try to explain everything so far as I can, to prevent it of becoming a dumb Step By Step Tutorial or just a C&P TuT that I really don’t like. Anyways, I hope that you’ll be serious to this and read everything if you are interested
Adressen mit Cheat Engine suchen:
Was wird benötigt?
-CheatEngine, neueste Version hier:Hier geht es los:
-Einen funktionierenden Suspender (Siehe Index)
-Brain.exe
[OLD]Fangen wir an...
Zuerst müsst ihr euren Process Explorer Installieren und starten.
Nachdem ihr ihn geöffnet habt, solltet ihr ein Fenster mit euren ganzen Prozessen bestaunen können.
Nun startet ihr wie gewohn S4League. Nachdem ihr beim Patcher "Start" betätigt habt und HGWC geladen ist, werden HGWC.exe,S4Client.exe,XTrap.exe in eurem Explorer erscheinen. Diese friert ihr nun durch "Rechtsklick => Suspend" ein.[OLD]
New: Nehmt einen aktuelleren Suspender, da Process Explorer größtenteils nicht mehr funktioniert.
Jetzt könnt ihr getrost Cheat Engine starten.
Das Schwierigste ist eigentlich, überhaupt Values zu finden.
Einige Values sind ja mittlerweile Bekannt und können immernoch verwendet werden, so wissen wir heute z.B. das die X Position der Kamera den Wert 130 und die Y Position den Wert 350 Float hat.
Durch einen erneuten "Doppelklick" auf diese Zahl, können wir sie ganz einfach verändern. Was eine Erhöhung oder Verminderung bringt, sollte klar sein, aber für die, die es nicht wissen, erkläre ich es noch einmal.
Ihr kennt ja sicher noch das berühmte Koordinatensystem aus der Geometrie.
Es gibt eine Horizontale- (X) und eine Vertikale- (Y) linie.
Die y-Linie hat in der Mitte "0". Geht man weiter nach unten sinkt er, geht man weiter nach oben, steigt er. Das heist, ändern wir unsere "350" zu "700" ist unsere Kamera doppelt soweit oben wie normal. Ändern wir ihn allerdings zu "-350" ist er ein ganzes Stück weiter unten. "0" ist die Mitte, also dort wo unserer Charakter steht. Nachdem ihr die Value geändert habt, schließt ihr Cheat Engine wieder und "entfriert" eure Prozesse "S4Client.exe";"HGWC.exe";"XTrap.exe" in dem ihr Rechtsklick=>Resume drückt.
Das war es erstmal zur Cheat Engine.
Zuerst müsst ihr euren Process Explorer Installieren und starten.
Nachdem ihr ihn geöffnet habt, solltet ihr ein Fenster mit euren ganzen Prozessen bestaunen können.
Nun startet ihr wie gewohn S4League. Nachdem ihr beim Patcher "Start" betätigt habt und HGWC geladen ist, werden HGWC.exe,S4Client.exe,XTrap.exe in eurem Explorer erscheinen. Diese friert ihr nun durch "Rechtsklick => Suspend" ein.[OLD]
New: Nehmt einen aktuelleren Suspender, da Process Explorer größtenteils nicht mehr funktioniert.
Jetzt könnt ihr getrost Cheat Engine starten.
Das Schwierigste ist eigentlich, überhaupt Values zu finden.
Index - "Value": Eine Value ist nichts anderes als ein Wert, wie z.B 7So, alle Sachen wie Munition,Hp,Sp,Geschwindigkeit,Schlagreichweite usw. müssen ja irgendwo deklariert sein, denn das Spiel kann ja nicht einfach welche erfinden oder raten.
Beispiel - "Value": Sieben 1 Euro Stücke haben eine Value von 7€
Index - "Deklarieren": Einen wert deklarieren heist nichts anderes wie "Erklären"So wenn ihr z.B. die Kameraposition verändern wollt, müsstet ihr die Koordinaten dieser herausfinden. Man kann zwar Random(Also nach dem Zufallsprinzip) suchen, wobei diese Methode reine Glückssache ist, oder man guckt sich den S4Client mithilfe eines Debuggers an um Values heraus zu finden.(Müsst ihr nicht wissen, darauf gehe ich nicht ein)
Beispiel - "Deklaration": In der Zeitung steht "Verkaufe Porsche". Nun weis der Käufer z.B. nicht, welche Farbe der Wagen hat. Der Verkäufer hätte hineinschreiben müssen "Farbe: Rot". Somit hätte er die Farbe "Deklariert" also dem Käufer erklärt.
Einige Values sind ja mittlerweile Bekannt und können immernoch verwendet werden, so wissen wir heute z.B. das die X Position der Kamera den Wert 130 und die Y Position den Wert 350 Float hat.
Index - "Float": Float ist nichts anderes wie eine GleitkommazahlSo, wenn wir nun unsere Position verändern wollen, brauchen wir zunächst eine Adresse, die die Value beinhaltet.
Beispiel - "Float": 3,5 ist eine Gleitkommazahl
Index - "Adresse": Nein nicht wo ihr Wohnt, sondern der Ort der ValueGut, wie wir eben mitlerweile wissen, hat die Y Position der Kamera, den Wert 350 Float. Das heist, wir Suchen in der S4Client.exe nach 350 Float mit unserer Cheat Engine. Dazu starten wir diese und öffnen zunächst den mittlerweile eingefrorenen Prozess S4Client.exe damit unsere CE(Cheat Engine) ein Ziel hat. Nun geben ändern wir in der ComboListe wo standartmäßig "4 Bytes" steht, den Typ zu "Float". Dann geben wir in der Suchleiste "350" ein und suchen nach diesem Wert. Jetzt erscheinen mehrere 1000 Objekte in unserer Ergebnisliste, wtf luuul woher soll ich bitte wissen, was die richtige ist? Keine Angst, so schwer ist es in viele Fällen gar nicht einmal. Wir haben Glück, die Kamera Position ist keine Dynamische, sondern eine Statische Adresse.
Beispiel - "Adresse": Ihr habt die Hausnummer 15, nun gibt es ja die Hausnummer 15 nicht nur einmal, sondern ganz ganz oft. Wie soll da der Postbote wissen wohin er den Brief schicken soll? Genau, er hat den Namen von der Straße in der ihr wohnt. Mit Values ist es genauso, es gibt bestimmte Werte sehr häufig, deswegen hat jede Value ihre eigene Adresse.
Index - "Dynamisch": Dynamisch ist etwas, was sich ändern kann wie es will
Beispiel - "Dynamisch": Wenn wir eine Dynamische Adresse haben, heist es nur, das sie nicht gleich bleibt, sie ändert sich immer wieder, von daher ist es schwer damit einen Trainer zu machen. Es wäre so wie wenn ihr andauernd umzieht, dann müssen alle Dateneinträger bei Versicherungen,Post usw. erstmal geändert werden, damit wieder alles korrekt abläuft.
Index - "Statisch": Statisch ist etwas festes, was sich normal nicht verändert/bewegtNun da wir wissen, dass unsere Kameraposition eine statische Position hat und sie deshalb in unserer CE "Grün" angezeigt wird, können wir unsere Suchergebnisse einschränken. Ein weiterer Hinweis, den wir mittlerweile herausgefunden haben ist, das fast alle wichtigen statischen Adressen mit "00C" Anfangen. Und wenn wir jetzt einen Blick in unsere CE werfen, können wir relativ weit oben die Adresse "00CA71F8" ausfindig machen. Diese brauchen wir. Macht einen "Doppelklick" auf sie um sie in unsere Adresstabelle zu kopieren. Wir sehen, es steht immer noch "350" dahinter, dies ist ja auch die Value, die das Spiel standardmäßig so vorgibt.
Beispiel - "Statisch": Wenn eine Adresse Statisch ist, verändert sie sich nicht von alleine. In S4 nur durch neue Patches etc. Unsere CE zeigt diese Art von Adressen in der Farbe "Grün" an. Vergleichen kann man es mit einer Kamera. Wenn man sie in der Hand hält, wackelt es immer so ein bisschen und somit verändert sich das Bild immer wieder = Dynamisch
Deshalb kauft man sich ein Stativ(Abgeleitet von Statisch) damit die Kamera immer genau einen festgelegten Fixpunkt hat = Statisch
Durch einen erneuten "Doppelklick" auf diese Zahl, können wir sie ganz einfach verändern. Was eine Erhöhung oder Verminderung bringt, sollte klar sein, aber für die, die es nicht wissen, erkläre ich es noch einmal.
Ihr kennt ja sicher noch das berühmte Koordinatensystem aus der Geometrie.
Es gibt eine Horizontale- (X) und eine Vertikale- (Y) linie.
Die y-Linie hat in der Mitte "0". Geht man weiter nach unten sinkt er, geht man weiter nach oben, steigt er. Das heist, ändern wir unsere "350" zu "700" ist unsere Kamera doppelt soweit oben wie normal. Ändern wir ihn allerdings zu "-350" ist er ein ganzes Stück weiter unten. "0" ist die Mitte, also dort wo unserer Charakter steht. Nachdem ihr die Value geändert habt, schließt ihr Cheat Engine wieder und "entfriert" eure Prozesse "S4Client.exe";"HGWC.exe";"XTrap.exe" in dem ihr Rechtsklick=>Resume drückt.
Das war es erstmal zur Cheat Engine.
Searching Addresses using Cheat Engine(English Translation by Esuke2000)
What’s required?
Cheat Engine, download latest version here:

-Process Explorer:
(You can also find another released suspending tool. Search it yourself if you are going to do so. )-Brain.exe
So now, here we go:
So now, let’s start..
After Installation of Process Explorer and Cheat Engine, the first tool we will work with is Process Explorer. Start it and you will see that it is just a expanded version of the Task Manager(The Task Manager lacks the function that we will need for S4League).
Now start S4 League. After you have clicked the Start Button on the patcher and HGWC.exe has loaded, the processes HGWC.exe, S4Client.exe and Xtrap.exe will appear in the process list. You have to suspend them all like shown on this Screenshot:
You can now start Cheat Engine without any problems.
The most difficult part is, to find any values at all.
Index - “Value”: If you are neither german nor english, translate this word into your language and you will find out what it means -.-
Example – “Value”: 7 1€ pieces have a value of 7€
All things like Ammo, HP, SP, Speed, Hitrange, etc. always have to be declared, because S4 League can’t make them itself, of course.
Index – “Declaration”: To declare a value means nothing more than “explaining” to the Program, what it does.
Example – “Declaration”: If someone sells a car a complete declaration would be when he would explain ALL features of it like Colour, Speed, etc.
So now, if you want to change the camera position, you would have to find its coordinates. You can just try your luck and search some random values.
Today, some values are already well known and can be used freely. So today, we know that the X Position of the Camera has the value 130 and the Y Position has the value 350. Both have the value type Float.
Index – “Float”: The type “Float” means that the Value is a Floating Point. (More info: Floating point - Wikipedia, the free encyclopedia)
Example –“Float”: 3,5 is a Floating point
If you want to change the Position, you need the address that contains that value.
Index – “Address”: No, not the Location where you live. In CE, an address means the location, where the value belongs to.
Example – “Address”: You have the house number 15, but you don’t know what house is meant. By specifying your address, you know what house with number 15 is really meant and how to get to it. The same thing is with values and addresses in Cheat Engine.
Well, since we already know, that the Y Position of the camera is 350 Float, we are now going to search that value with CE. To do this, you have to open the frozen process with Cheat Engine by clicking on the button on the upper left and double clicking S4Client.exe. Now we’ll change the ComboBox, that says “4 Bytes” by default, to “Float”. Now we’ll enter the value 350 and search for it. You will get more than 1000 Objects as a result, WTF how can we know what address is the right one? But don’t be afraid, in the most cases it’s not really hard. We are lucky that the camera position is not a dynamic, but a static address.
Index – “Dynamic”: Dynamic is something, that always changes and can’t stay on the same position.
Example – “Dynamic”: If we have a dynamic address, it does only mean that it changes every time we start it so that’s why it’s hard to make a trainer that modifies those. It’s like you change your location very often.
Index – “Static”: Static is something that normally does not move by itself.
Example – “Static”: An address is static, when it doesn’t change by itself. In s4, it changes with new patches etc. The CE marks this kind of addresses with green colour.
You can compare it with a camera. When you hold it in your hands it wiggles all the time so the picture always changes (= dynamic).
So you buy a tripod to give the camera a fixed point (= static).
So now since we know that our camera position has a static address which is shown in a “green colour” we can reduce our search results. Another note that we have found is that almost all most important addresses begin with “00C”. And if we now look at our CE, we can see the address “00CA71F8” at the very top. This is the one we need. “Double click” it to add it to the address table. We see that it still has the value 350 since it’s the default value.
By double clicking this value, we can easily change it. I hope you understand what in- or decreasing would cause. But I’ll explain it for those who don’t get it.
I think you know the famous coordinate system from Geometry.
There exists a horizontal (X) and a vertical (Y) line.
The y-Line is 0 when it’s in the middle. Decreasing it makes it sink, Increasing makes it raise.
That means, changing it to 700 doubles its height. Though, changing it to –350 makes it sink very lowly.
After you have changed the value, close Cheat Engine and “unfreeze” the processes "S4Client.exe";"HGWC.exe";"XTrap.exe" by right clicking and then clicking resume at each process.
You are done with Cheat Engine!
After Installation of Process Explorer and Cheat Engine, the first tool we will work with is Process Explorer. Start it and you will see that it is just a expanded version of the Task Manager(The Task Manager lacks the function that we will need for S4League).
Now start S4 League. After you have clicked the Start Button on the patcher and HGWC.exe has loaded, the processes HGWC.exe, S4Client.exe and Xtrap.exe will appear in the process list. You have to suspend them all like shown on this Screenshot:
You can now start Cheat Engine without any problems.
The most difficult part is, to find any values at all.
Index - “Value”: If you are neither german nor english, translate this word into your language and you will find out what it means -.-
Example – “Value”: 7 1€ pieces have a value of 7€
All things like Ammo, HP, SP, Speed, Hitrange, etc. always have to be declared, because S4 League can’t make them itself, of course.
Index – “Declaration”: To declare a value means nothing more than “explaining” to the Program, what it does.
Example – “Declaration”: If someone sells a car a complete declaration would be when he would explain ALL features of it like Colour, Speed, etc.
So now, if you want to change the camera position, you would have to find its coordinates. You can just try your luck and search some random values.
Today, some values are already well known and can be used freely. So today, we know that the X Position of the Camera has the value 130 and the Y Position has the value 350. Both have the value type Float.
Index – “Float”: The type “Float” means that the Value is a Floating Point. (More info: Floating point - Wikipedia, the free encyclopedia)
Example –“Float”: 3,5 is a Floating point
If you want to change the Position, you need the address that contains that value.
Index – “Address”: No, not the Location where you live. In CE, an address means the location, where the value belongs to.
Example – “Address”: You have the house number 15, but you don’t know what house is meant. By specifying your address, you know what house with number 15 is really meant and how to get to it. The same thing is with values and addresses in Cheat Engine.
Well, since we already know, that the Y Position of the camera is 350 Float, we are now going to search that value with CE. To do this, you have to open the frozen process with Cheat Engine by clicking on the button on the upper left and double clicking S4Client.exe. Now we’ll change the ComboBox, that says “4 Bytes” by default, to “Float”. Now we’ll enter the value 350 and search for it. You will get more than 1000 Objects as a result, WTF how can we know what address is the right one? But don’t be afraid, in the most cases it’s not really hard. We are lucky that the camera position is not a dynamic, but a static address.
Index – “Dynamic”: Dynamic is something, that always changes and can’t stay on the same position.
Example – “Dynamic”: If we have a dynamic address, it does only mean that it changes every time we start it so that’s why it’s hard to make a trainer that modifies those. It’s like you change your location very often.
Index – “Static”: Static is something that normally does not move by itself.
Example – “Static”: An address is static, when it doesn’t change by itself. In s4, it changes with new patches etc. The CE marks this kind of addresses with green colour.
You can compare it with a camera. When you hold it in your hands it wiggles all the time so the picture always changes (= dynamic).
So you buy a tripod to give the camera a fixed point (= static).
So now since we know that our camera position has a static address which is shown in a “green colour” we can reduce our search results. Another note that we have found is that almost all most important addresses begin with “00C”. And if we now look at our CE, we can see the address “00CA71F8” at the very top. This is the one we need. “Double click” it to add it to the address table. We see that it still has the value 350 since it’s the default value.
By double clicking this value, we can easily change it. I hope you understand what in- or decreasing would cause. But I’ll explain it for those who don’t get it.
I think you know the famous coordinate system from Geometry.
There exists a horizontal (X) and a vertical (Y) line.
The y-Line is 0 when it’s in the middle. Decreasing it makes it sink, Increasing makes it raise.
That means, changing it to 700 doubles its height. Though, changing it to –350 makes it sink very lowly.
After you have changed the value, close Cheat Engine and “unfreeze” the processes "S4Client.exe";"HGWC.exe";"XTrap.exe" by right clicking and then clicking resume at each process.
You are done with Cheat Engine!
Einen Trainer mit AutoIT erstellen(Ohne NomadMemory.au3)
Was wird benötigt?
-AutoIT, downloaded und Installiert dieses Kit:

Hier geht es los:
So, ich habe es angekündigt, sowas gibt es hier noch nicht, jetzt mach ich es.
Ich werde euch hier erklären, wie ihr einen Simplen HitRange Trainer macht ohne UDF´s wie "NomadMemory.au3" zu benutzen.
Um auf die WinAPI Funktionen zugreifen zu können, benötigen wir den Include zu "WinAPI.au3" in dem wir am Anfang unseres Scriptes
Unsere wichtigsten Funktionen werden sein:
Dazu müssen wir ein paar Sachen wissen:
-Prozessname
-Code für die Zugriffsrechte = 0x001F0FFF(Sie sind so eingespeichert.)
-Brain.exe
So, wir schreiben ein simples Script. Eine GUI brauchen wir nicht, da für das bisschen auch eine simple Strukturelle Codierung ausreicht.
Wir brauchen also nur unseren WinAPI include, dann kann es losgehen.
Zunächst, schreiben wir unsere wichtigen Deklarationen auf, die wir nacher benötigen werden.
Das wäre zum Einen unsere Zugriffsrechte. Am besten für eine Globale Deklaration ist der Befehl "Global Const"
Im Grunde genommen Stellen Befehle wie "Global Const" nur dar, wo die deklaration im Script verwendet werden kann und wann diese deklaration geladen wird.
Nun, es gibt auch schon eine nette Variable für unsere Rechte.
Er heist "$PROCESS_ALL_ACCESS".
Also schreibt ihr $PROCESS_ALL_ACCESS = 0x001F0FFF als Global Const direkt unter eurem Include.
So unser Prozessname ist - wie wir bereits wissen - "S4Client.exe"
Damit unser Trainer nacher vor S4League geöffnet werden kann und erst bei existierendem Prozess anfängt etwas zu tun, brauchen wir einen simplen Befehl. Er nennt sich
Process Wait = "Prozess Warten" anders formuliert:
"Auf den Prozess warten", so macht es Sinn und man kann es so auch verstehen
Tippt diesen Befehl in AutoIT und ihr werdet den Syntax angezeigt bekommen.
Schreibt "S4Client.exe" hinein.
Jetzt müssen wir den Existierenden Prozess als ID deklarieren und ihn per WinAPI zugänglich machen.
Dazu brauchen wir zunächst den simplen Befehl
Was ca. so aussieht:
$fInherit: Wird in Boolean also True oder False beschrieben. Durch diese Variable können wir den ProcessHandle "vererben" was aber unwichtig für uns ist.(Also False
$iProcessID: "Process ID"? Kennen wir doch noch
Hier bestimmen wir den Prozess, die ID haben wir durch ProcessExists bereits bekommen.
Also schreiben wir:
Wichtig!: Schreibt vor dem _WinAPI_OpenProcess Befehl am besten einen Sleep Befehl von 500-1000 rein, weil er sonst zu früh startet!
Hallo _WinAPI_WriteProcessMemory, nun kommst du ins Spiel. Dieser Befehl ist etwas umständlicher, da er z.B. keine Normalen Values, die von AutoIT ausgehen auslesen kann, weshalb man das ganze über eine kurzzeitig erstellte DLLstruktur eingeben und auslesen muss.
Sehen wir uns zunächst den Syntax an:
$hProcess: Hier kommt der Prozess rein, der in der Variable von OpenProcess steht, in unserem Beispiel $PH
$pBaseAddress: Hier kommt einfach die Addresse rein, die wir spätern editieren wollen(Beachte: AutoIT erkennt HexDezimale Zahlen z.B 00CA53F89 NUR! wenn "0x" davor steht[0x00CA53F89])
$pBuffer: Buffer bezeichnet temporäre Daten im Speicher. _WinAPI_WriteProcessMemory erwartet allerdings einen Pointer [Zeiger, herzuleiten vom "p"], der auf diese Datenstruktur zeigt. Siehe dazu weiter unten.
$iSize: Dies bezeichnet die Anzahl der zu schreibenden Bytes, also die größe der Struktur im Speicher. Ein "DWORD" verbraucht zB 4 Bytes, ebenso wie "float". "double" dagegen belegt 8 Bytes.
ByRef $iWritten: Dies ist eine Variable zur erweiterten Funktionsrückgabe. Das heist:
Erfolg: $iWritten > 0 (dies sollte die selbe Zahl sein, die wir bei $iSize übergeben haben
Fehlschlag: $iWritten = 0
Dazu sei gesagt, dass "If" bei einer Abfrage von Integern "0" als "False" interpretiert und Werte über 0 als "True".
Nun Gut.
Unser Prozess ist in $PH und unsere Addresse wird sein: "0x00CA5B85" 4 Bytes.
In AutoIT heist es allerdings nicht "4 Bytes" sondern "dword" und ist einfach ein anderer Typ als Float.
Bevor wir weitermachen können, brauchen wir unsere DLL Struktur.
Es ist sozusagen eine virtuelle DLL die Daten enthalten wird, aber da sie eben nur "virtuell" ist, keine feste datei sondern nur kurzzeitig vorhanden, eben solange wie wir sie brauchen.
Dazu deklarieren wir sie zunächst direkt unter unserer Konstante.
Nehmen wir hierzu einfach den simplen "Dim" Befehl zum deklarieren und erstellen die Variable $Return(Damit wir überprüfen können ob es erfolgreich war) und $struct
Ihr könnt es genau so schreiben:
$struct wird nun zu unserer Struktur indem wir ihn mit = DLLStructCreate deklarieren. Im Syntax könnt ihr lesen: ("struct").
Durch ersetzten von "struct" mit:
-dword = 4 Bytes
-float = Gleitkommazahl
oder
-char = Text
könnt ihr den Valuetype nacher definieren. wir brauchen 4 Bytes, weil dies nunmal die Art der Adresse ist und schreiben deshalb
Als nächstes müssen wir unsere gewünschte Value hineinschreiben.
In unserem Falle (HitRange) "4" um den gewünschten effekt zu erhalten.
Der Befehl um etwas "hinein zu schreiben" ist simpel. Er heist DLLStructSetData
Gucken wir uns wieder den Syntax an:
Element: Die Position als Nummer. Da es unsere ersten Daten sind schreiben wir eine "1" hinein
value: Das worauf wir gewartet haben
Hier schreiben wir "4" hinein, weil wir unsere Adresse auf diesen Wert bringen soll.
Ihr solltet in der Lage sein es selbst hinzuschreiben. Setzt den Befehl DLLStructSetData einfach direkt unter Dim $Return, $struct = DLLStructCreate("float")
Nun haben wir alles was wir brauchen und können anfangen unseren Befehl _WinAPI_WriteProcessMemory zu schreiben. Natürlich kommt er direkt unter unserem OpenProcess befehl um die Reihenfolge Logisch weiter zu führen
Wir erinnern uns:
Zuerst das Handle zum Prozess, welches von_WinAPI_OpenProcess in der Variable $PH abgespeichert wurde, dann unsere Adresse "0x00CA5B85". Jetzt muss an dieser Stelle unsere Value rein, sieh steht ja in unserer DLL Struktur also in $struct. Damit wir nun die Value wieder klauen können, brauchen wir den Befehl
Dazu hab ich weiter oben schon etwas geschrieben.
Als nächstes müssen wir die Anzahl der Bytes, $iSize, angeben. Um die größe eines bestimmten Wertes im Speicher immer korrekt zu bestimmen, kann man ganz leicht
Der letzte Punkt wäre unser Rückgabewert mit der Anzahl der geschriebenen Bytes.
Die Variable können wir hier einfach eintragen, nach getaner Arbeit wird der Wert zu True oder False. So jetzt können wir die Klammer zu Machen.
Jetzt könnt ihr wahlweise noch Abfragen ob $Return True oder False ist. Das geht mit einer einfachen If,ElseIf Abfrage und kann dann durch MsgBoxen angezeigt werden.
Ich hoffe ihr habt das Meiste Verstanden, bei weiteren Fragen einfach in den Thread posten.
Das Script, wenn ihr mal nicht weiterkommt, kopieren hilft nicht!
Ich werde euch hier erklären, wie ihr einen Simplen HitRange Trainer macht ohne UDF´s wie "NomadMemory.au3" zu benutzen.
Index - "UDF": UDF = User Defined Function auf Deutsch = Benutzer Definierte FunktionWir werden heute mit WinAPI Funktionen arbeiten.
Erklärung - "UDF": Einfach eine von Benutzern erstellte Include Datei
Um auf die WinAPI Funktionen zugreifen zu können, benötigen wir den Include zu "WinAPI.au3" in dem wir am Anfang unseres Scriptes
"#include <WinAPI.au3>"schreiben.
Unsere wichtigsten Funktionen werden sein:
-_WinAPI_OpenProcessWir müssen uns alle Zugriffsrechte zum Prozess verschaffen um auf ihn via WriteProcessMemory zugriefen und ihn editieren zu können.
-_WinAPI_WriteProcessMemory
Dazu müssen wir ein paar Sachen wissen:
-Prozessname
-Code für die Zugriffsrechte = 0x001F0FFF(Sie sind so eingespeichert.)
-Brain.exe
So, wir schreiben ein simples Script. Eine GUI brauchen wir nicht, da für das bisschen auch eine simple Strukturelle Codierung ausreicht.
Wir brauchen also nur unseren WinAPI include, dann kann es losgehen.
Zunächst, schreiben wir unsere wichtigen Deklarationen auf, die wir nacher benötigen werden.
Das wäre zum Einen unsere Zugriffsrechte. Am besten für eine Globale Deklaration ist der Befehl "Global Const"
Im Grunde genommen Stellen Befehle wie "Global Const" nur dar, wo die deklaration im Script verwendet werden kann und wann diese deklaration geladen wird.
| Local | Steht meist in einer Funktion und ist nur in dieser Gültig! |
| Global | Gilt über das ganze Script |
| Dim | Eine Intelligente Deklaration von AutoIT die selbständig entscheidet, ob die Variable Global oder Local verwendet wird. |
| Der Add "Const" | Heist nichts anderes wie "Konstante" was bedeutet, dass diese Variable Anfangs geladen wird und dann nicht mehr verändert werden kann |
Nun, es gibt auch schon eine nette Variable für unsere Rechte.
Index - "Variable": Ein Behälter für etwas. In unserem Falle für den Code der ZugriffsrechteHow to, Variablen Richtig deklarieren(Für Noobs)
Erklärung - "Variable": In AutoIT können Variblen generell heisen wie man eben will. Sie müssen nur mit einem "$" anfangen, damit AutoIT weis, das diese eine Variable sein soll.
Syntax: "Art der Deklaration" $Variable = Funktion/Wert etc.
z.B. Global $Name = "Jake"
Die Zeichenfolge "Jake" wird nun in der Variable $Name abgespeichert und kann Global abgerufen werden.
z.B. Global $Name = "Jake"
Die Zeichenfolge "Jake" wird nun in der Variable $Name abgespeichert und kann Global abgerufen werden.
Er heist "$PROCESS_ALL_ACCESS".
Also schreibt ihr $PROCESS_ALL_ACCESS = 0x001F0FFF als Global Const direkt unter eurem Include.
So unser Prozessname ist - wie wir bereits wissen - "S4Client.exe"
Damit unser Trainer nacher vor S4League geöffnet werden kann und erst bei existierendem Prozess anfängt etwas zu tun, brauchen wir einen simplen Befehl. Er nennt sich
"ProcessWait"Im Grunde erklärt sich dieser Befehl von alleine, übersetzen wir einfach mal:
Process Wait = "Prozess Warten" anders formuliert:
"Auf den Prozess warten", so macht es Sinn und man kann es so auch verstehen
Tippt diesen Befehl in AutoIT und ihr werdet den Syntax angezeigt bekommen.
Schreibt "S4Client.exe" hinein.
Index - "Syntax": Eine Regel, wie ein Objekt aufgebaut sein mussNun wartet unser kleines Programm immerhin schon mal.
Beispiel - "Syntax": _WinAPI_OpenProcess($iAccess, $fInherit, $iProcessID), das in Klammer geschriebene, wäre der Syntax. Der Befehl wurde so aufgebaut, also muss sich der Benutzer an diese Reihenfolge halten.
Jetzt müssen wir den Existierenden Prozess als ID deklarieren und ihn per WinAPI zugänglich machen.
Dazu brauchen wir zunächst den simplen Befehl
"ProcessExists"Dieser Befehl macht nichts anderes, als die ID eines "Existierenden Prozesses" auszulesen. Um diese ID jetzt überhaupt für unsere Zecke benutzen zu können, speichern wir sie in die Variable $PID. ($PID = Process ID, damit man es sich leichter merken kann)
Was ca. so aussieht:
$PID = ProcessExists("S4Client.exe")Nun müssen wir die ID nur noch mit dem Befehl _WinAPI_OpenProcess verwendbar für unseren Memory Editing Befehl machen. Schauen wir uns zunächst noch einmal den Syntax von _WinAPI_OpenProcess an.
"_WinAPI_OpenProcess($iAccess, $fInherit, $iProcessID)"$iAccess: Hier wird die Art des "Eintretens in den Prozess" gewählt. In unserem Fall, volle Rechte auf diesen.
$fInherit: Wird in Boolean also True oder False beschrieben. Durch diese Variable können wir den ProcessHandle "vererben" was aber unwichtig für uns ist.(Also False
$iProcessID: "Process ID"? Kennen wir doch noch
Also schreiben wir:
$PH = _WinAPI_OpenProcess(?,False,?)Ihr könnt es selber versuchen, als zu schwer dürfte es nicht sein. Was ihr dafür wissen müsst wurde erklärt und ihr habt es im Script. Der Syntax gibt die richtige Reihenfolge an
Wichtig!: Schreibt vor dem _WinAPI_OpenProcess Befehl am besten einen Sleep Befehl von 500-1000 rein, weil er sonst zu früh startet!
Hallo _WinAPI_WriteProcessMemory, nun kommst du ins Spiel. Dieser Befehl ist etwas umständlicher, da er z.B. keine Normalen Values, die von AutoIT ausgehen auslesen kann, weshalb man das ganze über eine kurzzeitig erstellte DLLstruktur eingeben und auslesen muss.
Sehen wir uns zunächst den Syntax an:
_WinAPI_WriteProcessMemory($hProcess, $pBaseAddress, $pBuffer, $iSize, ByRef $iWritten)Klingt erstmal verwirrend, ich versuche mal die einzelnen Schritte zu erklären.
$hProcess: Hier kommt der Prozess rein, der in der Variable von OpenProcess steht, in unserem Beispiel $PH
$pBaseAddress: Hier kommt einfach die Addresse rein, die wir spätern editieren wollen(Beachte: AutoIT erkennt HexDezimale Zahlen z.B 00CA53F89 NUR! wenn "0x" davor steht[0x00CA53F89])
$pBuffer: Buffer bezeichnet temporäre Daten im Speicher. _WinAPI_WriteProcessMemory erwartet allerdings einen Pointer [Zeiger, herzuleiten vom "p"], der auf diese Datenstruktur zeigt. Siehe dazu weiter unten.
$iSize: Dies bezeichnet die Anzahl der zu schreibenden Bytes, also die größe der Struktur im Speicher. Ein "DWORD" verbraucht zB 4 Bytes, ebenso wie "float". "double" dagegen belegt 8 Bytes.
ByRef $iWritten: Dies ist eine Variable zur erweiterten Funktionsrückgabe. Das heist:
Erfolg: $iWritten > 0 (dies sollte die selbe Zahl sein, die wir bei $iSize übergeben haben
Fehlschlag: $iWritten = 0
Dazu sei gesagt, dass "If" bei einer Abfrage von Integern "0" als "False" interpretiert und Werte über 0 als "True".
Nun Gut.
Unser Prozess ist in $PH und unsere Addresse wird sein: "0x00CA5B85" 4 Bytes.
In AutoIT heist es allerdings nicht "4 Bytes" sondern "dword" und ist einfach ein anderer Typ als Float.
Bevor wir weitermachen können, brauchen wir unsere DLL Struktur.
Es ist sozusagen eine virtuelle DLL die Daten enthalten wird, aber da sie eben nur "virtuell" ist, keine feste datei sondern nur kurzzeitig vorhanden, eben solange wie wir sie brauchen.
Dazu deklarieren wir sie zunächst direkt unter unserer Konstante.
Nehmen wir hierzu einfach den simplen "Dim" Befehl zum deklarieren und erstellen die Variable $Return(Damit wir überprüfen können ob es erfolgreich war) und $struct
Ihr könnt es genau so schreiben:
Dim $Return, $struct$Return steht am Anfang und bekommt nichts, es bleibt eine Leere Variable bis unser Write Befehl einen Rückgabewert hinein geschrieben hat.
$struct wird nun zu unserer Struktur indem wir ihn mit = DLLStructCreate deklarieren. Im Syntax könnt ihr lesen: ("struct").
Durch ersetzten von "struct" mit:
-dword = 4 Bytes
-float = Gleitkommazahl
oder
-char = Text
könnt ihr den Valuetype nacher definieren. wir brauchen 4 Bytes, weil dies nunmal die Art der Adresse ist und schreiben deshalb
DLLStructCreate("dword")hinter unser $struct.
Als nächstes müssen wir unsere gewünschte Value hineinschreiben.
In unserem Falle (HitRange) "4" um den gewünschten effekt zu erhalten.
Der Befehl um etwas "hinein zu schreiben" ist simpel. Er heist DLLStructSetData
Gucken wir uns wieder den Syntax an:
"DllStructSetData ( Struct, Element, value)"Struct: Hier wählen wir unsere erstellte Struktur aus, also die, die wir oben deklariert und beschrieben haben.
Element: Die Position als Nummer. Da es unsere ersten Daten sind schreiben wir eine "1" hinein
value: Das worauf wir gewartet haben
Hier schreiben wir "4" hinein, weil wir unsere Adresse auf diesen Wert bringen soll.
Ihr solltet in der Lage sein es selbst hinzuschreiben. Setzt den Befehl DLLStructSetData einfach direkt unter Dim $Return, $struct = DLLStructCreate("float")
Nun haben wir alles was wir brauchen und können anfangen unseren Befehl _WinAPI_WriteProcessMemory zu schreiben. Natürlich kommt er direkt unter unserem OpenProcess befehl um die Reihenfolge Logisch weiter zu führen
Wir erinnern uns:
Zuerst das Handle zum Prozess, welches von_WinAPI_OpenProcess in der Variable $PH abgespeichert wurde, dann unsere Adresse "0x00CA5B85". Jetzt muss an dieser Stelle unsere Value rein, sieh steht ja in unserer DLL Struktur also in $struct. Damit wir nun die Value wieder klauen können, brauchen wir den Befehl
DLLStructGetPtrhier müssen wir nun zuerst unsere Struktur wählen und dann das Element.
Dazu hab ich weiter oben schon etwas geschrieben.
Als nächstes müssen wir die Anzahl der Bytes, $iSize, angeben. Um die größe eines bestimmten Wertes im Speicher immer korrekt zu bestimmen, kann man ganz leicht
DLLStructGetSizebenutzen.
Der letzte Punkt wäre unser Rückgabewert mit der Anzahl der geschriebenen Bytes.
Index - "Boolean": Ist ein weiterer deklarationstyp und stellt die Werte "True" und "False" zur Verfügung.Vll erinnert ihr euch noch an das leere $return.
Die Variable können wir hier einfach eintragen, nach getaner Arbeit wird der Wert zu True oder False. So jetzt können wir die Klammer zu Machen.
Jetzt könnt ihr wahlweise noch Abfragen ob $Return True oder False ist. Das geht mit einer einfachen If,ElseIf Abfrage und kann dann durch MsgBoxen angezeigt werden.
Ich hoffe ihr habt das Meiste Verstanden, bei weiteren Fragen einfach in den Thread posten.
Das Script, wenn ihr mal nicht weiterkommt, kopieren hilft nicht!
Guide, wie ihr perfekt laggen könnt
Atm gibt es ja immer noch nicht so tolle Trainer von daher dachte ich mir, wenn nicht Hacken, dann Laggen.
Ergebnis ist einfach bombe. Das Tool was ihr dafür benötigt findet ihr auf dieser Seite

Seht nach welche Version für euren PC geeignet ist.
Wie ihr es richtig verwendet:
Also hier seht ihr den S4 Prozess, bei euch kann es auch nur einer sein!^^
Ihr müsst auf die Graue Zahl (die extra eingerahmt ist) Doppelklicken.
Standart mäßig steht 5120 drinne, ihr ändert das wie auf dem Bild zu 800 (funzt bei mir am besten, weniger führt oft dazu, dass ihr niemanden killlen könnt) und dann macht ihr das häckchen rein.
Was macht es?
Diese Zahl bedeutet, dass der NL nicht mehr wie 800 Bytes pro Sekunde ausgehend vom S4 Server auf euren pc senden lässt. Was euch das bringt versuche ich an einem simplen Beispiel zu erklären:
Gegner1 betätigt seine Tastatur, der Befehl wird an den Server geschickt und von dort aus wird die Verschiebung des Charakters mit seinen Koordinaten zurückgegeben => Jeder andere Spieler sieht wie er läuft. So nun lässt aber NL fast nichts mehr durch die Leitung => Der Gegner steht im idealfall.
Dies kommt einfach daher, das nicht nur die Position von 1 Charakter zu euch gesendet wird, sonder weit aus mehr Daten...Die wollen alle zu euch, aber NL lässt sie nur in kleinen Bruchstücken durch => Stau
Das gleiche passiert auch mit dem Schaden:
Gegner1 ziel mit seiner Maus auf euren Charakter und drückt ab, Server empfängt die Daten und gibt sie wieder weiter, wobei er an euren Client die Meldung sendet "Wurde getroffen"(sozusagen)
Aber da NL mal wieder abblockt kommt sie nicht bei euch an, im Idealfall=>Godmode.
Andersrum könnt ihr natürlich machen was ihr wollt, denn euer Upload zum Server ist ja nicht beschränkt, heist:
Ihr zielt auf euren Gegner und drückt ab, Server empfängt Daten und sendet sie an alle Spieler, bei euch kommen sie halt oft später an
Im groben funktioniert das so und ist immernoch richtig böse.
Hier mal ein paar ingame Screens:
Ein paar Bilder
Beides Läuft!
Was könnte man noch damit machen?
Das Tool kann natürlich nicht nur Laggen verursachen, sondern es auch verhindern. Wenn ihr eine nicht so gute Internet Leitung habt, guckt ihr einfach im Tool, was alles eine Verbindung zum Inet herstellt und kappt unnötige Verbindungen entweder ganz, oder ihr minimiert sie einfach.
S4 League dürfte dann genug Bandbreite zur verfügung haben.
Note: Tool wird von X-Trap erkannt!...aber nur solange es angezeigt wird, also einfach minimieren.(Sowie auf dem Bild)
Ihr müsst auf die Graue Zahl (die extra eingerahmt ist) Doppelklicken.
Standart mäßig steht 5120 drinne, ihr ändert das wie auf dem Bild zu 800 (funzt bei mir am besten, weniger führt oft dazu, dass ihr niemanden killlen könnt) und dann macht ihr das häckchen rein.
Was macht es?
Diese Zahl bedeutet, dass der NL nicht mehr wie 800 Bytes pro Sekunde ausgehend vom S4 Server auf euren pc senden lässt. Was euch das bringt versuche ich an einem simplen Beispiel zu erklären:
Gegner1 betätigt seine Tastatur, der Befehl wird an den Server geschickt und von dort aus wird die Verschiebung des Charakters mit seinen Koordinaten zurückgegeben => Jeder andere Spieler sieht wie er läuft. So nun lässt aber NL fast nichts mehr durch die Leitung => Der Gegner steht im idealfall.
Dies kommt einfach daher, das nicht nur die Position von 1 Charakter zu euch gesendet wird, sonder weit aus mehr Daten...Die wollen alle zu euch, aber NL lässt sie nur in kleinen Bruchstücken durch => Stau
Das gleiche passiert auch mit dem Schaden:
Gegner1 ziel mit seiner Maus auf euren Charakter und drückt ab, Server empfängt die Daten und gibt sie wieder weiter, wobei er an euren Client die Meldung sendet "Wurde getroffen"(sozusagen)
Aber da NL mal wieder abblockt kommt sie nicht bei euch an, im Idealfall=>Godmode.
Andersrum könnt ihr natürlich machen was ihr wollt, denn euer Upload zum Server ist ja nicht beschränkt, heist:
Ihr zielt auf euren Gegner und drückt ab, Server empfängt Daten und sendet sie an alle Spieler, bei euch kommen sie halt oft später an
Im groben funktioniert das so und ist immernoch richtig böse.
Hier mal ein paar ingame Screens:
Ein paar Bilder
Beides Läuft!
Was könnte man noch damit machen?
Das Tool kann natürlich nicht nur Laggen verursachen, sondern es auch verhindern. Wenn ihr eine nicht so gute Internet Leitung habt, guckt ihr einfach im Tool, was alles eine Verbindung zum Inet herstellt und kappt unnötige Verbindungen entweder ganz, oder ihr minimiert sie einfach.
S4 League dürfte dann genug Bandbreite zur verfügung haben.
Note: Tool wird von X-Trap erkannt!...aber nur solange es angezeigt wird, also einfach minimieren.(Sowie auf dem Bild)
Guide how to lagg godlike(English translation)
Since you allready know it there aren´t many good hacks atm, so i thought we should try laggin and the result is very nice! All you need is the Tool from here: 
Look for a version which is compatible with your os.
How to use?
So here you can see the S4 LEague process, maybe it looks a bit different to yours. You have to click the gray number twice, i highlighted it on the Screen.
Default is "5120", you have to change it to 800 as you can on the screen.
(I testet around and 800 gave the best result) Then tick the box to activate this.
The other part explains how this works. I think i may not explain it again.
All you need to use it right is explained above. Just test it and see some strange results
Here are some Screens:

Look for a version which is compatible with your os.
How to use?
So here you can see the S4 LEague process, maybe it looks a bit different to yours. You have to click the gray number twice, i highlighted it on the Screen.
Default is "5120", you have to change it to 800 as you can on the screen.
(I testet around and 800 gave the best result) Then tick the box to activate this.
The other part explains how this works. I think i may not explain it again.
All you need to use it right is explained above. Just test it and see some strange results
Here are some Screens:
Probleme mit der Verbindung zu S4? Weiterlesen ^^
Hey,
ich erkläre euch hier mal einige Methoden die ihr versuchen könnt, wenn ihr Verbindungsprobleme zu S4 habt.
Zunächst könnt ihr mal alles Ports von S4 in eurer Firewall freigeben, denn manchmal werden bestimmte eben geblockt.
Die Ports sind: TCP -28002 ,TCP -28008, TCP -28012, TCP -28013 und TCP -80
Die beiden Screens sollten eine ausreichende erklärung abliefern.
Der Xp screen ist aus dem Ala Forum
Pfad: Start -> Einstellungen -> Systemsteuerung -> Netzwerk- und Internetverbindungen -> Windows Firewall -> Ausnahmen -> Port
Windows 7/Vista: (Pfad solltet ihr aus dem Screen entnehmen können)
Desweiteren haben ja manche den "Connection Timeout" error.
Diesen könnt ihr häufig beheben in dem ihr jeden 2ten Buchstaben eures Login Namens Groß schreibt.
z.B. Dertestaccount ist eurer normaler Loginname, dann müsstet ihr es so hinschreiben: DeRtEsTaCcOuNt
Außerdem könnt ihr immernoch die Methode aus dem Laggin Guide entnehmen, also unnötige Internet Verbindungen sperren.
Falls ihr anderweitig nicht connecten könnt, z.B. durch "Game is currently under maintenance" keine Panik, das bedeutet nur, dass S4 League unter Serverwartung ist. Wenn ihr genaueres wissen wollte, also wann die Server wieder da sind, was neu ist guckt im Alaplaya Forum nach:

Für andere Fragen könnt ihr Mods im Chat fragen:

Note: Dieses Port öffnen stellt gleichzeitig ein Sicherheitsrisiko für euren PC dar, weil eben Pfade öffnet durch die man auf euren PC könnte (In der Theorie). Sicherlich ist die Warscheinlichkeit das es euch widerfährt sehr gering, dennoch sollte man sich dies im Hinterkopf behalten.
ich erkläre euch hier mal einige Methoden die ihr versuchen könnt, wenn ihr Verbindungsprobleme zu S4 habt.
Zunächst könnt ihr mal alles Ports von S4 in eurer Firewall freigeben, denn manchmal werden bestimmte eben geblockt.
Die Ports sind: TCP -28002 ,TCP -28008, TCP -28012, TCP -28013 und TCP -80
Die beiden Screens sollten eine ausreichende erklärung abliefern.
Der Xp screen ist aus dem Ala Forum
Pfad: Start -> Einstellungen -> Systemsteuerung -> Netzwerk- und Internetverbindungen -> Windows Firewall -> Ausnahmen -> Port
Windows 7/Vista: (Pfad solltet ihr aus dem Screen entnehmen können)
Desweiteren haben ja manche den "Connection Timeout" error.
Diesen könnt ihr häufig beheben in dem ihr jeden 2ten Buchstaben eures Login Namens Groß schreibt.
z.B. Dertestaccount ist eurer normaler Loginname, dann müsstet ihr es so hinschreiben: DeRtEsTaCcOuNt
Außerdem könnt ihr immernoch die Methode aus dem Laggin Guide entnehmen, also unnötige Internet Verbindungen sperren.
Falls ihr anderweitig nicht connecten könnt, z.B. durch "Game is currently under maintenance" keine Panik, das bedeutet nur, dass S4 League unter Serverwartung ist. Wenn ihr genaueres wissen wollte, also wann die Server wieder da sind, was neu ist guckt im Alaplaya Forum nach:

Für andere Fragen könnt ihr Mods im Chat fragen:

Note: Dieses Port öffnen stellt gleichzeitig ein Sicherheitsrisiko für euren PC dar, weil eben Pfade öffnet durch die man auf euren PC könnte (In der Theorie). Sicherlich ist die Warscheinlichkeit das es euch widerfährt sehr gering, dennoch sollte man sich dies im Hinterkopf behalten.
FAQ:
-Please translate it to english. - Nope, i won´t do this. If someone feels free to do that work, i will update the Thread.Thanks gehen an Fichte für Hilfe und Esuke2000 für die Übersetzung des 1ten Teils.
-Where can i download NomadMemory.au3?? - GTFO!!!^^
-Jake ich will ein Kind von dir!! - Kriegste aber net =P
-Wo ist das Script? - Gibts net, C&P sucked!
-Process Explorer kann nicht suspenden - Als Admin ausführen
Ich hoffe ihr könnt damit was anfangen.
Habt Spaß beim ausprobieren, wenn es noch Fragen gibt, fühlt euch frei sie hier zu Stellen. Ihr könnt mir auch gern eure Meinung dazu sagen =)
Wenn ihr Rechtschreibfehler findet, könnt ihr sie behalten oder sie mir sagen damit ich es verbessern kann








