AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

dll trainer

Ein Thema von k4ni · begonnen am 2. Feb 2008 · letzter Beitrag vom 3. Feb 2008
Antwort Antwort
k4ni

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

dll trainer

  Alt 2. Feb 2008, 17: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
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: dll trainer

  Alt 2. Feb 2008, 17:29
Du bist mit deiner Anwendung im falschen Adressraum.

du musst einen code in den anderen Process schreiben (writeProcessMemory) der die DLL lädt. Das ist nicht viel und dürfte auch schon mehrmals in der DP stehen. Suche mal danach. Evtl brauchst du bloß createremotthread aufrufen.
Dabei das HAndle des anderen Processes übergeben, als Startadresse die Adresse der Funktion Loadlibray und als Parameter den mit writeprocessmemory erstellten String der DLL.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
k4ni

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

Re: dll trainer

  Alt 2. Feb 2008, 17:33
hey sirius,

Das mit WriteProcessMemory hab ich alles schon gemacht und hat auch klasse geklappt.
Doch ich finde das mit der dll besser bzw. leichter. Das einzige problem ist nur, das ich nicht weis, wie ich die procedure aufrufen kann und sie es nur in dem bestimmtem prozess macht in dem sie ist. (die dll)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: dll trainer

  Alt 2. Feb 2008, 17:46
Eine DLL musst du eben unter dem Process laden. Das funktioniert nicht in deinem. Und dazu musst du eben auch ein wenig code in den Process injezieren. Deine Funktion direkt zu injezieren wäre wenger Aufwand als eine DLL erst nachzuladen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#5

Re: dll trainer

  Alt 2. Feb 2008, 17:59
Du könntest jetz nach dem injecten direkt die Funktion Random mit CreateRemoteThread von deiner Anwendung aus, ausführen.
Aber wieso packst du nicht alles gleich in die Dll?
Ein Dialog mit Button und schon hast du nicht das problem.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: dll trainer

  Alt 2. Feb 2008, 18:12
(So jetzt hab ich mal 5 Minuten mehr Zeit)
Etwas so:
Delphi-Quellcode:
procedure injectDLL(ProcessID:Cardinal;const DLLName:string);
var lib:hmodule;
    hProcess:Thandle;
    Dest,StartThread:Pointer;
    temp:cardinal;
begin
  lib:=getmodulehandle('kernel32.dll');
  StartThread:=getprocAddress(lib,Pchar(DLLName));

  hProcess:=openprocess(Process_ALL_ACCESS,false,ProcessID);
  Dest:=virtualallocEX(hProcess,nil,length(DLLName)+1,MEM_COMMIT or MEM_RESERVE,PAGE_READONLY);
  WriteProcessMemory(HProcess,Dest,Pchar(DLLName),length(DLLName)+1,temp);
  CreateRemoteThread(hProcess,nil,0,StartThread,Dest,0,temp);
end;
(ungetestet; ohne Fehlerbehandlung)
Ich bin mir sicher, dass es den Code so oder ähnlich schon in der DP gibt. Hab ihn grad nicht gefunden.

Edit: Und wie du siehst, ist es in deinem fall besser (solange die DLL so klein bleibt) den Code direkt umzuschreiben.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
k4ni

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

Re: dll trainer

  Alt 3. Feb 2008, 02:12
danke, damit kann ich ja dann auch von dem prozess lesen indem sie injected ist ne?
Wenn ja, wie könnte ich das als string an eine application senden ? Und wie empfangen?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: dll trainer

  Alt 3. Feb 2008, 12:34
Ja, das geht zum Beispiel über Messages oder Memory Mapped Files. Oder auch Sockets. Musst dich halt für eine Kommunikationsart entscheiden.
Pipes würden auch gehen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:55 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