AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) [DLL Injection] Code in fremden Prozess einschleusen
Thema durchsuchen
Ansicht
Themen-Optionen

[DLL Injection] Code in fremden Prozess einschleusen

Ein Thema von Xerogon · begonnen am 16. Mai 2011 · letzter Beitrag vom 17. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2      
Xerogon

Registriert seit: 28. Jan 2010
27 Beiträge
 
#1

[DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 13:22
Hallo, ich beschäftige mich derzeit ein wenig mit DLL Injection und komme nicht weiter
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
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#2

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 13:32
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.

Geändert von Memnarch (16. Mai 2011 um 13:34 Uhr)
  Mit Zitat antworten Zitat
Xerogon

Registriert seit: 28. Jan 2010
27 Beiträge
 
#3

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 13:34
Ich hab das Programm mit OllyDBG analysiert.
Nur manchmal kommt mir der Verdacht, das die DLL im falschen Modul was schreiben will
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#4

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 13:57
Ich hab das Programm mit OllyDBG analysiert.
Nur manchmal kommt mir der Verdacht, das die DLL im falschen Modul was schreiben will
Es könnte auch der Verdacht aufkommen, daß das Gewünschte nicht immer an der selben Stelle/Adresse rumgammelt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 14:04
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Xerogon

Registriert seit: 28. Jan 2010
27 Beiträge
 
#6

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 14:07
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

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.
  Mit Zitat antworten Zitat
Xerogon

Registriert seit: 28. Jan 2010
27 Beiträge
 
#7

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 14:09
[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

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#8

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 14:11
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;


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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Mai 2011 um 14:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 14:14
@himitsu: Ich glaube es müsste $07EB sein.. Ist aber immer verwirrend

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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (16. Mai 2011 um 14:19 Uhr)
  Mit Zitat antworten Zitat
Xerogon

Registriert seit: 28. Jan 2010
27 Beiträge
 
#10

AW: [DLL Injection] Code in fremden Prozess einschleusen

  Alt 16. Mai 2011, 14:16
Ja, Daten aus einer Anwendung mit WriteProcessMemory umschreiben kann ich. Es sollte nur mal als Übung dienen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:44 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