14 Comments

  • 1. wo`  |  juillet 23rd, 2007 at 17:39

    yeah nice maintenant que je suis sous win je vais trippoter le ringue levalz zeero.

    bonne continuation

  • 2. rootkited  |  juillet 24th, 2007 at 10:46

    superbe la demonstration de ton hook.
    j’ai testé certains code et marche nickel.

    y’a un truc que je comprend pas
    pourquoi dans ce macro :

    #define SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1)

    on a _Function+1 . pourquoi le +1 ?

    et pourqoi tous ces changements de types de PUCHAR puis PULONG.

    merci encore pour ces merveilleux codes.

  • 3. admin  |  juillet 24th, 2007 at 11:01

    Les fonctions Zw* qui sont exportées par le kernel sont de la forme suivante :

    kd> u ZwQuerySystemInformation
    nt!ZwQuerySystemInformation:
    804ddbc0 b8ad000000      mov     eax,0ADh ; 0xAD syscall nbr
    804ddbc5 8d542404        lea     edx,[esp+4]
    804ddbc9 9c              pushfd
    804ddbca 6a08            push    8
    804ddbcc e8d5120000      call    nt!KiSystemService (804deea6)
    804ddbd1 c21000          ret     10h
    

    lkd> db nt!zwquerysysteminformation
    804dd440 b8 ad 00 00 00

    Si tu regardes, le second byte de la fonction ZwQuerySystemInformation tu retrouves le syscall index. Ensuite en castant la fonction en tant que pointeur de type PUCHAR on est sur d’incrémenter le pointeur de 1 (et non de 4 si le pointeur était de type PULONG), ensuite on recast ce pointeur sur PULONG pour récuperer les 4 bytes (ad 00 00 00) et donc l’index de la fonction dans la KiServiceTable.

  • 4. rootkited  |  juillet 24th, 2007 at 17:32

    thanks.
    sans l’illustration avec le desassemblage j’aurais rien compris.

    Merci pour tout. j’ai compris youpi!

    R+

  • 5. newsoft  |  juillet 26th, 2007 at 12:40

    Pour éviter le context switch lors de la modification du CR0, tu dois pouvoir jouer avec RaiseIrql() non ?

  • 6. admin  |  juillet 26th, 2007 at 13:01

    Ouais en faisant peter l’IRQL à DISPATCH_LEVEL avec KeRaiseIrql ca marche car les pages qui contiennent la KiServiceTable sont dans la non-paged pool.

  • 7. Taron  |  août 1st, 2007 at 17:19

    fine

  • 8. Paton  |  septembre 22nd, 2007 at 01:03

    Question de néophyte : est-ce que ça marche sous vista ?

  • 9. admin  |  septembre 22nd, 2007 at 01:42

    wi

  • 10. SSDT Hooking | Nibbles mi&hellip  |  décembre 17th, 2008 at 18:34

    [...] ce qui ne connaisse pas du tout le sujet, je vous renvoi ici(KPCR) ou ici(Ivanlef0u). Santabug a également fais un code [...]

  • 11. [r00tkit] SSDT Hook pour &hellip  |  octobre 10th, 2010 at 17:52

    [...] compris l’intérêt de cette méthode mais si vous êtes curieux je vous renvoie à l’article d’Ivanlef0u à ce [...]

  • 12. Hel0ck  |  novembre 24th, 2010 at 00:03

    J’ai un petit soucis, quand je fait
    lkd> dd nt!KeServiceDescriptorTable l 4
    82d7f9c0 82c86700 00000000 00000191 82c86d48
    Sa marche, mais aprés quand je tape :
    lkd>db 82c86d48 1 5
    Sa m’affiche ^ Range error in ‘db 82c86d48 1 5′ :s

  • 13. admin  |  novembre 26th, 2010 at 21:16

    @Helock
    C’est pas ’1′ mais ‘l’ :p

  • 14. API hooking sous Windows &hellip  |  mai 30th, 2012 at 08:31

    [...] Hook SSDT : http://www.ivanlef0u.tuxfamily.org/?p=63 , [...]

Trackback this post