Thema: Delphi dll trainer

Einzelnen Beitrag anzeigen

k4ni

Registriert seit: 17. Jul 2007
Ort: Ulm
258 Beiträge
 
Delphi 7 Enterprise
 
#1

dll trainer

  Alt 2. Feb 2008, 16:15
hallo DP,

Ich habe in einem anderen forum in einem thread gesehen wie man eine art dll trainer machen kann.
Also hab ich schonmal etwas simpeles getestet:
Delphi-Quellcode:
library debugger;

uses
  SysUtils,
  Classes;

{$R *.res}
procedure Random()stdcall;assembler;
asm
mov byte ptr [$008B0108],$74
end;

exports
  Random;

begin
end.
"$008B0108" ist einfach ne addresse die ich genommen hab von dem spiel MineSweeper.
Opcode "jne 008b010a". 75 = "jne" und 74 = "je".
Also wenn ich mit einem dll-injector (ich hab Cheat Engine benützt) die dll injecte und die function bzw. die procedure Random aufrufe ändert er den opcode genau so wie ich es wollte zu "je 008b010a".

Doch ich will diese dll injecten ohne eine function auf zu rufen.
Dann mit einer normalen delphi Anwedung durch einen buttonklick die procedure aufrufen, da bin ich auf dllmain gekommen.

Und dann bin ich zu diesem code gekommen:
Delphi-Quellcode:
library debugger;

uses
  SysUtils,
  Classes,
  Windows;

{$R *.res}


procedure DllMain(reason: integer) ;
var
  buf : array[0..20] of char;
  loader : string;
begin
   case reason of
     DLL_PROCESS_ATTACH:
     begin
       GetModuleFileName(0, buf, SizeOf(buf)) ;
       loader := buf;
       if Pos('winmine.exe', loader) > 0 then
         ExitCode := -1
     end;
     DLL_PROCESS_DETACH:
     begin
       //DLL unloading...
     end;
   end;
end; (*DllMain*)

procedure Random()stdcall;assembler;
asm
mov byte ptr [$008B0108],$74 //75 = jne, 74 = je (short jumps)
end;

exports
  GodMode;

begin
   DllProc := @DllMain;
   DllProc(DLL_PROCESS_ATTACH) ;


   //more DLL code here...
end.
Erstmal zusammenfassung:
Ich will eine dll in einen prozess injecten (MineSweeper/winmine.exe) ohne eine function oder eine procedure zu laden (bis jetzt). Das injecten erstmal mit Cheat Engine.
Dann mit einer delphi anwendung die procedure "Random" die auch in exports steht aufrufen.

Mit dem zuletzt geposted-dem code hab ich mit einer andwendung die export function geladen und durch ein buttonclick ausgeführt.
So:
Delphi-Quellcode:
procedure Random(); external 'debugger.dllname 'Random';

procedure TForm1.Button1Click(Sender: TObject);
begin
Random();
end;
Doch das funktioniert nicht. Muss ich das anderst machen oder ist das alles komplett falsch?
  Mit Zitat antworten Zitat