Kleine Hilfe zu WriteProcessMemory gesucht... - Druckversion +- Home of Gamehacking - Archiv (http://archiv-homeofgamehacking.de) +-- Forum: Coding (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=15) +--- Forum: Delphi (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=20) +--- Thema: Kleine Hilfe zu WriteProcessMemory gesucht... (/showthread.php?tid=1175) |
RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 25.09.2012 (25.09.2012, 19:33)Acubra schrieb: Bei sILeNt heLLsCrEAm's CodeCave würde ich jedoch zunächst die Flags speichern (pushfd/popfd), da du durch den cmp (compare) Befehl das Z-Flag veränderst. Brauch ich nich zu sichern weil ich ja den Compare mit in die Codecave verlagert habe. Und da in der Codecave auch der zugehörige bedingte Sprung enthalten ist brauchts halt keine Sicherung weil das Zero Flag neu gesetzt wird. Wenn nicht, dann müsste ich natürlich das Flag vorher sichern. RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 27.09.2012 Hmm soweit hab ich das ganze jetzt verstanden... muss ich jetzt aber doch das Berechnen von Sprungadressen lernen :/ muss ja irgendwie das je in der Codecave schreiben... Berechnung ist klar... Zieladresse - Startadresse - 6, klappt auch, wenn ich das manuell mache in CE, nur wie setze ich das ganze in Delphi jetzt um? LG Darius83 Edit1: Ah, ich glaube, ich habs schon... mal schaun Edit2: So habs mal so gelöst: [code=delphi] // Konstanten PROCESS : String = 'game.dat'; // Prozessname des Spiels GOLDSAMMELN: Integer = $0050A65D; // Adresse Gold JmpGoldCave:array[0..10] of byte = ($68,$00,$00,$00,$00,$C3,$90,$90,$90,$90,$90); GoldCaveByte:array[0..0] of byte = ($01); GoldCave:array[0..43] of byte = ($80,$3D,$00,$00,$00,$00,$01,$75,$0E,$81,$40,$38, $10,$27,$00,$00,$C6,$05,$00,$00,$00,$00,$00,$8B, $58,$38,$39,$1D,$68,$69,$9E,$00,$0F,$84,$00,$00, $00,$00,$68,$00,$00,$00,$00,$C3); //bei Spielstart BaseAddr := VirtualAllocEx(Pidhandle,NIL,2048,MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); Caveadress1 := Cardinal(BaseAddr)+$0000; WriteBytesToMem(Pidhandle, GOLDSAMMELN, Written, JmpGoldCave); Caveadress1 := Caveadress1+$0010; WriteProcessMemory(Pidhandle, Pointer(GOLDSAMMELN+$01), @Caveadress1, 4, Written); WriteBytesToMem(Pidhandle,Caveadress1,Written,GoldCave); Caveadress1 := Caveadress1-$0010; WriteProcessMemory(Pidhandle, Pointer(Caveadress1+$12), @Caveadress1, 4, Written); WriteProcessMemory(Pidhandle, Pointer(Caveadress1+$22), @Caveadress1, 4, Written); ByteVar := $50A6C8-(Caveadress1+$30)-$6; WriteProcessMemory(Pidhandle, Pointer(Caveadress1+$32), @ByteVar, 4, Written); ByteVar := $50A668; WriteProcessMemory(Pidhandle, Pointer(Caveadress1+$37), @ByteVar, 4, Written); //bei Hotkey WriteBytesToMem(Pidhandle,Caveadress1,Written,GoldCaveByte); [/code] RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 28.09.2012 Kleiner Fehler deinerseits... [code=Delphi]ByteVar := $50A6C8-(Caveadress1+$30)-$6;[/code] So wirds korrekterweise geschrieben... [code=Delphi]ByteVar := $50A6C8-(Caveadress1+$30)-6;[/code] grEEtZ sILeNt heLLsCrEAm RE: Kleine Hilfe zu WriteProcessMemory gesucht... - darius83 - 28.09.2012 Öhm, ist es nicht völlig egal, ob ich mit HexWerten rechne oder mit DezimalWerten? Muss doch lediglich drauf achten, dass der Wert beim angeben auch stimmt... Ich meine, $6 und 6 sind ja vom Wert identisch... Das alles sollte eigentlich keinen Unterschied machen: $50A6C8-(Caveadress1+$30)-$6; $50A6C8-(Caveadress1+$30)-6; 5285576-(Caveadress1+$30)-6; $50A6C8-(Caveadress1+48)-$6; $50A6C8-(Caveadress1+48)-6; 5285576-(Caveadress1+48)-$6; 5285576-(Caveadress1+48)-6; Wenn ich das jetzt falsch sehe, bitte ich um Aufklärung LG Darius83 P.S.: Hatte die 6 auch nur als Hex angegeben, weil der Rest auch in Hex geschrieben war RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 29.09.2012 Besser hätte ich es auch nicht erklären können. Musst eben nur aufpassen das du die Werte nicht durcheinander haust. RE: Kleine Hilfe zu WriteProcessMemory gesucht... - Acubra - 29.09.2012 Hey, die Hex Werte von 0-9 sind mit den Dezimalen gleich. Aber 10dec ist z.B A Hex. Also ab 10 muss man schon aufpassen. RE: Kleine Hilfe zu WriteProcessMemory gesucht... - iNvIcTUs oRCuS - 29.09.2012 @Acubra Das ist richtig... Aber wie auch schon darius schrieb - In Delphi ist es egal wie gerrechnet wird. Und wie ich schon schrieb darf man dann die Werte eben nicht durcheinanderhauen. Mit dem "$" wird der Compiler angewiesen den Wert als HEX Wert zu interprtieren. Klar bei Zahlen/Zeichen von 0 bis 9 ist das definitiv egal, wenn man aber z.B. in der Annahme geht von einem Wert den Wert 10 (zehn) zu subtrahieren, man aber schreibt $10 dann wird natürlich nicht 10 sondern 16 subtrahiert. Aber ich denke darius hats kapiert, besser hätte man es können wie gesagt nicht erklären. |