Sollte das AA Script normalerweise funktionieren?
Habe extra jede Zeile kommentiert(Ehrlich jetzt, jede Zeile)
[ENABLE]
alloc(Hase, 2048, "tutorial-x86_64.exe"+4D213) Fügt die Bezeichnung Hase hinzu. 2048 Bytes werden reserviert für den Code des AA Scripts. Der exakte Prozessname ist tutorial-x86_64.exe"+4D213
label(Gans) Fügt die Bezeichnung Gans hinzu...
label(Ente) Ebenfalls eine Bezeichnung
label(Huhn) ....
label(Fuchs) ...
Hase: Bindet die Bezeichnung Hase in den Code ein
cmp rax, EnteLeben prüft ob sich EnteLeben im rax Register befindet
je Ente Wenn rax mit 0160ABB0 übereinstimmt springt es zu Ente weiter
Huhn: Bindet die Bezeichnung Huhn in den Code ein
mov ecx, [rax+60] verschiebt das Register [rax+60] in Register ecx
cmp ecx, 1 Überprüft ob sich im Register ecx der Wert 1 befindet
jle Schaden Springt zu Fuchs, wenn sich im Register ecx der Wert 1 oder niedriger befindet
mov [rax+60], 1 Verschiebt den Wert 1 in Register [rax+60]. Dies trifft nur zu, wenn sich im Register ecx der Wert 2 oder höher befindet(Weil ansonsten direkt zu Fuchs gesprungen wird
Fuchs: Bindet die Bezeichnung Fuchs in den Code ein
sub [rax+60], edx Originaler Code der Schaden verursacht
jmp Gans Hier endet der Code für den Gegner und es wird zu Gans: gesprungen. Ansonsten würde es sich mit den weiteren Code von Ente: vermischen.
Ente: Bindet die Bezeichnung Ente in den Code ein
add [rax+60], 1 Spieler erhält pro Treffer 1 Lebenspunkt. Alles über Spieler: und unter Gegner: wird ignoriert., wegen der je Anweisung.
jmp Gans Hier endet der Code für den Spieler und es wird zu Gans: gesprungen. Ansonsten vermischt er sich mit den Gans: Code
EnteLeben: Bindet die Bezeichnung EnteLeben in den Code ein
dq 0160ABB0 EnteLeben hat die Adresse 0160ABB0 Erspart das ständige abtippen der Adresse, indem man einfach die Bezeichnung EnteLeben verwendet. Eignet sich auch gut für Pointer Adressen
"tutorial-x86_64.exe"+4D213:
jmp Hase Springt zu alloc(Hase, 2048, "tutorial-x86_64.exe"+4D213) und arbeitet sich runter Zeile für Zeile
nop Die übrigen Bytes werden durch eine leere Anweisung ersetzt
Gans: Das ist das Ende vom Script. Danach läuft das Spiel ganz normal weiter
[DISABLE] Solange das Script aktiviert ist, werden die unteren Zeilen ignoriert. Das dient nur dazu, falls man das Script deaktiviert, damit der ursprüngliche Code wieder benutzt werden kann. Ansonsten wird das Spiel abstürzen.
"tutorial-x86_64.exe"+4D213:
sub [rax+60], edx Hier steht der Originale Code, der jetzt deaktiviert ist.
dealloc(Hase) Ist ebenfalls solange deaktiviert, bis man dass Script deaktiviert. Es gibt den ursprünglichen Speicherplatz wieder frei, der für das geschriebene Script verwendet wurde
Edit Verschrieben: // jle Schaden
jle Fuchs
Edit2: Wahrscheinlich wäre noch ne Push und Pop Anweisung sinnvoll, damit es nicht zu Abstürzen kommt, weil später wieder auf die Register zugegriffen wird
1 Antwort
jle Schaden Springt zu Fuchs, wenn sich im Register ecx der Wert 1 oder niedriger befindet
Ist grundsätzlich richtig. Aber Schaden ist nirgendwo definiert oder gelabel das fürt zum Fehler. Lösung: Du kannst ein Lable Schaden hinzufügen ->
label(Schaden)
...
Schaden:
jmp Fuchs
Oder
jle Fuchs
Weitere Fehler:
Verwechslung: cmp rax, EnteLeben
Wenn EnteLeben eine Adresse ist (also z. B. 0160ABB0), und du willst prüfen, ob rax diese Adresse enthält, ist das korrekt.
Aber:
Du solltest sicherstellen, dass rax überhaupt vorher eine gültige Adresse enthält, sonst ist dieser Vergleich wertlos (oder crasht).
Außerdem kann cmp rax, EnteLeben beim Ausführen fehlschlagen, wenn rax nicht richtig initialisiert ist.
➡ Tipp: Eventuell brauchst du einen Kontext – z. B. wird rax vor der Codeinjektion mit einer Gegner-/Spieler-Adresse beschrieben?
Das sind die Fehler, aber wie schon gesagt ist die grundstruktur richtig.
Lg
Ja. Habe über den CT die HP Adresse von meinem Spieler gescannt und auf "what write..." Dort wurden mir dann der Code
sub [rax+60], edx
angezeigt. Habe dann über einem Hexadezimal Rechner 60 von der HP Adresse meiner Figur abgezogen. Da kamen 0160ABB0 bei heraus.
Zuerst wollte ich das eigentlich anders machen. Ich wollte es eigentlich über "Find communilaties between adressess" machen und dort unter Rax Unterschiede suchen zwischen meiner HP Adresse und die meines Gegners.
Ich hatte das sein gelassen, weil es passieren kann, wenn Gegner neu spawnen, dass sie dann eine identische Ziffer haben wie die von meiner Figur.
Durch die Methode mit dem Hexadezimal Rechner ist man eigentlich abgesichert.