XspYroX Geschrieben 19. September 2012 Geschrieben 19. September 2012 hi. Eine Frage an euch Profis Ich habe eine DLL-Datei, aus der ich eine bestimmte Funktion entfernen möchte bzw. diese Funktion soll einfach "nichts" mehr tun. Wie bekomme ich das am einfachsten hin, ohne den eigentlichen Quellcode zu haben? Kann ich mit irgend einem Editor die datei öffnen und an die gewünschte stelle springen? Hab bisher mit DLLs noch keine wirklichen erfahrungen gehabt :/ Hab schon Reverse-Engineering-Tools ausprobiert, aber... geht das nicht irgendwie einfacher, wenn ich schon genau weiß, was die DLL nicht mehr machen soll und wie die spezielle Funktion heißt, die geändert werden soll? Oder kann ich irgendwie einen Ramen um diese DLL programmieren, der diesen funktionsaufruf abfängt und bearbeitet? Freue mich über jede Hilfe, die ich kriegen kann LG XspYroX Zitieren
Guybrush Threepwood Geschrieben 19. September 2012 Geschrieben 19. September 2012 Sofern du nicht fließend Binärcode sprichst kannst du da nix mit nem Texteditor machen. Die Idee da eine andere Wrapper DLL zu schreiben welche alle bis auf den einen Aufruf an die ursprüngliche DLL weiterleitet ist da die einzige sinnvolle Möglichkeit. Zitieren
XspYroX Geschrieben 19. September 2012 Autor Geschrieben 19. September 2012 @Guybrush Treepwood: Hehe, ich spreche nur gebrochen Binärcode mit Hex-Akzent Ne, Spass beseite... Also..hmm... dann müsste ich wohl ne Wrapper-DLL schreiben. Frage: Da ich ja nur eine einzige Funktion weiterleiten möchte, sollte die Wrapper-DLL ja eigentlich recht einfach aussehen, oder? Also sowas wie: (pseudocode) if [function.name == "spezielle_funktion"] then ( // nothing ) else ( call eigentliche_dll.function.name ) Kann ich sowas auch ohne Kenntnisse im DLL-Programmieren hinbekommen? Kenne mich "nur" mit VB, C (commandbox-ebene), C++(commandbox-ebene) und PHP uns.w. aus. Oder hast du vielleicht eine tutorial-seite, die mir da weiterhilft? Wie gesagt.... ich woltle das eigentlich hinbekommen, ohne das ganze drumherum über DLL-Programmierung zu erlernen. Bin gerade mit anderen Programmier-Sachen beschäftigt ^^" Dankööö schonmal LG XspYroX Zitieren
Klotzkopp Geschrieben 19. September 2012 Geschrieben 19. September 2012 Geh bitte mal einen Schritt zurück, und beschreibe das eigentliche Problem, also das, das du mit der DLL-Manipulation zu lösen glaubst. Es kann nämlich sein, dass es eine einfachere Lösung gibt. Zitieren
XspYroX Geschrieben 19. September 2012 Autor Geschrieben 19. September 2012 Gerne Also: Ich nutze ein MediPlayer-Plugin der Firma UMedia (Unreal Media Player plugin , ist ein Active-X Plugin) zum abgreifen und darstellen von Live-Streams im Browser-Fenster (nur im InternetExplorer, drumherum ist PERL). Das Plugin aktualisiert sich zu bestimmten Momenten (entweder trigger ich es per Hand oder der Stream bricht ab. Bei Abbruch versucht das Plugin in bestimmten Zeitabständen selbst die Wiederherstellung der Verbindung). Allerdings wird bei jeder aktualisierung automatisch (durch die DLL, steht nirgendwo als Config-Option) der Windows-Focus auf das IE-Frame gesetzt. D.h. wenn ich gerade nebenbei nen Text tippe, dann fleigt der Focus ständig aus Word raus auf das IE-Frame. Generell Focus-Änderungen beim IE oder allen Ective-X Plugins zu deaktivieren/verhindern habe ich erfolglos versucht. Viele andere haben dieses Problem, aber nirgendwo gibt es eine Lösung (für Windows 7). Ich habe die DLL in Vosual Studio geladen und dort wurden mir die vorhandenen Funktionen derDLLL angezeigt (nur die Funktionen. weder code noch war etwas zu editieren). Dort habe ich die "BringToFocus()" (oder so ähnlich) gefunden, die laut Beschreibung eben das macht, nämlich den Z-Index festzulegen. Wenn ich es also schaffe, diese Function "funktionslos" zu machen, dann sollte der Focus nicht mehr springen sondern auf dem aktuell ausgewählten Element bleiben Falsl du natürlich einen anderen weg kennst, wie man dieses Active-X Plugin am Focusändern hindert, dann nur her damit. Würdest mir damit nen Haufen Arbeit und Ärger ersparen LG XspYroX Zitieren
Aras Geschrieben 19. September 2012 Geschrieben 19. September 2012 Ist ganz einfach... Datei mit einem Disassembler laden und die Funktionsaufrufe oder die Funktion mit nop füllen. Zitieren
XspYroX Geschrieben 19. September 2012 Autor Geschrieben 19. September 2012 Ist ganz einfach... Datei mit einem Disassembler laden und die Funktionsaufrufe oder die Funktion mit nop füllen. Klingt einfacherals es für mich ist Hab jetzt gerade die DLL-Datei mit dem Tool "ollydbg" geöffnet und sehe ähnliches Brain**** wie bei "WDASM" (hatte WDASM davor schonmal probiert) So wie ich das sehe, finden sich dort aber nicht die klartext-function-names wie in meinem Fall "bringToFocus", oder? Oder bin ich nur gerade mit dem ganzen Code überfordert? edit: Wenn ich die DLL mit "ollydbg" öffnen will kommt die Meldung "File blabla.dll is a Dynamic Link Library. Windows can't execute DLLs directly. Launch LOADDLL.EXE? Hab da immer ja angeklickt, aber ... lädt er dann überhaupt die DLL? Oder lädt er nur den Code der LOADDLL.EXE? LG XspYroX Zitieren
lbm1305 Geschrieben 19. September 2012 Geschrieben 19. September 2012 Die Frage ist, ob dies zulässig ist. Ansonsten die benötigte Funktion abbilden und die bisherige Funktion kaspeln. (Pseudocode) public string GetValue(string param) { var instance = new Instance(); return instance.GetValue(param); } Zitieren
XspYroX Geschrieben 20. September 2012 Autor Geschrieben 20. September 2012 Hmmm... Tutorials scheint es dazu wohl wenige im Internet zu geben :/ Wäre es ein großer aufwand, hier den C++-Code zu posten anstelle von Pseudocode? Wie gesagt: Außer dies eine Function nicht weiterzuleiten, soll die Wrapper-DLL nichts machen ^^"" Danke schonmal ._. Wenn ich mehr Zeit habe, sollte ich mich echt mal genauer mit DLLs beschäftigen >_< LG XspYroX Zitieren
Aras Geschrieben 20. September 2012 Geschrieben 20. September 2012 gibt ein msgina.dll wrapper c++ quelltext. Zitieren
Klotzkopp Geschrieben 21. September 2012 Geschrieben 21. September 2012 Wäre es ein großer aufwand, hier den C++-Code zu posten anstelle von Pseudocode?Es gibt nicht "den" Code. Wie sehen denn die exportierten Symbole der DLL aus? Das kannst du z.B. mit dem Dependency Walker herausbekommen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.