Ich hab mal wieder eine Frage, undzwar: Wenn ich in CheatEngine ein Script für CodeInjection habe. Kann ich das dann irgendwie in AutoIT einbauen? Wenn ja, wie? Bis jetzt kann ich mit AutoIT nur Adressen und Pointer manipulieren.
Danke!
Code Injection + AutoIT
|
|||
06.01.2013, 14:54
Moin Leute,
Ich hab mal wieder eine Frage, undzwar: Wenn ich in CheatEngine ein Script für CodeInjection habe. Kann ich das dann irgendwie in AutoIT einbauen? Wenn ja, wie? Bis jetzt kann ich mit AutoIT nur Adressen und Pointer manipulieren. Danke!
10.01.2013, 10:32
Hey,
eine CodeInjection ist im Prinzip auch nur das Schreiben von Werten in Adrressen. Mal ein einfaches Beispiel: Du hast folgenden Befehl: Code:
Wie du siehst befindet sich der "Compare" an der Adresse 012C1B8F und wird durch die Bytes "3B 0D 18 40 2C 01" beschrieben. Wenn du nun den Befehl "Noppen" willst, musst du einfach per WriteProcessMemory "90 90 90 90 90 90" in die Adresse 012C1B8F schreiben. Somit hast du eigentlich schon deinen eigen Code in den Speicher des Spiels eingefügt. Deine CodeInjection ist fertig.
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
10.01.2013, 20:25
:O Danke! Ist denn da "90 90 90 90 90 90" die Pauschallösung oder muss ich da was beachten? Wovon hängt ab wie oft ich 90 schreiben muss? 90 steht für nop, das wusste ich schon. Aber woher weiß ich wie viel ich noppen muss?
10.01.2013, 21:16
Hey,
in diesem Fall musst du 6 Nops an die Adresse schreiben. Die Befehle und somit auch die Größe dieser werden durch verschiedene Bytesequenzen beschrieben. Ein Far Jump ist z.B immer 5 Bytes groß und fängt mit E9 an und danach folen die Bytes, die (Zieladresse - Quelladresse) beschreiben.
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
14.07.2013, 16:34
Tagchen,
nach langer Zeit muss ich mich jetzt nochmal zurückmelden und mache dafür jetzt mal nich nen neuen Thread auf. Undzwar habe ich bei der Methode von Acubra immer das Problem dass mir das Spiel abstürzt. Muss ich wenn ich die Bytes schreibe das in einem bestimmten "Format" (ich weiß nicht wie man das nennt), also float, dwort o.ä. machen? Aktuell versuche ich mich an Cube World, das ist allerdings auch bei anderen Spielen so. Falls gewünscht poste ich auch Screenshots aus CheatEngine. MfG, Schnieker
14.07.2013, 17:49
Hey,
poste doch mal das Script. Zusätliche Infos (vor allem Screenshots) sind natürlich auch immer von großem Vorteil.
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
Hi Acubra,
Hier ist mal das Skript (AutoIT): Code:
14.07.2013, 20:42
Hey,
das du das mit dem Datentyp gelöst bekommen hast, freut mich. Zu der sich ändernden Adresse gibt es schon eine Reihe von Tutorials (auch hier bei uns). Du musst die BaseAdresse des Moduls ausfindig machen (siehe Module32First/Module32Next API's) und darauf dann ein Offset addieren. Sieh dir mal die UDF hier an: http://www.autoitscript.com/forum/topic/...ntry829011 Bzw. das Offset zu der jeweiligen BaseAdresse kannst du dir auch von CE im Memory viewer anzeigen lassen (dazu auf View-->Show module addresses).
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
14.07.2013, 22:07
Wow!
Nachdem ich das alles erst nicht verstanden habe geht es jetzt doch. (Bis jetzt jedenfalls ) Vielen Dank dafür schonmal! Nun hätte ich noch 2 weitere Fragen: 1.: wenn ich den Code genoppt habe, dachte ich, ich könnte dies rückgängig machen indem ich die alten Bytes wieder hineinschreibe. Allergings geht das nicht. Es passiert einfach nichts... Und 2.: Gibt es eine Möglichkeit über Assembler das Selbe zu erreichen als wenn ich in CheatEngine direkt den Wert der Adresse bearbeite und somit z.B. das Leben auf 1000 setzen kann? Kann ich also auch direkt Werte im Spiel verändern?
Hey,
also wenn du den Code noppen kannst, dann kannst du ihn auch wieder herstellen. Du hast entweder nen Fehler in deinem Script, oder du führst den jeweiligen Befehl gar nicht aus. Die direkten Werte im Spiel kannst du natürlich genauso verändern. Je nachdem welcher Datentyp vorliegt, musst du auch deinen MemoryWrite-Befehl anpassen (byte, dword, float u.s.w). Der Healthwert wird ja auch ganz normal in einer Adresse bzw. Variable gespeichert. Da sich beim Neustart (oder z.B Levelwechsel) die Healthadresse meist ändert, greift man deshalb gerne auf Pointer zurück. //EDiT: Ach du meinst in Assembler. Naja das ist ne andere Geschichte. Du kannst eben die Adresse rausfinden und dann irgendwo im Spiel ne CodeCave unterbringen, in der du z.B mov, [adresse], 63 schreibst. Aber das ist ja nicht so dynamisch wie in CE. Außerdem wird, wenn der Codeabschnitt ständig durchlaufen wird, der Wert der Adresse in dem Fall auf 100 gefreezt. Dann müsstest du wieder nen Check einbauen u.s.w.. Also es geht, aber nicht so bequem wie in CE.
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
| |||
Share Thread:
|
Benutzer, die gerade dieses Thema anschauen: |
1 Gast/Gäste |