Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Xerogon 16. Mai 2011 13:22

[DLL Injection] Code in fremden Prozess einschleusen
 
Hallo, ich beschäftige mich derzeit ein wenig mit DLL Injection und komme nicht weiter :evil:
Ich habe das kostenlose Spiel "Furby Speed" und den "Winject" Injector. Ich nutze Win7 x64.

Mein Code sieht derzeit so aus.

Delphi-Quellcode:
library Project1;

uses
  SysUtils, Windows,
  Classes;

{$R *.res}

Procedure HackMe; stdcall;
var Data: Array[0..1] of Byte;
begin

  // zu schreibene Offsets
  Data[0] := $EB;
  Data[1] := $07;

    // Speicher Allocen
    VirtualAlloc(Ptr($0046A4A8), SizeOf(Byte)*2, MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    VirtualAlloc(Ptr($0046A589), SizeOf(Byte)*2, MEM_RESERVE, PAGE_EXECUTE_READWRITE);

    // Speicher umschreiben
    CopyMemory(Ptr($0046A4A8), @Data, SizeOf(Byte)*2);
    CopyMemory(Ptr($0046A589), @Data, SizeOf(Byte)*2);

end;

exports HackMe index 1;

begin
  HackMe;
end.
Warum stürzt das Programm immer ab wenn ich die DLL Injecte und wie könnte ich das überschreiben von Speicher in Inline Assembler lösen?
Vielen Dank für eure Antworten :thumb:

Memnarch 16. Mai 2011 13:32

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Meine Frage: Wo ziehlt den deine Adresse erstmal überhaupt hin`? Bist du dir sicher dass deine Adresse richtig ist?(bzw woher weißt du die? o.O)

EDIT: Und Hackme muss eig. nicht exportiert werden.
Wenn die DLL per winapi funktion in den Prozess geladen wird, wird automatisch das was zwischen begin...end steht ausgeführt.

Xerogon 16. Mai 2011 13:34

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Ich hab das Programm mit OllyDBG analysiert.
Nur manchmal kommt mir der Verdacht, das die DLL im falschen Modul was schreiben will :roll:

himitsu 16. Mai 2011 13:57

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Zitat:

Zitat von Xerogon (Beitrag 1101100)
Ich hab das Programm mit OllyDBG analysiert.
Nur manchmal kommt mir der Verdacht, das die DLL im falschen Modul was schreiben will :roll:

Es könnte auch der Verdacht aufkommen, daß das Gewünschte nicht immer an der selben Stelle/Adresse rumgammelt. :stupid:

Neutral General 16. Mai 2011 14:04

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

Sicher dass das VirtualAlloc nötig/richtig ist?
Ich gehe ja mal davon aus, dass du einen vorhandenen (!) Speicherbereich überschreiben willst.
VirtualAlloc reserviert aber NEUEN Speicher.

Wenn an der Stelle die du bei VirtualAlloc angibst schon Speicher reserviert ist, passiert folgendes:

Zitat:

lpAddress
The starting address of the region to allocate. If the memory is being reserved, the specified address is rounded down to the nearest multiple of the allocation granularity. If the memory is already reserved and is being committed, the address is rounded down to the next page boundary. To determine the size of a page and the allocation granularity on the host computer, use the GetSystemInfo function. If this parameter is NULL, the system determines where to allocate the region.

Xerogon 16. Mai 2011 14:07

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Zitat:

Es könnte auch der Verdacht aufkommen, daß das Gewünschte nicht immer an der selben Stelle/Adresse rumgammelt.
Das gammelt immer an der Stelle. Hab ich schon untersucht :-D

Zitat:

Zitat von Neutral General (Beitrag 1101109)
Hallo,

Sicher dass das VirtualAlloc nötig/richtig ist?
Ich gehe ja mal davon aus, dass du einen vorhandenen (!) Speicherbereich überschreiben willst.
VirtualAlloc reserviert aber NEUEN Speicher.

Wenn an der Stelle die du bei VirtualAlloc angibst schon Speicher reserviert ist, passiert folgendes:

Zitat:

lpAddress
The starting address of the region to allocate. If the memory is being reserved, the specified address is rounded down to the nearest multiple of the allocation granularity. If the memory is already reserved and is being committed, the address is rounded down to the next page boundary. To determine the size of a page and the allocation granularity on the host computer, use the GetSystemInfo function. If this parameter is NULL, the system determines where to allocate the region.

Ok, ich probiere es mal.

Xerogon 16. Mai 2011 14:09

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
[QUOTE=Xerogon;1101111]
Zitat:

Es könnte auch der Verdacht aufkommen, daß das Gewünschte nicht immer an der selben Stelle/Adresse rumgammelt.
Das gammelt immer an der Stelle. Hab ich schon untersucht :-D

Zitat:

Zitat von Neutral General (Beitrag 1101109)
Hallo,

Sicher dass das VirtualAlloc nötig/richtig ist?
Ich gehe ja mal davon aus, dass du einen vorhandenen (!) Speicherbereich überschreiben willst.
VirtualAlloc reserviert aber NEUEN Speicher.

Wenn an der Stelle die du bei VirtualAlloc angibst schon Speicher reserviert ist, passiert folgendes:

Zitat:

lpAddress
The starting address of the region to allocate. If the memory is being reserved, the specified address is rounded down to the nearest multiple of the allocation granularity. If the memory is already reserved and is being committed, the address is rounded down to the next page boundary. To determine the size of a page and the allocation granularity on the host computer, use the GetSystemInfo function. If this parameter is NULL, the system determines where to allocate the region.

Ok, ich probiere es mal.

Edit: Nein, geht nicht. jetzt habe ich eine Zugriffsverletzung in der DLL

himitsu 16. Mai 2011 14:11

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Auf kurz und noch weiter gekürtzt, heißt die Antwort von Neutral General, soviel wie
Delphi-Quellcode:
Procedure HackMe; stdcall;
begin
  // Speicher umschreiben
  PWord($0046A4A8)^ := $EB07;
  PWord($0046A589)^ := $EB07;
end;
oder $07EB; :gruebel:


Zitat:

Nein, geht nicht. jetzt habe ich eine Zugriffsverletzung in der DLL
Kann es sein, daß die Zugriffsrechte nicht passen?
Schreibrechte würde man schon für sowas benötigen und diese Rechte ändert man nicht über VirtualAlloc.
VirtualAlloc = neuen virtuellen Speicher resservieren, aber wenn man mal bei MSDN-Library durchsuchenVirtualAlloc ins MSDN guckt und da weiterklickt, dann landet man bei MSDN-Library durchsuchenVirtualProtect :angle2:

Neutral General 16. Mai 2011 14:14

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
@himitsu: Ich glaube es müsste $07EB sein.. Ist aber immer verwirrend :mrgreen:

Wenn das wirklich alles ist, dann würde ich mir den ganzen Mist mit der DLL-Injection sparen und einfach MSDN-Library durchsuchenWriteProcessMemory benutzen ;)

Edit: Ergänzung zu himitsus Beitrag: Rechte ändert man mit MSDN-Library durchsuchenVirtualQuery(Ex) MSDN-Library durchsuchenVirtualProtect

Xerogon 16. Mai 2011 14:16

AW: [DLL Injection] Code in fremden Prozess einschleusen
 
Ja, Daten aus einer Anwendung mit WriteProcessMemory umschreiben kann ich. Es sollte nur mal als Übung dienen. :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr.
Seite 1 von 2  1 2      

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