ich weiss dass ich eure nerven schon ganz gut strapaziert habe, aber ich denke, dass ich jetzt schon ein ganzes stück weiter bin. - zumindest aus meiner sicht! vielen dank an dieser stelle schonmal für eure geduld und hilfe! Leider ist mein vorhaben offensichtlich nicht gerade das, mit dem man anfangen sollte, aber ich bin hoffnungsfroh das ganze bald abgeschlossen zu haben.
Also, mein ziel ist es ja einen laufenden prozess an verschiedenen stellen zu patchen, welcher nicht erst durch PB aufgerufen wird. Das menü bzw die oberfläche drumherumzulegen sehe ich anhand der tutorials nicht als große schwierigkeit an. für den kern fehlt mir allerdings noch etwas... quasi die kernkompetenz :-P
ok, jetzt zur sache: wie ihr seht ist das beispiel recht simpel bzw beim lesen der remarks verständlich. leider fehlen mir noch einige dinge:
1. ich bekomme es einfach nicht hin per WriteProcessMemory überhaupt irgendwas an die gewünschte stelle zu schreiben!
2. die geschriebenen werte würde ich gerne in hexa angeben, was aber nicht funktioniert, der wert "NeuerHexwert1" wird immer in eine dezimalzahl umgwandelt. (vermutlich gibt´s eine einfache lösung)?
3. ich würde gerne mehr als 4 bytes lesen und schreiben können!! leider geht´s irgenwie nicht, denn meine wenn ich mehr als 4 bytes auslesen möchte, zeigt meine fehlerkontrolle diese nicht an
4. am liebesten würde ich nach hexwerten (unbegrenze anzahl) im prozess suchen lassen und diese mit neuen plazieren! - aber vorerst wäre ich zufrieden wenns überhaupt erstmal geht.
Code: Alles auswählen
Achtung! MineSweeper sollte vorher gestartet werden
;Diese Programm verweist auf den Offset des Strings bzw Fenstertitel "Benutzerdefiniertes Spiel" welcher über
;das Menü / Spiel / Benutzerdefiniert aufgerufen werden kann! - Als Beispiel wollte ich versuchen
;den String zu ändern! Leider läufts noch nicht so!
;Variablen für die Zielapplikation
Prozessname.s = "winmine.exe"
StartLeseOffset1 = $0101E23A
NeuerHexwert1 = $1111
;Läuft alle Prozesse durch und sucht nach "Prozessname"
ExamineProcesses()
While NextProcess()
If GetProcessName()=Prozessname
ProgID = GetProcessPID()
EndIf
Wend
;Öffnen der Commandline für Ausgabe
OpenConsole()
;Zeigt ProzessID
PrintN("Prozess ID:"+Str(ProgID))
Delay(5000)
;Lesen der Speicherstelle per API
ProcessHandle = OpenProcess_(#PROCESS_ALL_ACCESS, #False, ProgID)
ReadProcessMemory_(Processhandle, StartLeseOffset1, @Zeit, 4, 0)
PrintN("Zeit bzw alter Hexwert VOR schreiben:"+Str(Zeit))
;Simple Schleife zum Debuggen/Fehlersuche
x = 10
Repeat
PrintN("Neuer Wert wird gleich geschrieben:"+Str(NeuerHexwert1))
;Schreiben der Speicherstelle
WriteProcessMemory_(Processhandle, StartLeseOffset1, NeuerHexwert1, 4, 0)
PrintN("wurde geschrieben...")
Delay(2000)
ReadProcessMemory_(Processhandle, StartLeseOffset1, @Zeit, 4, 0)
PrintN("Lese ob Zeit bzw. alter Hexwert durch neuen ersetzt ist ?:"+Str(Zeit))
Delay(5000)
x-1
Until x = 0
Thread verschoben
25.05.2008
Anfänger>APIs
RSBasic