Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi WriteProcessMemory mit Offsets zum Pointer (https://www.delphipraxis.net/114207-delphi-writeprocessmemory-mit-offsets-zum-pointer.html)

infY2k7 21. Mai 2008 12:59


Delphi WriteProcessMemory mit Offsets zum Pointer
 
Hallo Leute, ich hab folgendes Problem:
Ich möchte etwas in den Speicher eines Spiels schreiben, was auch kein Problem ist, solange es eine statische Adresse ist, wie z.B.:
Delphi-Quellcode:
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
GetMem(buf,1);
buf^  := Chr($1); //Der Wert ist also $1
FreeMem(buf);
WriteProcessMemory(HandleWindow,ptr($9451524),buf,size,write); //Adresse $123456 ist statisch!
closehandle(HandleWindow);
Jedoch ändert sich diese Adresse bei jedem Spielstart, weshalb ich einen Pointer benutzen muss:

$9451524 mit den Offsets:
+20
+bcc
+10
+38 (alle als hexadezimal)

um zu der Adresse zu kommen.

Wie kann ich in die WriteProcessMemory Funktion diese Offsets einbinden? Oder benötige ich dazu eine andere Funktion?

danke im Vorraus, infy

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit]

SirThornberry 21. Mai 2008 13:04

Re: Pointer-Problem
 
Hallo infY2k7 - Willkommen in der DP :dp:
Könntest du deinem Beitrag bitte einen aussagekräftigeren Titel geben? Mit http://www.delphipraxis.net/template.../icon_edit.gif über deinem Beitrag kannst du diesen ändern.

Daniel 21. Mai 2008 13:05

Re: Pointer-Problem
 
Moin und willkommen in der DP,

an manchen Tagen kommt's echt knüppeldicke. Du hast Dir den Code offenbar zusammengesucht und herzlich wenig Ahnung davon, wie er arbeitet. Im fremden Prozessen herumzuschreubbeln ist meist nichts für Einsteiger.

Du kannst Deine konstante Adresse aus dem ersten Beispiel in eine Variable überführen. Der Typ DWORD könnte ganz gut geeignet sein. Und wenn Du die Adresse schon in einer Variablen hast, kannst Du auch damit rechnen.

Wo genau ist Deine Frage? Wenn Du diese Antwort hast, kannst Du auch Deinem Thema einen aussagekräftigen Titel geben. Danke Dir. :-)

infY2k7 21. Mai 2008 13:09

Re: Delphi WriteProcessMemory mit Offsets zum Pointer
 
ich hab das bisher alles in auto-it gemacht, aber delphi bietet mehr möglichkeiten, deswegen möchte ich umsteigen!

ja das problem ist, ich kann nicht mit einer einfachen adresse arbeiten, da sich diese bei jedem spielstart ändert. ein pointer ist nötig, die basis-adresse des pointers lautet 9451524 und diese führt mit den oben genannten offsets zu der adresse, die ich brauche!
bsp: health-point anzeige im spiel ist gerad in der adresse 1111111. wenn ich spiel neu starte in 132475 usw. der pointer 9451524 + die offsets von oben, zeigt jedoch jedesmal auf die richtige adresse! in delphi möchte ich also mit der writeprocessmemory funktion irgendwie auf die richtige adresse kommen! klingt komisch, is aber so ;)

SirThornberry 21. Mai 2008 13:12

Re: Delphi WriteProcessMemory mit Offsets zum Pointer
 
Als erstes musst du deinen Quelltext verstehen. Im Moment macht er keinen Sinn. Du holst dir zum Beispiel Speicher für Buf von 1 Byte Größe, schreibst etwas in den Speicher und gibst dieses 1 Byte speicher wieder frei.
Danach rufst du WriteProcessMemory auf und übergibst Buf obwohl der Speicher dafür ja schon wieder frei gegeben ist. Du siehst, das ganze macht überhaupt keinen Sinn.

infY2k7 21. Mai 2008 13:14

Re: Delphi WriteProcessMemory mit Offsets zum Pointer
 
ich hab das auch nur aus einem anderem thread, da ich in der schule noch nichts zu memory write usw. gelernt habe, aber so wie es da oben steht, kann ich schon bestimmte werte in statischen adressen ändern, das funktioniert schon ;)
btw danke für die schnellen antworten!

Daniel 21. Mai 2008 13:15

Re: Delphi WriteProcessMemory mit Offsets zum Pointer
 
Naja, mit Deinem Beispiel aus dem ersten Beitrag bist Du doch schon recht weit.

Also: Eine neue Variable muss her, vom Typ DWORD (LongWord). Und dann kannst Du einfach zuweisen und rechnen: myVariable:= $9451524 + $20. In Deinem Code ersetzt Du dann die Konstante durch myVariable und gut is'.

Dann würde ich Dir raten, das Ganze in einer Funktion zu verpacken und die gewünschte Adresse als Parameter zu übergeben.

Wenn Du nicht genau weißt, wie Du Variablen deklariert oder Funktionen erstellst, dann empfehle ich http://www.delphi-treff.de/tutorials...-fange-ich-an/.

:-)

infY2k7 21. Mai 2008 13:17

Re: Delphi WriteProcessMemory mit Offsets zum Pointer
 
das ist schon eine prozedur, hab hier nur nen ausschnitt draus reingestellt und die variablen mit werten ersetzt. danke, ich probier das mal!
mfg infy

Nuclear-Ping 21. Mai 2008 13:18

Re: Delphi WriteProcessMemory mit Offsets zum Pointer
 
Zitat:

Zitat von infY2k7
ich hab das auch nur aus einem anderem thread, da ich in der schule noch nichts zu memory write usw. gelernt habe, aber so wie es da oben steht, kann ich schon bestimmte werte in statischen adressen ändern, das funktioniert schon ;)
btw danke für die schnellen antworten!

Zu "Memory Write" wirst du wahrscheinlich auch nichts in der Schule lernen, leider.

Und dass es funktioniert ist Zufall, weil wahrscheinlich noch in der Adresse zufällig der Wert steht, obwohl sie schon freigegeben wurde. Trotzdem ist es programmiertechnisch gesehen fataler Unsinn, auf bereits freigegebene Speicherbereiche zuzugreifen.

infY2k7 21. Mai 2008 13:19

Re: Delphi WriteProcessMemory mit Offsets zum Pointer
 
wie kann ich das besser schreiben? also hier mal meine prozedur:

Delphi-Quellcode:
procedure p_memorywrite(value,size:integer;adresse:dword);
begin
    ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
    HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
    GetMem(buf,1);
    buf^  := Chr(value);
    FreeMem(buf);
    WriteProcessMemory(HandleWindow,ptr(adresse),buf,size,write);
    closehandle(HandleWindow);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz