Home of Gamehacking - Archiv

Normale Version: Code Injection + AutoIT
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Ah okay,
also mir ist gerade aufgefallen, dass wenn ich den code per AutoIT injecte, im Disassembler von CE statt nop immer "pop eax" steht. Wenn ich die alten Bytes zurückschreibe steht da "pop ebx".
Per AutoIT schreibe ich immer "90 90" als BYTE. Kann es sein dass ich da irgendwie 2 Bytes oder so benötige?
Hey,
ja. Oder du schreibst 4 Bytes als "word", wobei die ersten beiden dann 90 90 wären und die letzten beiden der Originalcode.
Hi Acubra,
Das mit den 2 Bytes will irgendwie nicht klappen. Ich habe versucht "90 90" als short zu schreiben -> Das Spiel stürzt ab. Als byte[2] (Die Pointer.au3 kann das interpretieren) -> Das Spiel stürzt ab. Ich mache irgendwas falsch... Hier nochmal das aktuelle Skript:

Code:
#include <Pointer.au3>

HotKeySet("{F2}","_Run")

Func _Run()
   $PID = ProcessExists("Cube.exe")
   $Handle = _MemoryOpen($PID)
   $Module = "Cube.exe"
   
   $BaseAdr = _MemoryModuleGetBaseAddress($PID,$Module)
   _MemoryWrite($BaseAdr + 0x2177E3,$Handle,"90 90","byte[2]")
EndFunc

While 1
   Sleep(10000)
WEnd

Ich kenn mich zwar mit AutoIt absolut net aus, aber nur mal so interessehalber gefragt... Müssen die Bytes durch ein Leerzeichen getrennt sein ("90 90") oder sollte das eher zusammengeschrieben werden ("9090")?! Huh
Wenn jetzt z.B. die 90 als Dezimal interpretiert wird dann heißt das hexadezimal 0x5A was wiederum der Opcode für "pop edx" ist...

Vielleicht liegt ja irgendwo in dieser Richtung der Fehler...
Genau an sowas habe ich auch schon gedacht. Allerdings habe ich schon alle Möglichkeiten durchprobiert und es stürzt immer ab.
Bei mir funktioniert das mit der baseAddress gar nicht. Es kommt immer 0 raus.

PHP-Code:
#include <Pointer.au3>

$PID = ProcessExists("Cube.exe")
$Handle = _MemoryOpen($PID)
   
$BaseAdr = _MemoryGetBaseAddress($PID)
MsgBox(0, "", $BaseAdr)

$BaseAdr = _MemoryGetBaseAddress($Handle)
MsgBox(0, "", $BaseAdr)

Du musst

Code:
_MemoryModuleGetBaseAddress

verwenden.

Code:
$PID = ProcessExists("Cube.exe")
$Handle = _MemoryOpen($PID)
$Module = "Cube.exe"

$BaseAdr = _MemoryModuleGetBaseAddress($PID,$Module)
_MemoryWrite($BaseAdr + 0x2177E3,$Handle,"90 90","byte")


Funktioniert so ja eigentlich. Nur beim Schreiben der Bytes habe ich Probleme.

Lass dir die Addresse mal ausgeben mit

PHP-Code:
$BaseAdr = _MemoryModuleGetBaseAddress($PID,$Module)
MsgBox(0, "", $BaseAdr) ;<==


Wenn diese nicht 0 ist, kann du dann mal die Funktion _MemoryModuleGetBaseAddress aus deiner Pointer.au3 Posten?

[Bild: unbenanntc1ue1.png]
Das wird dann mit dem Offest addiert und es kommt die richtige Adresse raus. Es wird ja in die richtige Adresse geschrieben, allerdings wird nicht das geschrieben was ich will.
So geht es jetzt bei mir.

PHP-Code:
#include <Pointer.au3>

HotKeySet("{F2}","_Run")

Func _Run()
   $PID = ProcessExists("Cube.exe")
   $Handle = _MemoryOpen($PID)
   $Module = "Cube.exe"
  
   $BaseAdr = _MemoryModuleGetBaseAddress($PID,$Module)
   _MemoryWrite($BaseAdr + 0x2177E3,$Handle,0x9090,"byte[2]")
EndFunc

While 1
   Sleep(10000)
WEnd

Seiten: 1 2 3