Autor Beitrag
Shadow110
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Fr 09.04.04 12:28 
Hallo.

Ich bin gerade dabei WriteProcessMemory in mein Programm zu integrieren. Wie das an sich funktioniert ist klar.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
const
  WindowTitle = 'xyz';
  Addr0 = $0046AFC5;

var
  WIN : integer;
  PID : integer;
  TID : integer;
  HND : integer;
  WRT : cardinal;
  POKE: integer;


procedure TForm1.Button3Click(Sender: TObject);
begin
     WIN := FindWindow(nil, WindowTitle);
     TID := GetWindowThreadProcessId(WIN,@PID);
     HND := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
     
     // Beispiel Code
     poke := 1234;
     WriteProcessMemory(HND,ptr(Addr0),@POKE,Bytes,WRT);
     FreeMem(BUF);
     closehandle(HND);

end;



OK, nun zu meiner Frage. Ich muss an viele Stellen viel Code schreiben, und möchte nicht 30 Variablen für die Addressen und 30 Variablen für den Code verwenden (Poke) auch wenn ich Z.B 10Byte schreibe geht das mit der POKE Variable schon nicht mehr als INTEGER sondern nur noch als INT64.

Ich suche eine Lösung in der Art: (Nur ein Beispiel ohne sinnigen Inhalt)
Adresse1=00CA100
Adresse2=00CA500
Adresse3=00CA900
Code1="12312123786128361827368172638affededed69182739182739817293871293712983712983"
Code2="12312123786128361827368172638affededed69182739182739817293871293712983712983"
Code3="1231231237836128361827368172638affededed69182739182739817293871293712983712983"

Für die Code Variablen kann man ja irgendwann (wenn sie zu gross werden) also wenn man zuviel Code einfügen muss auch kein INT64 mehe nehmen.. Ok, es müsste schon einiges sein.. Aber ich such nach einer Möglichkeitm wie man das vielleicht etwas geschickter lösen kann?

Eventuell mit einem Array? For each address in ... writeprocessmemory... sowas in der Art??

Ich hoffe ich habe mich jetzt nicht zu wirr ausgedrückt.

Freue mich schon auf eure Ideen.

Viele Grüße
Alex

Moderiert von user profile iconMotzi: Delphi-Tags hinzugefügt.
Shadow110 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Fr 09.04.04 15:47 
Hi.

Also momentan hab ich das jetzt so gemacht:

Ich mach mir 3 Arrays

ausblenden Delphi-Quelltext
1:
2:
3:
4:
var
  addr: array[1..20] of int64;
  Poke: array[1..20] of int64;
  Bytes: array[1..20] of Integer;




Und dannach dann

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.Button4Click(Sender: TObject);
begin

Addr[1] := $0000123;
Poke[1] := $123123123;
Bytes[1] := 0;

Addr[2] := $00000815;
Poke[2] := $4711;
Bytes[2] := 0;

Addr[3] := $00123123;
Poke[3] := $123123123;
Bytes[3] := 0;                                           

    WIN := FindWindow(nil, WindowTitle);
    TID := GetWindowThreadProcessId(WIN,@PID);
    HND := OpenProcess(PROCESS_ALL_ACCESS,False,PID);

    WriteProcessMemory(HND,ptr(Addr[1]),@Poke[1],Bytes[1],WRT);
    WriteProcessMemory(HND,ptr(Addr[2]),@Poke[2],Bytes[2],WRT);
    WriteProcessMemory(HND,ptr(Addr[3]),@Poke[3],Bytes[3],WRT);

    closehandle(HND);
end;



Das 3 mal writeprocessmemory packe ich jetzt warscheinlich noch in eine Schleife und fertig..
Wenn jemanden vielleicht noch was besseres einfällt? Alls her damit. *g


Grüße
Alex

Moderiert von user profile iconMotzi: Delphi-Tags hinzugefügt.