Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   [DLL Injection] Code in fremden Prozess einschleusen (https://www.delphipraxis.net/160498-%5Bdll-injection%5D-code-fremden-prozess-einschleusen.html)

himitsu 16. Mai 2011 14:17

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Alloc = reservieren
Query = Infos abfragen
Protect = Zugriff anpassen
...

Xerogon 16. Mai 2011 14:23

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
So, mal schnell als Win32 Anwendung gemacht. Da geht alles 8-)

Delphi-Quellcode:
var
  Form1: TForm1;
  ThreadID, ProcessID: Integer;
  WindowHandle: THandle;
  wnd: HWnd;
  write: Cardinal;
  Data: Array[0..1] of Byte;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin;

end;
procedure TForm1.Button1Click(Sender: TObject);
begin

  Data[0] := $EB;
  Data[1] := $07;

  wnd := FindWindow(nil, PChar('Ferby-Speed'));
  ThreadID := GetWindowThreadProcessID(wnd, @ProcessID);
  WindowHandle := Openprocess(PROCESS_ALL_ACCESS, false, processID);

  WriteProcessMemory(WindowHandle, Ptr($0046A4A8), @Data, SizeOf(Date), write);
  CloseHandle(WindowHandle);
end;

Neutral General 16. Mai 2011 14:30

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Wie kommt denn die DLL in den fremden Prozess?
Kannst du mal etwas Code zeigen?

PS: WindowHandle ist in deinem Beispiel kein guter Variablen-Name. Dein "WindowHandle" ist ein Prozess-Handle ;)

Xerogon 16. Mai 2011 14:32

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Ich benutze den Injector "Winject". http://www.cheat-project.com/cheats-...2/WinJect-1.7/

Mit dem Var Name: Das Programm habe ich auf die Schnelle gemacht. 8-)
Da Achte ich nicht auf Bezeichnungen.

Neutral General 16. Mai 2011 14:38

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Hallo,

Also davon ausgegangen, dass dieses Programm die DLL richtig in den fremden Prozess lädt.... hab ich keine Ahnung.

Aber per Inline-Assembler würde es wahrscheinlich auch einfach so gehen:
Delphi-Quellcode:
procedure HackMe; stdcall;
asm
  mov word [$0046A4A8], $07EB
  mov word [$0046A589], $07EB
end;
Ich weiß halt nicht, ob man in dem Prozess standardmäßig diese Pages beschreiben kann.
Ggf musst du halt noch MSDN-Library durchsuchenVirtualProtect benutzen. Ansonsten wüsste ich nicht woran es noch liegen könnte.

Xerogon 16. Mai 2011 18:41

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Problem gelöst ;)

Wenn jemand die Lösung braucht:
Delphi-Quellcode:

library testdll;

uses
  SysUtils,
  Windows,
  Classes;

VAR
    dwOldDestProt: DWord = 0; // Alter Protected Mode
    Data: Array[0..1] of Byte; // Zu schreibende Opcodes

{$R *.res}

Procedure MemSet; stdcall;
begin
  Data[0] := $EB;
  Data[1] := $07;


  // Protected Mode umstellen und alten Sichern
  VirtualProtect(Ptr($0046A4A8), SizeOf(Byte)*2, PAGE_EXECUTE_READWRITE, @dwOldDestProt);
  CopyMemory(Ptr($0046A4A8), @Data, SizeOf(Byte)*2);

  // Alten Modus wiederherstellen
  VirtualProtect(Ptr($0046A4A8), SizeOf(Byte)*2, dwOldDestProt, nil);


end;

exports MemSet;

begin
  MemSet;
end.

Zacherl 17. Mai 2011 01:09

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Ganz generell vielleicht noch zum "Memory Hacking". Hier zwar nicht so wichtig, weil der Code direkt in der EXE liegt, aber wenn du mal eine Anwendung hast, die DLLs nachläd und du in diese DLLs schreiben willst, dann immer relative Adressen der Form:

ImageBase + Offset

verwenden. Achso und wenn du wirklich nur einzelne Opcodes ändern willst, ist anstelle von CopyMemory der direkte Zugriff ganz hilfreich:

Delphi-Quellcode:
if VirtualProtect(Pointer($0046A4A8), 2, PAGE_EXECUTE_READWRITE, @dwOldDestProtect) then
try
  PByte($0046A4A8 + $00)^ := $EB;
  PByte($0046A4A8 + $01)^ := $07;
finally
  VirtualProtect(Pointer($0046A4A8), 2, dwOldDestProtect, nil);
end;
Dann musst du nicht groß mit Arrays rumbasteln und kannst bei eigenen Records sogar ganze Datenstrukturen bequem schreiben. Ich hatte vor einiger Zeit mal ein kleines Tutorial zum Thema verfasst:
http://opcodez.wordpress.com/2010/09...king-teil-1-5/

Xerogon 17. Mai 2011 05:54

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Danke, das Tutorial werde ich mir mal durchlesen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz