Seite 2 von 3

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 17.11.2014 19:28
von _JON_
Ich hab doch gesagt InitNetwork() kannst nicht nehmen.
Der Befehl haut dir wsock32.dll in die IAT der Exe und dann ist aus die Maus :(

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 17.11.2014 19:34
von ts-soft
Naja, PB importiert die WinSock Library natürlich, wenn Funktionen daraus aufgerufen werden.
Wenn also z.B. InitNetwork() aufgerufen wird, wird die WSAStartup_(....) aufgerufen.
Da kann ich auch nicht weiterhelfen. Updaten würde ich die SystemDLL sowieso nicht, jede
Windows-Version hat da eine bestimmte und nur diese wird Funktionieren.

Nachtrag zu SetSearchPathMode
Diese Funktion wurde nicht von PB importiert, da erst ab Windows 7 immer verfügbar, würde bei
älteren Windows-Versionen also auch evtl. Fehler erzeugen.
Und Importieren ging leider auch nicht, da die verwendete Kernel32.lib von PB zu alt ist :mrgreen:

Deshalb also dynamisches Laden, welches Funktioniert, wenn Funktion vorhanden, aber leider nicht
zum Ziel führt.

Ich würde sagen, Pech, es sei den da fällt noch jemand eine andere Lösung ein.

Gruß
Thomas

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 17.11.2014 19:44
von NicknameFJ
Hi,

nur mal so ne Idee.

Du kannst doch die DLL umbenennen und mit einem Hex-Editor (z.B. http://www.chip.de/downloads/Hex-Editor ... 51843.html) den Namen (der dort wohl literal vorhanden ist) in der EXE ebenfalls ändern. Dann greift das Fremdprogramm auf die umbenannte DLL zu und Du kannst in Deinem Prog auf die richtige DLL zugreifen.

Oder habe ich da was in der ganzen Diskussion nicht mitbekommen?

NicknameFJ

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 17.11.2014 20:02
von Kiffi
NicknameFJ hat geschrieben:Oder habe ich da was in der ganzen Diskussion nicht mitbekommen?
in diesem Fall wohl schwierig zu sagen, denn eigentlich müsstet Ihr auch noch alle Antworten in romks Crossposting durchwühlen.

Grüße ... Peter

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 17.11.2014 20:09
von NicknameFJ
//Start OT

Crossposting - wer macht denn sowas ?

OK, ist manchmal unerlässlich wenn man keine Antwort bekommt, aber doch nicht in den beiden Foren innerhalb einer Stunde.

Im Mittelalter wäre man dafür gesteinigt - oder zumindest einen Tag an den Pranger gestellt - worden.

// End OT

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 17.11.2014 20:28
von romk
NicknameFJ hat geschrieben://Start OT

Crossposting - wer macht denn sowas ?

OK, ist manchmal unerlässlich wenn man keine Antwort bekommt, aber doch nicht in den beiden Foren innerhalb einer Stunde.

Im Mittelalter wäre man dafür gesteinigt - oder zumindest einen Tag an den Pranger gestellt - worden.

// End OT
Das sind fast schon 2 unterschiedliche Communities mit anderen Usern, wie man unschwer an den Antworten erkennen kann, und am Fakt dass ich jeweils einen Account anlegen musste.

~~~~~~~~~~~~~~~~~~~~~~
NicknameFJ hat geschrieben:Hi,

nur mal so ne Idee.

Du kannst doch die DLL umbenennen und mit einem Hex-Editor (z.B. http://www.chip.de/downloads/Hex-Editor ... 51843.html) den Namen (der dort wohl literal vorhanden ist) in der EXE ebenfalls ändern. Dann greift das Fremdprogramm auf die umbenannte DLL zu und Du kannst in Deinem Prog auf die richtige DLL zugreifen.

Oder habe ich da was in der ganzen Diskussion nicht mitbekommen?

NicknameFJ
Ist eine gute Idee, danke! Ich werde das ausprobieren und die Ergebnisse posten...

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 17.11.2014 22:13
von Vera
Kiffi hat geschrieben:eigentlich müsstet Ihr auch noch alle Antworten in romks Crossposting durchwühlen.
Das tue ich auch schon die ganze Zeit und finde das recht spannend :-)

Die alte EXE zu hacken ist eine prima Idee, 8) so hab' ich mir auch schon so manches Programm zurecht gebogen ... mit UE geht das auch gut.

Da mir das DLL-Thema reichlich fremd ist, lese ich hier auch gerne mit ... und dann ist mir dazu eine Frage gekommen.
Wenn doch ein besonderer Vorteil von DLLs ist, 'shared' verwendet zu werden und nur einmal in den Speicher geladen werden, kann es dann nicht sein, dass die SystemDll überhaupt nicht mehr geladen wird, wenn schon die namensgleiche alte im Speicher ist?
In wieweit triggert vielleicht das Programm zunächst den Updater, wodurch dann die alte DLL geladen wird und die vom Programm ebenso angeforderte DLL dann übergangen wird?
Oder falls der Updater vorher schon mal lief, die DLL im Speicher ist und bei Programmende jedoch nicht entfernt wird, würde die neue DLL ebenso nicht nachgeladen.

Ist vielleicht alles abwegig ~ geht mir aber immer wieder durch den Kopf.

cheers ~ Vera

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 18.11.2014 04:10
von romk
Also die veraltete Anwendung habe ich mit Hexeditor geändert, funktioniert bestens. Allerdings ist leicht nervig, dass man die länge der eingebetteten Strings in der EXE nicht ändern kann. Verlängert man ihn, verschieben sich Speicheradressen und zerschießen damit alle Zeiger. Schiebt man Leerzeichen ein, erkennt er sie nicht richtig. Ich hab jedenfalls keine Geduld gehabt, mich damit näher zu befassen. Die DLL habe ich jetzt mit derselben Namenslänge von wsock32.dll in wsocipx.dll umbenannt, und es funktioniert nun alles so wie es soll.

Es bleibt natürlich nach wie vor die Fehlermeldung für die Leute, denen ich den Updater schicke, die noch die gefakte DLL mit dem alten, irreführenden Namen haben, denen muss ich extra sagen dass sie sie löschen sollen, wonach der Updater selbstständig alle nötigen Dateien, inklusive der wsocipx.dll, runterlädt.

~~~~~~~~~~~~~~~~~~~~~~~~~

@Vera Das veraltete Programm (oder vielmehr sind es sogar zwei) triggert nichts, der Updater dient nun als Launcher, bei dem man gleich wählen kann, welches man starten will. Soweit ich weiß interessiert es ein Programm, welches eine DLL laden will nicht, ob die DLL bereits geladen ist oder nicht, da ja immer zuerst Speicher geprüft wird ob sie schon geladen ist - wenn nicht, ist sie ja nicht gelockt und kann geladen werden.

Finde ich abseits der zu meisternden Aufgabe an sich auch spannend, dieses ganze Thema und das Drumherum. Aber da ich mein Problem nur beseitigt habe, wird das wohl leider schnell abebben... es sei denn jemand stößt noch etwas relevantes dazu.

Danke allen für die Ideen und Hilfe!
Romk

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 18.11.2014 19:53
von Vera
Hi romk,
Prima, dass sich dieser Konflikt so einfach lösen ließ :)

Du könntest den DLLnamen einkürzen, dabei vorne beim Anfangsbuchstaben anfangen und den obsoleten hinteren Teil dann nicht mit Leerezichen auffüllen, sondern mit echten NULLen ersetzen. Kannst Du ja beim nächsten mal ausprobieren.
romk hat geschrieben:Soweit ich weiß interessiert es ein Programm, welches eine DLL laden will nicht, ob die DLL bereits geladen ist oder nicht, da ja immer zuerst Speicher geprüft wird ob sie schon geladen ist - wenn nicht, ist sie ja nicht gelockt und kann geladen werden.
Irgendwie bestätigst Du damit meine Annahme, dass eine namensgleicheDLL nicht zwei mal geladen wird.

Wie dem auch sei ~ es grüßt ~ Vera

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Verfasst: 19.11.2014 16:52
von edel
Vera hat geschrieben:[...]
romk hat geschrieben:Soweit ich weiß interessiert es ein Programm, welches eine DLL laden will nicht, ob die DLL bereits geladen ist oder nicht, da ja immer zuerst Speicher geprüft wird ob sie schon geladen ist - wenn nicht, ist sie ja nicht gelockt und kann geladen werden.
Irgendwie bestätigst Du damit meine Annahme, dass eine namensgleicheDLL nicht zwei mal geladen wird.

Wie dem auch sei ~ es grüßt ~ Vera
Richtig, eine DLL wird in der Regel nur einmal geladen. Wird versucht eine DLL mehrmals zu laden, bekommt man lediglich das alte Handle zurueck.

Code: Alles auswählen

; die DLL User32.DLL wird beim start automatisch eingebunden

Debug GetModuleHandle_("user32")
Debug LoadLibrary_("user32")
Debug OpenLibrary(0, "user32")