NTDLL-Funktionen Hooken
-
Hallo,
nachdem ich hier die ganzen Threads gelesen hab, hab ich auch ma n bisschen mit IAT Hooks rumexperimentiert.
Wenn ich Funktionen aus kernel32.dll oder user32.dll hooke klappt das auch alles super, aber sobald ich probiere Funktionen aus ntdll.dll zu hocken, klappt das net mehr. Und zwar wird offenbar keine Funktion mit dem Namen, den ich suche gefunden. Ich hab das bisher nur mit NtQueryDirectoryFile probiert, aber ich denke daran liegts nicht.
-
Du kannst aus dem Usermode keine Funktionen im Kernel hooken!
-
Hm... Aber FindNextFile ist doch ne kernel Funktion, oder nicht? Die lässt sich hooken. Wie kommt denn Ansonsten mein Programm dahin, dass es die hooken kann?
-
ntdll.dll enthält die "native" Schnittstelle vom User-Mode zum Kernel-Mode. kernel32.dll enthält *nur* User-Mode Schnittstellen; der Name ist etwas irreführend.
Beide DLLs kann man im User-Mode hooken.
-
Hm aso. Gibt es ne Möglichkeit an die Kernel Model Funktionen zu kommen?
-
Kann man ne Dll Injection in einen Ring 0 Prozess machen und von da die Kernel Funktionen hooken?
-
im ring 0 kannste nur ueber treiber wueten... oder du greifst direkt auf den phymem zu..
-
Auf den physikalischen Speicher zugreifen geht wahrscheinlich net mit Read- & Write ProcessMemory, oder? Was für Funktionen nimmt man da?
-
Hier hast mal nen Tutorial zur Treiber programmierung, da wird dir auch gleich noch nen bissel sachliches verklickert. Ich bin zwar auch am hooken von en paar API Funktionen, aber von der Treiberprogrammierung lass ich, denn doch lieber die Finger ( vor erst
). Kannst es dir ja mal durchlesen.Gruß Tobi.
-
Wo is es denn?^^
Naja will momentan irgendwie Dateien Verstecken und hatte eg vor FindNextFile zu hooken. Aber sobald ich das bei Explorer.exe mache kriegt der n Fehler. Gibts ne Möglichkeit das zu umgehen?
-
Was fürn fehler?
-
Es sind zwei verschiedene:
Wenn ich zuerst FindFirstFileA oder -W hooke passier nichts, aber der Hook wird auch nicht ausgeführt.
Wenn ich FindFirstFileW und anschließend FindNextFileW hooke erscheint eine Meldung, dass das Programm aus Sicherheitsgründen geschlossen werde. Bestätgit man dies erscheint "explorer.exe hat ein Problem festgestellt und muss beendet werden."
Hooke ich FindNextFileW direkt erscheint nur Folgendes "explorer.exe hat ein Problem festgestellt und muss beendet werden."
-
Verwendest du Detours?
-
nope.

-
Zähl mal nach, wieviele Bytes bei FindNextFileW gesichert werden müssen, damit nichts auseinandergerissen wird (!=5).
-
Ich mach das nicht mit Bytes sichern. Ich ändere die Addresse in der IAT auf meine Funktion, führe die aus und von da führe ich die alte Funktion aus. Das klappt auhc alles wunderbar nur halt nicht bei explorer.exe.
-
Hm also ich kann dazu nichts sagen, außer das FindFirstFileA den den Anfang hat:
7C80F0E1 8BFF MOV EDI,EDI 7C80F0E3 55 PUSH EBP 7C80F0E4 8BEC MOV EBP,ESPD.h. also das wenn du die 5Bytes sicherst und schreibst nichts aus einanderreist,muss also an was anderem liegen.
-
Sicherst Du vor Ausführung Deiner Funktion auch die Umgebung (CPU-Register) ? Und stellst sie am Ende wieder her ?
-
@T0bi Wie gesagt: Ich sichere die Bytes gar nicht, weil ich sie auch nicht überschreibe.
@merker Ne ich sicher sie ehrlich gesagt nicht. Ich kenn aber auch die Funktion dafür nicht... Man macht das doch nicht in Assembler, oder? Dafür gibts doch bestimmt ne Funktion, oder?
-
schreib mal in deiner funktion, sprich deine Hook Funktion, so was hier in der Art:
void HookFunc( ... ) { _asm { // some asm crap // z.B Register aus lesen ala mov deineGlobaleVar, EDX // Bevor du funktion ausführst ala MessageBox oder so // Flags und Register sichern PUSHAD // sichert alle Register PUSHFD // sichert alle Flags } // Mache zu was du lust hast MessageBox( ... ) SendMessage( ... ) usw. // dann stelle alle Falgs und register wieder her _asm { POPAD POPFD } }Das hatte jedenfals bei mir maldas Problem gelöst, denn wenn du code ausführst in deiner Funktion, kann es sein das du die Register und Falgs aenderst.
FOLGE: es könnte ja sein das der Register EDI oder ein anderer die Rücksprung Adresse beinhalt(ete). Darum IMER alles sichern.Probiers am bestern mal aus.
-
Zum Hooken schau Dir Detour an.
Und da das Hooken zur Zeit überhand nimmt und sicht *niemand* was sagen lässt, geschweige denn sich *funktionierende* Beispiele anschaut, mach ich hier zu.