AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Delphi WriteProcessMemory mit Offsets zum Pointer
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi WriteProcessMemory mit Offsets zum Pointer

Offene Frage von "infY2k7"
Ein Thema von infY2k7 · begonnen am 21. Mai 2008 · letzter Beitrag vom 21. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#1

Delphi WriteProcessMemory mit Offsets zum Pointer

  Alt 21. Mai 2008, 12:59
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]
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Pointer-Problem

  Alt 21. Mai 2008, 13:04
Hallo infY2k7 - Willkommen in der DP
Könntest du deinem Beitrag bitte einen aussagekräftigeren Titel geben? Mit über deinem Beitrag kannst du diesen ändern.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Pointer-Problem

  Alt 21. Mai 2008, 13:05
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#4

Re: Delphi WriteProcessMemory mit Offsets zum Pointer

  Alt 21. Mai 2008, 13:09
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Delphi WriteProcessMemory mit Offsets zum Pointer

  Alt 21. Mai 2008, 13:12
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#6

Re: Delphi WriteProcessMemory mit Offsets zum Pointer

  Alt 21. Mai 2008, 13:14
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!
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Delphi WriteProcessMemory mit Offsets zum Pointer

  Alt 21. Mai 2008, 13:15
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/.

Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#8

Re: Delphi WriteProcessMemory mit Offsets zum Pointer

  Alt 21. Mai 2008, 13:17
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
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#9

Re: Delphi WriteProcessMemory mit Offsets zum Pointer

  Alt 21. Mai 2008, 13:18
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.
  Mit Zitat antworten Zitat
infY2k7

Registriert seit: 21. Mai 2008
23 Beiträge
 
#10

Re: Delphi WriteProcessMemory mit Offsets zum Pointer

  Alt 21. Mai 2008, 13:19
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr.
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