[DELPHI] ReadProcessMemory

06/21/2013 22:13 antierotic#1
Hallo zusammen.

Bin vor 2 Tagen auf das Tutorial für Delphi hier im Forum gestossen und habe es durchgearbeitet und bin nun bei den ReadProcessMemory / Write angekommen.

Nun habe ich das auf und ab probiert und verstehe die argumente die man mit der funktion ausführt nicht ganz, kann mir da wer auf die sprünge helfen?

nach mehreren fehlermeldungen konnte ich das programm entlich mal kompelieren, es kam dann aber der fehler " Project xyz raised exception class EAccessViolation with message ' Access violation at address 005A81B in module 'XYZ.exe'. Write of address 135CFED8' ", wie kann ich diesen beheben?

Der code ist momentan noch ziemlich kurz gehalten.


Code:
unit readmemory;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var

  ThreadID: Integer;
  ProcessID, data: Integer;
  wnd: HWnd;
  write: cardinal;
  v1: Cardinal;
  buf: PWideChar;
  WindowHandle, mynumber: Integer;                                            
  address: Cardinal;
  size, number: NativeUInt;
 
begin

  v1 := 1000;  
  address := $72BC11AD3C;
  mynumber := 1;
  size := 1234567;
  number := 8;
  
  wnd := FindWindow(nil, 'Calculator');
  if wnd <> 0 then
  begin
    ThreadID := GetWindowThreadProcessID(wnd, @ProcessID);
    WindowHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessID);
      Label1.Caption := IntToStr(ThreadID);
    buf^ :=Chr(v1);
    WriteProcessMemory(WindowHandle, ptr(address), @buf, size, number); 
    
      Label1.Caption := string(buf);
    
    CloseHandle(WindowHandle);
    end
    else
      ShowMessage ('Fehler!');
     
  
  end;
end.
06/22/2013 20:59 Cencil#2
- Sehe in deinem Code nur WriteProcessMemory.
- Adresse ist mit 0x0x72BC11AD3C definitiv falsch (Delphi wird dich da warnen)
- Ganzer Code sollte überdacht werden

Interessant wäre nun zu wissen was du überhaupt vorhast, mit WriteProcessMemory (wie der Name fast schon erahnen lässt) schreibst du etwas in den Prozess. Zumindest im Titel hast du nur Read erwähnt.

[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
06/24/2013 20:45 antierotic#3
habe es mit writeprocessmemory probiert, da in dem tutorial das ich gefunden habe er es mit write macht, bei mir würde ein read reichen.

ziel wäre es den gespeicherten wert in "calculator" auszulesen und in einem label darzustellen.

was stimmt an der addresse nicht?

ps: danke für die links.
06/25/2013 11:08 MrSm!th#4
Sie ist zu lang. Ich bezweifle mal, dass du eine 64bit Adresse hast, also sollten da maximal 4 Bytes und nicht 5 stehen. Ein Zahlenpaar ist zu viel.