Verhindern das Laden von DLLs aus dem lokalen Verzeichnis

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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 :(
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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
a²+b²=mc²
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
romk
Beiträge: 7
Registriert: 17.11.2014 02:21

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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...
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
romk
Beiträge: 7
Registriert: 17.11.2014 02:21

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni

Beitrag 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")
Antworten