Autor Beitrag
lullu1
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 29.03.08 21:10 
Hi liebe Delphi Gemeinde )
Ich habe seit kurzem mit delphi 7 angefangen coden zu lernen.
So nun habe ich dank des Tuts zum Tema Spiele Trainer erstellen, mir einen funzenden Trainer gebastelt.
Nun möchte ich aber gerne den Trainer als dll erstellen die ich einfach injecte in den Process wo dann die stellen patched werden.
Könnte mir jemand helfen den code für eine dll an zu passen.
Komme leider nicht weiter bei der dll erstellung.

So sieht der code in meinem Trainer exe aus!
Den würde ich gerne als dll nutzen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure WriteValues4;
var
  c, write : Cardinal;
  buf: pchar;
  buf1: pchar;
begin
  c:=FindWindow(nil,'Test'); //Get WindowHandle
  buf := #$FF#$B5#$54;
  buf1 := #$8B#$95#$70;
  if c=0 then
  begin
    MessageDlg('Test Anwendung nicht gefunden',mtwarning,[mbOK],0);
    Exit;
  end;
  GetWindowThreadProcessId(c,@c); //Get ProcessID and ignore ThreadID
  c:=OpenProcess(PROCESS_ALL_ACCESS,False,c);  //Get ProcessHandle
  WriteProcessMemory(c,Ptr($4F8D60),buf,3,write);                 
  WriteProcessMemory(c,Ptr($4F8B12),buf1,3,write);
  CloseHandle(c);
end;


Aufruf in der Exe

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm0Fly.Button5Click(Sender: TObject);
begin
 WriteValues4;
end;


Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Sa 29.03.2008 um 21:08
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Sa 29.03.08 21:25 
Am Code musst du AFAIK nichts ändern. Erstell einfach ein DLL-Projekt, kopier diese Prozedur hinein (vor begin-end) und setz ein
ausblenden Delphi-Quelltext
1:
exports WriteValues4;					

darunter.

In der EXE musst du dann die Prozedur folgendermaßen Deklarieren:
ausblenden Delphi-Quelltext
1:
procedure WriteValues4; external 'TrainerDll.dll';					

'TrainerDll.dll' natürlich durch den Namen der DLL ersetzen.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
lullu1 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 29.03.08 21:47 
Hi silas
danke für den tip,aber ich schaffe es nicht die dll zu erstellen.
So sieht mein code aus.
Den aufruf aus der exe habe ich verstanden.

ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
library Project1;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }



uses
  SysUtils,
  Classes;

{$R *.res}

exports WriteValues4;

begin
var
  c, write : Cardinal;
  buf: pchar;
  buf1: pchar;
begin
  c:=FindWindow(nil,'Test'); //Get WindowHandle
  buf := #$FF#$B5#$54;
  buf1 := #$8B#$95#$70;
  if c=0 then
  begin
    MessageDlg('Test Anwendung nicht gefunden',mtwarning,[mbOK],0);
    Exit;
  end;
  GetWindowThreadProcessId(c,@c); //Get ProcessID and ignore ThreadID
  c:=OpenProcess(PROCESS_ALL_ACCESS,False,c);  //Get ProcessHandle
  WriteProcessMemory(c,Ptr($4F8D60),buf,3,write);                 
  WriteProcessMemory(c,Ptr($4F8B12),buf1,3,write);
  CloseHandle(c);
end;

end.


Hier die fehlermeldung!
Sorry das ich ich so dumm anstelle ,aber ich habe echt ein verständigungs problem.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
[Fehler] Project1.dpr(19): Undefinierter Bezeichner: 'WriteValues4'
[Fehler] Project1.dpr(21): Anweisung erwartet, aber 'VAR' gefunden
[Fehler] Project1.dpr(25): Bezeichner redefiniert: 'Finalization'
[Fehler] Project1.dpr(26): Undefinierter Bezeichner: 'FindWindow'
[Fehler] Project1.dpr(31): Undefinierter Bezeichner: 'MessageDlg'
[Fehler] Project1.dpr(31): Undefinierter Bezeichner: 'mtwarning'
[Fehler] Project1.dpr(31): Undefinierter Bezeichner: 'mbOK'
[Fehler] Project1.dpr(34): Undefinierter Bezeichner: 'GetWindowThreadProcessId'
[Fehler] Project1.dpr(35): Undefinierter Bezeichner: 'OpenProcess'
[Fehler] Project1.dpr(35): Undefinierter Bezeichner: 'PROCESS_ALL_ACCESS'
[Fehler] Project1.dpr(36): Undefinierter Bezeichner: 'WriteProcessMemory'
[Fehler] Project1.dpr(38): Undefinierter Bezeichner: 'CloseHandle'
[Warnung] Project1.dpr(39): Text hinter dem abschließenden 'END.' wird vom Compiler ignoriert
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Sa 29.03.08 22:57 
Ich meinte das begin-end im DLL-Code, den Delphi automatisch erstellt, nicht das begin-end deiner Prozedur :wink: . Eine Prozedur in einer DLL erstellst du genau wie in einer EXE, nur dass du anschließend angeben musst, welche exportiert werden sollen.
Außerdem musst du noch die Units einbinden, aus denen du Funktionen verwendest, soweit ich das sehe ist das die Windows und die Dialogs.

So sollte es funktionieren:
ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
library Project1;

uses
  SysUtils,
  Classes,
  Windows,
  Dialogs;

{$R *.res}

procedure
 WriteValues4;
var
  c, write : Cardinal;
  buf: pchar;
  buf1: pchar;
begin
  c:=FindWindow(nil,'Test'); //Get WindowHandle
  buf := #$FF#$B5#$54;
  buf1 := #$8B#$95#$70;
  if c=0 then
  begin
    MessageDlg('Test Anwendung nicht gefunden',mtwarning,[mbOK],0);
    Exit;
  end;
  GetWindowThreadProcessId(c,@c); //Get ProcessID and ignore ThreadID
  c:=OpenProcess(PROCESS_ALL_ACCESS,False,c);  //Get ProcessHandle
  WriteProcessMemory(c,Ptr($4F8D60),buf,3,write);                 
  WriteProcessMemory(c,Ptr($4F8B12),buf1,3,write);
  CloseHandle(c);
end;


exports WriteValues4;

begin
end.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
lullu1 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 30.03.08 01:08 
Danke funzt nun^^