hi,
das wird mein erster beitrag! ich hab ein kleines coding problem und hoffe auf eure mithilfe. also seit 2 wochen versuchte ich mich mit purebasic ... ist auch nicht soo schwer. aber wenn man richtige was machen möchte, kommt man um die ein oder andere winapi nicht herum. gottseidank hab ich zumindest einige reversing-vorkenntnisse, dennoch raffe ich nicht wirklich viel!
Es geht darum, dass ich winmine.exe = also das windows minesweeper in der codesection mit hilfe der API modifizieren möchte! als beispiel wählte ich mir den offset: $0101E23A was dem "B" = hex 42 von Benutzerdefiniertes Spiel im Titel(!) entspricht. also wenn Ihr auf Spiel / Benutzerdefiniert klickt und dann den title betrachtet wisst Ihr was gemeint ist!
also , wie gesagt, ich wollte das teil als beispiel modifizieren und versuchte mal ein kleines "b" also hex "62" dort hinzuschreiben... ging natürlich nicht. und dann fing die suche an. ich bekam irgendwann raus, dass folgende zeile nicht den vollzugriff garantiert:
ProcessHandle = OpenProcess_(#PROCESS_ALL_ACCESS, #True, ProgID)
dann irgendwann später kam ich, als nix-api-versteher drauf,dass man per VirtualProtectEx noch den zugriff setzten sollte.... das bekomme ich aber gar nicht hin. ich hab folgende zeile zugefügt:
VirtualProtectEx_(ProcessHandle,StartLeseOffset1,4,#PAGE_EXECUTE_READWRITE ,2)
das kann auch totaler blödsinn sein oder fehlt noch davor etwas um diese funktion "einzuleiten" ... ich hoffe ihr könnt helfen!
ok, ich poste mal den ganzen code:
das wird mein erster beitrag! ich hab ein kleines coding problem und hoffe auf eure mithilfe. also seit 2 wochen versuchte ich mich mit purebasic ... ist auch nicht soo schwer. aber wenn man richtige was machen möchte, kommt man um die ein oder andere winapi nicht herum. gottseidank hab ich zumindest einige reversing-vorkenntnisse, dennoch raffe ich nicht wirklich viel!
Es geht darum, dass ich winmine.exe = also das windows minesweeper in der codesection mit hilfe der API modifizieren möchte! als beispiel wählte ich mir den offset: $0101E23A was dem "B" = hex 42 von Benutzerdefiniertes Spiel im Titel(!) entspricht. also wenn Ihr auf Spiel / Benutzerdefiniert klickt und dann den title betrachtet wisst Ihr was gemeint ist!
also , wie gesagt, ich wollte das teil als beispiel modifizieren und versuchte mal ein kleines "b" also hex "62" dort hinzuschreiben... ging natürlich nicht. und dann fing die suche an. ich bekam irgendwann raus, dass folgende zeile nicht den vollzugriff garantiert:
ProcessHandle = OpenProcess_(#PROCESS_ALL_ACCESS, #True, ProgID)
dann irgendwann später kam ich, als nix-api-versteher drauf,dass man per VirtualProtectEx noch den zugriff setzten sollte.... das bekomme ich aber gar nicht hin. ich hab folgende zeile zugefügt:
VirtualProtectEx_(ProcessHandle,StartLeseOffset1,4,#PAGE_EXECUTE_READWRITE ,2)
das kann auch totaler blödsinn sein oder fehlt noch davor etwas um diese funktion "einzuleiten" ... ich hoffe ihr könnt helfen!
ok, ich poste mal den ganzen code:
Code:
;Variablen für die Zielapplikation
Prozessname.s = "winmine2.exe"
StartLeseOffset1 = $0101E23A
NeuerHexwert1 = $62000000
;Zeit = $11
;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, #True, ProgID)
ReadProcessMemory_(Processhandle, StartLeseOffset1, @Zeit, 4, 0)
VirtualProtectEx_(ProcessHandle,StartLeseOffset1,4,#PAGE_EXECUTE_READWRITE ,2)
PrintN("Zeit bzw alter Hexwert VOR schreiben:"+Str(Zeit))
;Simple Schleife zum Debuggen/Fehlersuche
x = 10
Repeat
PrintN("Neuer Wert wird gleich geschrieben:"+Hex(NeuerHexwert1))
;Schreiben der Speicherstelle
VirtualProtectEx_(ProcessHandle,StartLeseOffset1,4,#PAGE_EXECUTE_READWRITE ,1)
WriteProcessMemory_(ProcessHandle, StartLeseOffset1, NeuerHexwert1, 4, 1)
PrintN("wurde geschrieben...")
Delay(2000)
ReadProcessMemory_(Processhandle, StartLeseOffset1, @Zeit, 1, 0)
PrintN("Lese ob Zeit bzw. alter Hexwert durch neuen ersetzt ist ?:"+Str(Zeit))
Delay(5000)
x-1
Until x = 0