Wie hookt man beliebige Funktionen eines Processes bzw. global [Verständnisfrage] ???



  • Hab ich auch schon gelesen, da war des Thema das eine die memcpy() hooken wollte, da meinteste ja des geht nicht. Naja ich hab im moment noch nichts spezielles im kopf, sicher will ich nachher nen bissel rum probieren dazu uss ich aba erst mal wissen wie das so geht.
    Ich hab mir Xalons Tutorial da durch gelesen und frage mich ob man das evtl. noch anders lösen kann? hier im Forum gabs auch nen Thread, da wollte/ oder hat einer die Socket funktion gehookt ich hab im mom noch net soviel mit winsockets am hut aber es hatte mich trotzdem interessiert wie der seine selbst geschriebene Funktion an die originale gehängt hat? er hatte ja auch mit ner DLL gearbeitet. Hoffe ihr könnt mir da evtl. noch nen bissel weiter helfen.

    [EDIT]:
    Xalon meint es gibt noch ne andere methode um auf seine eigene Funktion umzulenken und zwar mit IAT, wie geht das?

    Gruß Tobi.


  • Mod

    Man kann es nicht. Es gibt genug Funktionen, an die man nicht heran kommt. Meine Aussage ging um "beliebig" && "alle".
    Gerade unter Vista ist es unmöglich in beliebige Prozesse einzugreifen!
    Da schiebt die Anwendungs Isolation schon einen Riegel davor...
    Was ist also falsch an dieser Aussage?

    Und um Root Kits geht es hier gerade nicht und selbst die können nicht alles.



  • Das beantwortet aba immer noch nicht meine frage.





  • Martin, bist du erstmal im ring0 stehen dir saemtliche Tueren offen, dann gibts keine Beschraenkungen mehr. Und auch Vistas Beschraenkung auf nur signierte Treiber wurde umgeangen. Als Admin kannst du auch unter Vista in anderen Prozessen wueten. Und ja Rootkits koennen alles, sogar On-the-fly das gesamte OS virtualisieren (->Bluepill).

    Und Tobi, gibt verschiedene Hooks, im Userland wir am haeufigsten:
    - detour (erstn 5 Bytes der Funktion mit einen Jump zu seiner eigenen Funktion ueberschreiben)
    - iat (ist glaub ich klar)
    - eat (die adressen der exportieren funktionen (zb kernel32) auf die eigene Funktion umbiegen)

    Exotischer ists da schon, das gesamte Module zu faken (http://www.tuts4you.com/download.php?view.1800)

    Den Link hier hatte ich ganz vergessen 😉 http://www.tuts4you.com/download.php?list.20



  • Martin Richter schrieb:

    Gerade unter Vista ist es unmöglich in beliebige Prozesse einzugreifen! Da schiebt die Anwendungs Isolation schon einen Riegel davor...
    Was ist also falsch an dieser Aussage?

    Im Prinzip nichts.

    Aber ein Hinweis auf z.B. "Multithreading" hätte schon gereicht.

    Inzwischend muß sogar der "billigste" Hook dermaßen viel Code mitschleppen, was zur Folge hat, daß er auch von relativ "Ungeübten" erkannt werden kann.

    Die drei hier beschriebenen Methoden sind Steinzeit.



  • @Merker: und was ist dann "Neuzeit" ?

    @dmesg: wo liegt der Unterschied zw. Detour und eat? Man lenkt doch in beiden Fällen auf seine Funktion um oder?
    Und nein, iat ist mir nicht klar, deswegen hatte ich doch oben schon mal geschrieben wie man des mit der iar macht.

    [EDIT]:
    Oh sry dmesg hab den link zu spät gesehen 🙂 danke dir erst mal.

    Gruß Tobi.



  • Ich hätte da mal noch eine Frage und zwar zu der Methode mit dem Umlenken, sprich ein Jmp zu meiner Funktion und zurück, es wird hier meistens nur immer von 5Bytes geredet, kann es nicht unter umständen auch mal 6Bytes sein?



  • Das ist ja eben das Problem... Du musst die ersten Bytes dekodieren (de-assemblieren) und schauen, wie viele Bytes Du kopieren musst und was dann die *richtige* "Einsprungsadresse" ist. Du benötigst aber min. 5 Bytes um den LongJump zu machen.



  • merker schrieb:

    Die drei hier beschriebenen Methoden sind Steinzeit.

    Jo, Hooks im Userland kannste eh vergessen. Am besten ists natuerlich gleich im Kernel zu hooken, unter Vista ist das aber etwas schwieriger. Aber zum Einstieg sind die Mehtoden doch nicht dumm.

    Tobi 6 Bytes brauchst du nur fuer ein FF 25 xx xx xx xx Jumps, E9 xx xx xx xx sind relative Jumps, bedeutet, dass du den Abstand von der Position wo der Jump steht, und der Position wo es hingehen hingehn soll, kennen musst. Naja und da alle Funkioen unter XP Sp2 ein 5 Byte Einleitung haben (MOV EDI,EDI ; PUSH EBP ; MOV EBP,ESP) haben, bietet sich ein relativer Jump eben an.



  • Naja, nicht alle Funktionen haben diese Signatur! Seit Vista wird teilweise mit FPO gearbeitet!


Anmelden zum Antworten