Kann man Systembibliotheken verstecken und Aufrufe durch eine eigene Bibliothekn gleichen Namens leiten?



  • Kann man vor einem Programm dessen Quellcode man nicht hat, eine Systembibliothek verstecken und die Bibliotheksaufrufe von diesem Programm zu einer eigenen Bibliothek leiten, die die selben Funktionsnamen enthält wie die Original Bibliothek um dann die Daten zu übwachen, loggen, zu verändern und dann an die Original Bibliothek weiterleiten?

    Ich meine hier jetzt also nicht so etwas wie einen universellen Debugger, sondern halt eben eine Art Wrapperlibrary, mit dem Unterschied, daß die Originallibrary auf dem System halt trotzdem vorhanden ist.

    Oder um es so zu beschreiben, sagen wir mal es gäbe eine Systembibliothek namens
    original.dll und diese hätte 3 Funktionen:
    foo()
    bar()
    und
    bla()

    Und jetzt gebe es ein Programm, daß diese 3 Funktionen dieser Bibliothek aufruft, kann man diese Aufrufe dann an eine eigene Bibliothek gleichen Namens, also original.dll (obwohl sie das ja nicht ist) vorher weiterleiten, und dann manipzlieren und sie an die echte original.dll dann am Ende weiterleiten?



  • Ja äh Änderungen auf der Laufzeitplattform machen - ne - haha



  • Das müsste eigentlich schon funktionieren, indem du deine eigene original.dll in das Arbeitsverzeichnis der exe packst.



  • Michael E. schrieb:

    Das müsste eigentlich schon funktionieren, indem du deine eigene original.dll in das Arbeitsverzeichnis der exe packst.

    Vorausgesetzt, das auszuführende Programm ist so geschrieben, dass es dann auch die dll aus dem Arbeitsverzeichniss nimmt und z.B. nicht überschreibt. Genauso könnte der Autor des Programm aber auch einprogrammiert haben das die größe des dll überprüft wird und wenn die nicht übereinstimmt wird das dll für defekt gehalten und eben neu geladen und zwar von der Laufzeitplattform.


  • Mod

    Gibt's in Windows nicht etwas vergleichbares wie LD_PRELOAD in Linux? Kann ich mir nicht vorstellen, dass solch eine Funktionalität fehlt, man müsste bloß wissen wie sie heißt.



  • Mit dem Kompitibilitätsmodus wäre es auch noch möglich dem Programm etwas aufzuzwingen. Denn für sowas hat Windows ja bereits einen fertigen Dienst/Schnittstelle.

    Der Modus der dem Programm zugewießen wird, müsste dann halt nur entsprechend umkonfiguriert werden.



  • Kann es nicht eher passieren das die Applikation den Einstiegspunkt in der dll nicht mehr findet? Sofern es kein Plug-in System einsetzt ist es doch recht fest verdrahtet.



  • detours



  • SeppJ schrieb:

    Gibt's in Windows nicht etwas vergleichbares wie LD_PRELOAD in Linux? Kann ich mir nicht vorstellen, dass solch eine Funktionalität fehlt, man müsste bloß wissen wie sie heißt.

    Das Linken von Windows DLLs funktioniert ganz anders als Shared-Objects.
    Ein DLL-Import besteht aus DLL-Name + Funktions-Name, etwas ala LD_PRELOAD hätte daher keinen Effekt. Es sei denn die über preload reingezogene DLL würde die Import-Tables der .exe patchen.

    ----

    Was im Arbeitsverzeichnis ablegen angeht: AFAIK klappt das nicht, zumindest nicht mehr auf neueren Windosen, da Windows zuerst mal in den System-Verzeichnissen sucht. Egal was der Suchpfad sagt, egal ob im Programmverzeichnis eine DLL passenden Namens liegt. Aus Sicherheitsgründen.

    Man kann allerdings, soweit ich weiss, wenn man es irgendwie in den Prozess der Anwendung schafft, die bereits "geladene" und mit den System-DLLs "verlinkte" .exe nachträglich patchen.

    Rarurick.


Anmelden zum Antworten