Hooken der KernelFunktion ZWCREATEFILE



  • Hallo,

    ich verzweifel hier gerade. Ich versuche die oben gennante Funktion zu hooken. Hier erstmal der Code:

    #define SYSTEMSERVICE(name) KeServiceDescriptorTable.ServiceTable[*(DWORD *) ((unsigned char *)name + 1)]
    
    ZWCREATEFILE        OrigZwCreateFile;
    extern ZWCREATEFILE OrigZwCreateFile;
    
    void Hooking(void) 
    {
    	_asm{cli}
    
    	OrigZwCreateFile = (ZWCREATEFILE)(SYSTEMSERVICE(ZwCreateFile));
    
    	(ZWCREATEFILE)(SYSTEMSERVICE(ZwCreateFile)) = FakeZwCreateFile;
    
    	_asm{sti}
    }
    [cpp]
    
    Und in dieser Zeile fällt er auf die Schnauze
    

    (ZWCREATEFILE)(SYSTEMSERVICE(ZwCreateFile)) = FakeZwCreateFile;
    [cpp]

    Fehlermeldung vom Compiler:

    error C2106: '=': Linker Operand muss ein L-Wert sein

    Ich raff das nicht. In der Zeile dadrüber konnte ich noch was aus "(ZWCREATEFILE)(SYSTEMSERVICE(ZwCreateFile))" holen und dadrunter darf ich nicht mehr rein schreiben?! Alle Beispiele die ich so im Internet gefunden habe sehen genauso bis so ähnlich aus. Jedenfalls wird in allen Beispielen der neue Pointer auf die Fake Funktion so implementiert.

    Verpackt ist das ganze in einem Treiber. Kompiliert wurde mit dem DDK und dem VS Compiler(hab zum Test mal beide ausprobiert).



  • Benutz MS Detours



  • Hackr schrieb:

    Benutz MS Detours

    Wie gut dass Detours fleißig Usermode APIs benutzt.



  • eben

    dafür sollte das "Kit" dann gut sein. werde es mal ausprobieren. Wäre allerdings trotzdem noch dankbar für jede antwort

    http://www.vitoplantamura.com/index.aspx?page=kdetours



  • Hat sich erledigt. Man sollte auf für C und nicht für C++ compilieren;-)



  • Hallo,

    scheint doch nicht so einfach zu sein. Code funktioniert unter XP. Code funktioniert jedoch nicht unter Windows 7. Es handelt sich dabei um eine 32bittige Version. PatchGuard ist also nicht im Spiel. Weiß jemand wieso ich trotzdem einen BSOD bekomme? Kennt jemand die Abläufe bei Win7 was das Schützen der SSDT angeht? Gibt es eine andere möglichkeit um eine Kernel Funktion zu hooken?
    Und weiß jemand, wie ich das ganze unter 64Bit umsetzen kann? Ich habe nicht die Absicht kriminelles Zeug damit anzufangen. Deswegen möchte ich auch keinen PatchGuard Bypass einsetzen. Ich möchte eine elegante Methode benutzen. Wie machen es die gängigen Virenscanner? Da muss es doch eine "Standard Vorgehensweise" geben oder?


Log in to reply