DLL injection wozu braucht man sowas?



  • was genau macht man da verändert man da die dll so dass das programm das die dll läd plötzlich eine andere funktion ausführt als es die dll für den funktionsnamen vorsieht?

    ich verstehe das so:
    die original dll, beeinhaltet die funktion

    bool dummy(dummyparam){
    printf("Helllo dummmy!");
    return true;
    }
    

    nach der dll injection könnte die funktion dann so aussehen?

    bool dummy(dummyparam){
    printf("I dont say Hello, dummmy!");
    return false;
    }
    

    oder würde das nicht funktionieren oder verstehe ich da was falsch?



  • c&p: hast ja deinem namen alle ehre gemacht 😉
    Das wäre dann das Überladen einer Funktion der DLL, sowas ist möglich. D.h. deine Annahme ist schonmal richtig.
    So als Anwendungsbeispiel: Dein Programm hat keine Berechtigung auf dem Computer eine Aktion durchzuführen (z.B. Änderung von Einstellungen), weil dafür Administratorrechte benötigt werden. Dann lädst du deinen Code über eine DLL-Injection in ein Programm, was die nötigen Rechte hat und lässt ihn ausführen.

    Ist jetzt nicht unbedingt das beste Beispiel, mir fällt bloß kein anderes harmloses ein ^^



  • Fake oder Echt schrieb:

    So als Anwendungsbeispiel: Dein Programm hat keine Berechtigung auf dem Computer eine Aktion durchzuführen (z.B. Änderung von Einstellungen), weil dafür Administratorrechte benötigt werden. Dann lädst du deinen Code über eine DLL-Injection in ein Programm, was die nötigen Rechte hat und lässt ihn ausführen.

    ja, wenn das doch so einfach währe ...


  • Mod

    DLL Injection braucht "eigentlich" kein Mensch.

    - außer man will Hacks schreiben oder das "normale" Verhalten eines Programmes manipulieren.
    Wenn ds "normale" Verhalten also buggy wäre, könnte man in bestimmten Fällen versuchen mit einem Hook so etwas zu fixen.
    Wenn man gutes "normales" Verhalten in böses Verhalten ändert hat man also einen Schadcode.
    - Eine DLL Injection ist auch schon ein systemweiter Hook. Und hooks machen in bestimmten wenigen Fällen Sinn. Hier im Forum wird immernur nach Tastatur-Loggern gefragt und ich bezweifle, dass es sich bei den Anfragen um "gute gementen" Code handelt.
    - Im Testphasen kann es sehr gut sein, das ein Hook (im eigenen Prozess), einem helfen kann Fehlverhalten des eigenen Programmes aufzuspüren.

    Just my 2 cents.



  • Martin Richter schrieb:

    - Eine DLL Injection ist auch schon ein systemweiter Hook.

    Aber doch nicht zwingend



  • Was mir noch einfallen würde wäre die Umleitung und Manipulation von Funktionsaufrufen. So könnte ein Programm die Funktionen zum Beenden von Prozessen so manipulieren, dass der eigene Prozess nicht beendet werden kann. Denkbar wäre das für Schadprogramme oder eben für Anti-Viren-Programme, die nicht beendet werden sollen.

    Einfach dürfte so etwas auf keinen Fall sein. Kann sein, dass man dafür sogar einen Treiber programmieren muss um einen Kernel-Hook zu setzen.



  • Jochen S. schrieb:

    Kann sein, dass man dafür sogar einen Treiber programmieren muss um einen Kernel-Hook zu setzen.

    Oder ein Prozess-Filter zbsp:

    Damit der Prozess-Filter den zu startenden Prozess abfangen kann, gibt es unterschiedliche Möglichkeiten. Der Prozess-Filter könnte parallel zu den anderen Prozessen laufen und dauernd prüfen, welche Prozesse in der Task-Liste des Betriebssystems aufgeführt werden. Sobald ein nicht berechtigter Prozess auftaucht, wird er vom Prozess-Filter beendet. Diese Methode hat den grossen Nachteil, dass der Prozess bereits starten konnte und erste bösartige Instruktionen bereits ausgeführt wurden. Ein weiterer Ansatz ist ,einen Hook in die Windows API Funktion CreateProcess zu platzieren, sodass der Prozess-Filter vor jedem Prozessstart die Berechtigung prüft. Die CreateProcess Funktion läuft im User Mode. Der Nachteil dieser Methode ist, dass nicht alle Programme über die Windows API CreateProcess gestartet werden. Ein Entwickler kann direkt auf die Kernel Schnittstelle zugreifen, wenn er die entsprechenden Befehle kennt. Der dritte Ansatz basiert darauf, dass der Hook in der Kernel Funktion NTCreateProcess platziert wird. Diese Funktion muss bei allen Prozessstarts durchlaufen werden und bietet daher den idealen Ort für den Prozess-Filter. Das Windows Betriebssystem bietet standardmässig keine Möglichkeit, einen Hook in die NTCreateProcess einzufügen. Es gibt jedoch eine Benachrichtigungsmöglichkeit der NTCreateProcess-Funktion. Die Benachrichtigung erfolgt jedoch erst nach dem Start, und wie vorhin beschrieben ist dies für den Prozess-Filter zu spät. Aus diesem Grunde muss die NTCreateProcess Funktion im Kernel verändert werden. Das heisst, sobald die Funktion aufgerufen wird, muss der Prozess-Filter die Kontrolle bekommen. Der Prozess-Filter prüft dann die Liste der berechtigten Prozesse. Falls das Programm gestartet werden darf, übergibt der Prozess-Filter die Kontrolle wieder der NTCreate-Process Kernel Funktionen. Ansonsten verweigert der Prozess-Filter den Zugriff auf die Datei und die NTCreateProcess Funktion kann das Programm nicht in den Prozess laden.
    Damit Veränderungen im Kernel vorgenommen werden können, muss der Prozess-Filter als System-Treiber installiert werden. Ein System-Treiber wird durch dessen Installation ein Teil des Betriebssystems.

    Es muss nicht immer ein (BAD) Nachgeschmack haben.



  • @lowbyte:
    sowas wär ein tolles Programm dann könnte man auch ständig in einem Fenster anzeigen lassen welche Programme bzw welche Prozesse welchen Prozess starten und killen ... würde einen tollen Einblick in Windows geben, sonst fühlt man sich immer so blind denn man kann so ja nicht protokollieren was welcher Process so macht. das würde wohl dann auch mit CreateFile funktionieren?



  • Juhuuu schrieb:

    @lowbyte:
    sowas wär ein tolles Programm dann könnte man auch ständig in einem Fenster anzeigen lassen welche Programme bzw welche Prozesse welchen Prozess starten und killen ... würde einen tollen Einblick in Windows geben, sonst fühlt man sich immer so blind denn man kann so ja nicht protokollieren was welcher Process so macht. das würde wohl dann auch mit CreateFile funktionieren?

    Natürlich. Und solche Programme gibt es doch schon:
    http://www.chip.de/downloads/Process-Monitor_22625020.html


  • Mod

    Hi schrieb:

    Martin Richter schrieb:

    - Eine DLL Injection ist auch schon ein systemweiter Hook.

    Aber doch nicht zwingend

    Zwingend. Es gibt keinen systemweiten Hook, ohne Hook-DLL, die in einen anderen Prozess geladen (injeziert) wird.


Anmelden zum Antworten