Home of Gamehacking - Archiv
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)

Seiten: 1 2 3 4 5 6 7


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. Wink



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 Wink

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 Wink

LG Darius83

P.S.: Hatte die 6 auch nur als Hex angegeben, weil der Rest auch in Hex geschrieben war Wink


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.