Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DLL-Injection klappt nicht (https://www.delphipraxis.net/171313-dll-injection-klappt-nicht.html)

Lyan 31. Okt 2012 04:51

Delphi-Version: 7

DLL-Injection klappt nicht
 
Hallo,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const Pfad = 'C:\temp\test.dll';
var
  h : HWND;
  r, hProc, Fehler : DWORD;
  pVAE : Pointer;
begin
  h := FindWindow(nil,PAnsiChar('Unbenannt - Editor'));
  GetWindowThreadProcessId(h,@r);
  hProc := OpenProcess(PROCESS_ALL_ACCESS,false,r);
  pVAE := VirtualAllocEx(hProc,nil,length(Pfad)+1,MEM_COMMIT OR MEM_RESERVE,PAGE_READWRITE);
  WriteProcessMemory(hProc,pVAE,Pchar(Pfad),length(Pfad)+1,Fehler);
  CreateRemoteThread(hProc,nil,0,getprocaddress(loadlibrary('kernel32.dll'),'LoadLibraryA'),pVAE,0,Fehler);
end;
wäre für Denkanstöße, warum es so nicht funktioniert sehr dankbar!

Vlt. verstehe ich auch etwas falsch:
also habe mal ganz easy mit findwindow "h" das handle von notepad zugewiesen, dann in "r" die Processid gespeichert... hProc das Handle des Prozesses zugewiesen. Dann mit VirtualAllocEx Speicher für den String "C:\temp\test.dll" alloziert und mit WriteProcessMemory dann den String reingeschrieben.

Und ja, dann CreateRemoteTherad das handle von OpenProcess wieder geben,
Code:
"A pointer to the application-defined function of type LPTHREAD_START_ROUTINE to be executed by the thread and represents the starting address of the thread in the remote process. The function must exist in the remote process. For more information, see ThreadProc."
deshalb GetProcAddress(loadlib) machen und halt eben den Pfad zur DLL...


Hilfe ;)

Bernhard Geyer 31. Okt 2012 05:52

AW: DLL-Injection klappt nicht
 
Ich glaube nicht das notepad (Glaskugel meint das aufgrund des Fenstertitels) noch mit Ansi-Versionen der Win-API arbeitet.
Und unter Win64 ist notepad eine 64-Bit App in die du eine 32-Bit DLL nicht injekten kannst.

himitsu 31. Okt 2012 11:33

AW: DLL-Injection klappt nicht
 
Mit 64 Bit macht es eh Spaß.

Zum Schutz werden dort doch die BaseAdresses der DLLs zufällig vergeben, damit dort Viren und Co. weniger Schaden anrichten können ... mit der lokalen Adresse einer DLL wird man im anderem Prozess dann wohl nicht viel anfangen können, da diese dort vermutlich ganz wo anders liegt.


Und wie man immer wiedr sagen muß:
Werte endlich mal die Rückgabewerte der aufgerufenen Funktionen aus!

Bernhard Geyer 31. Okt 2012 13:13

AW: DLL-Injection klappt nicht
 
Zitat:

Zitat von himitsu (Beitrag 1189214)
Und wie man immer wiedr sagen muß:
Werte endlich mal die Rückgabewerte der aufgerufenen Funktionen aus!

Rückgabewerte/Fehlernummern ist nur was für Weicheier :-)

wicht 31. Okt 2012 19:10

AW: DLL-Injection klappt nicht
 
Eventuell fehlt das Debug-Privileg um an den "fremden" Speicher zu kommen.

Lyan 14. Nov 2013 19:37

AW: DLL-Injection klappt nicht
 
Zitat:

Zitat von wicht (Beitrag 1189261)
Eventuell fehlt das Debug-Privileg um an den "fremden" Speicher zu kommen.

Ist zwar schon alter Käse, aber war mal grad am schauen was ich damals so für Fragen gestellt habe und bin hierauf gestoßen:

Es lag dummer- und logischerweise daran, dass notpad eine 64-bit app war.

Aber für alle die ähnliche Probleme haben:

Debug Privilege sind oftmals auch erforderlich, einfach mal hier schauen:

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx


Lg


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 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