Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eigene user32.dll (https://www.delphipraxis.net/154290-eigene-user32-dll.html)

Clemens L. 4. Sep 2010 11:28

Eigene user32.dll
 
Hallo,

ich versuche derzeit einem Programm eine von mir geschriebene DLL als user32.dll anzubieten. :stupid: Es handelt sich eigentlich nur um einen kleinen Test, bei dem ein paar Funktionen verändert werden sollen.

Allerdings scheint es Windows überhaupt nicht zu interessieren wenn sich eine user32.dll direkt im Programmverzeichnis befindet, es wird immer die original-Datei verwendet. Woran liegt das? Kann ich ein Programm irgendwie dazu bringen, die lokale Datei vorzuziehen?

gruß

Luckie 4. Sep 2010 11:32

AW: Eigene user32.dll
 
Das liegt daran, dass die DLL schon lange geladen ist von anderen Programmen und dein Zielprogramm sie nur noch in seinen Adressraum mappt ohne sie wirklich zu laden.

Clemens L. 4. Sep 2010 11:36

AW: Eigene user32.dll
 
Zitat:

Zitat von Luckie (Beitrag 1047462)
Das liegt daran, dass die DLL schon lange geladen ist von anderen Programmen und dein Zielprogramm sie nur noch in seinen Adressraum mappt ohne sie wirklich zu laden.

Verstehe ich nicht ganz. Das Zielprogramm ist ein einfaches Testprogramm, das z.B. die MessageBoxW-Funktion importiert:

Delphi-Quellcode:
function MessageBoxW; external user32 name 'MessageBoxW';
So sollte dann doch der Zugriff direkt auf die lokale Datei gehen. (Oder wird die echte DLL nicht jedesmal neu geladen wenn man ein Programm startet? :?:)

Gruß

Edit: Das Programm nimmt die DLL an, wenn ich mit nem Hex-Editor jedes vorkommen von user32.dll durch user33.dll ersetze und die DLL entsprechend benenne. :stupid: Ist leider nicht sehr "elegant" die Lösung, daher wäre es schon gut zu wissen, ob man das auch direkt machen kann.

Bernhard Geyer 4. Sep 2010 12:32

AW: Eigene user32.dll
 
Ein glück das bei System-DLL's sich Windows nicht so leicht austricksen lässte. Die aktuell hochkochende DLL-Lücke wäre evtl. noch schlimmer.

Was du machen willst lässt sich u.U. durch einen Globaln Hook auf die entsprechenden API-Funktionen erledigten.

Luckie 4. Sep 2010 13:47

AW: Eigene user32.dll
 
Zitat:

Zitat von Clemens L. (Beitrag 1047464)
(Oder wird die echte DLL nicht jedesmal neu geladen wenn man ein Programm startet? :?:)

Genau so ist es. Windows weiß, dass die DLL schon geladen ist und mappt eben nur die exportierten Funktionen in den Adressraum deines Programms ohne sie neu zu laden.

Dezipaitor 4. Sep 2010 17:08

AW: Eigene user32.dll
 
User32.dll ist eine von Windows bekannte DLL, die zuerst aus dem System32 Verzeichnis geladen wird von LoadLibrary o.Ä.

himitsu 4. Sep 2010 17:43

AW: Eigene user32.dll
 
Es sei denn man gibt einen qualifizierten Pfad mit an,
aber für statisch geladene DLLs ist das nicht unbedingt "optimal".

Delphi-Quellcode:
function MessageBoxW; external 'C:\MyProg\user32.dll' name 'MessageBoxW';
ging doch?
Nja, aber damit kann man eh nur eigene Deklarationen im Programm austauschen/neu deklarieren und nicht andere Deklarationen beeinflussen.

Also Hooks sollten besser laufen.

TBx 4. Sep 2010 20:37

AW: Eigene user32.dll
 
verrat uns doch mal, was Du damit bezwecken willst.
Dein vorgehen sieht so aus, als wolltest Du ein Programm unbedingt behumsen.
Warum? Was soll es bezwecken? Gefälschte System-DLLs unterzujubeln ist ein denkbar schlechter Weg, aber es gibt sicherlich noch andere Lösungsansätze.

Gruß aus dem Hohen Norden

Thomas

Clemens L. 4. Sep 2010 21:25

AW: Eigene user32.dll
 
Zitat:

Zitat von TBx (Beitrag 1047546)
verrat uns doch mal, was Du damit bezwecken willst.
Dein vorgehen sieht so aus, als wolltest Du ein Programm unbedingt behumsen.
Warum? Was soll es bezwecken? Gefälschte System-DLLs unterzujubeln ist ein denkbar schlechter Weg, aber es gibt sicherlich noch andere Lösungsansätze.

Gruß aus dem Hohen Norden

Thomas

Hat nicht wirklich einen Sinn, hatte halt einfach die Idee zwischen ein Programm und das System meine eigene DLL zu stecken, quasi als "Hook-Ersatz". :mrgreen: Dieser Thread enstand aus meiner Verwirrung warum das ganze nicht so wollte wie ich.

Hätte mir aber auch denken können, dass man nicht so ohne weiteres Systemdateien ersetzen kann.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.

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