Der Befehl haut dir wsock32.dll in die IAT der Exe und dann ist aus die Maus
Verhindern das Laden von DLLs aus dem lokalen Verzeichnis
Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni
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
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
- 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
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
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
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
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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
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
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


Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni
in diesem Fall wohl schwierig zu sagen, denn eigentlich müsstet Ihr auch noch alle Antworten in romks Crossposting durchwühlen.NicknameFJ hat geschrieben:Oder habe ich da was in der ganzen Diskussion nicht mitbekommen?
Grüße ... Peter
a²+b²=mc²
- 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
//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
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


Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni
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://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
~~~~~~~~~~~~~~~~~~~~~~
Ist eine gute Idee, danke! Ich werde das ausprobieren und die Ergebnisse posten...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
- 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
Das tue ich auch schon die ganze Zeit und finde das recht spannendKiffi hat geschrieben:eigentlich müsstet Ihr auch noch alle Antworten in romks Crossposting durchwühlen.
Die alte EXE zu hacken ist eine prima Idee,
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:\
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni
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
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
- 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
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.
Wie dem auch sei ~ es grüßt ~ Vera
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.
Irgendwie bestätigst Du damit meine Annahme, dass eine namensgleicheDLL nicht zwei mal geladen wird.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.
Wie dem auch sei ~ es grüßt ~ Vera
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Re: Verhindern das Laden von DLLs aus dem lokalen Verzeichni
Richtig, eine DLL wird in der Regel nur einmal geladen. Wird versucht eine DLL mehrmals zu laden, bekommt man lediglich das alte Handle zurueck.Vera hat geschrieben:[...]Irgendwie bestätigst Du damit meine Annahme, dass eine namensgleicheDLL nicht zwei mal geladen wird.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.
Wie dem auch sei ~ es grüßt ~ Vera
Code: Alles auswählen
; die DLL User32.DLL wird beim start automatisch eingebunden
Debug GetModuleHandle_("user32")
Debug LoadLibrary_("user32")
Debug OpenLibrary(0, "user32")