NTDLL-Funktionen Hooken
-
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.