Codeinjection - wozu gut?



  • Hallo,
    kann mir einer von euch erklären wozu Codeinjection z.b. von einer dll
    gut ist? Wo wird das sinnvoll angewendet?
    Ich meine hier, das einbinden einer dll in eine fremde exe über ein
    eigenes Programm. Wie soll denn das Programm, in welches die dll
    "injected" wurde, nun mit der dll kommunizieren?
    Das erscheint mir noch alles vollkommen unklar 😕



  • Codeinjection dienen dazu, dass man seinen Code in Binaries (also bereits kompiliert Code) einfügen kann. Naja, konkret bedeutet das, dass du zB die Funktionen eines Programmes umbiegen kannst. Du kannst zB die Funktion umbiegen, die ein Button zeichnet und deine eigenen Grafiken einfügen oder die Funktion in deinem Dateibrowser, die beim öffnen einer Datei aufgerufen wird oder was dir gerade so einfällt.

    Für OSX siehe zB http://rentzsch.com/mach_inject/ http://rentzsch.com/mach_override Dort findest du auch ein paar Slides, die dir das vorgehen genauer erklären.



  • Aha. Ich habe bis jetzt nur etwas drüber lesen können, wo stand, dass
    man praktisch nur den Konstruktor der DLL erreicht. Aber nicht direkt
    eine Funktion innerhalb der DLL direkt ansprechen kann.

    Wenn ich dich jetzt richtig verstehe, kann man in einer injizierten dll
    also zB die Funktion "xy" anlegen und wenn diese in der zu injizierenden
    exe bereits vorhanden ist, wird sie "überschrieben"(?) und der code der
    injizierten dll hat vorrang.



  • Wie das genau bei DLLs (du sprichst von Windows nehm ich an) funktioniert weiß ich nicht. Aber im Prinzip biegst du den Funktionstable der DLL (des Binaries) um.



  • kingruedi schrieb:

    Aber im Prinzip biegst du den Funktionstable der DLL (des Binaries) um.

    ???
    von welcher DLL sprichst du jetzt? Von der injizierten? da brauch ich doch nichts umbiegen.
    Von den anderen Dlls? dann würdest du plural nehmen. Außerdem wird da zunächst nichst umgebogen.
    Wenn ich Funktionen "umbiegen" will, muss ich natürlcih in meiner injizierten dll eine ersatzfunktion liefern. Zudem muss ich mir adressen aller Module des Prozesses holen und in JEDEM MODUL die Importabschnittstabelle suchen, da nach der Funktion suchen und da die Sprungadresse ändern. Da der Prozess auch module nachladen könnte, muss ich das auch für LoadLibrary z.b. machen. das ist aber auch nicht sicher. er könnte sich ja auch Funktionen mit GetProcAddress holen. also da gibts viel zu tun.



  • Also wenn man eine dll injiziert, dann wird sie im endefekt nur einmal
    geladen. Und zwar beim injizieren. man hat dann also keine möglichkeit
    die dll nach dem injizieren irgendwie aus der datei in die sie injiziert wurde
    weiter zu nutzen,oder? mal abgesehen davon, in der dll einen thread zu starten o.ä.



  • Doch hat man. Man kann im Einstiegspunkt während des ladens einen Thread oder Prozess erstellen. Ich frage mich eigentlich warum du dich dafür so sehr interessierst, denn das ist eine Bekannte Malware Technik, sprich wird desöfteren von Trojanern oder Userland Rootkits verwendet.

    BR

    evilissimo


Anmelden zum Antworten