9 Comments

  • 1. nats`  |  juillet 11th, 2007 at 09:52

    A force ca devient malsain…
    Ivanlef0u’s Blog ou « Une nuit de porno avec le noyau » ! ^^
    En tout cas merci pour le trace, pour ce genre de chose je crois que je vais me pencher du coté des script windbg ca simplifie la tâche pas mal :)

  • 2. Anonyme  |  juillet 12th, 2007 at 15:11

    Très sympas :) Merci !
    J’aimerais bien voir un articles sur les hooks dans la SSDT :)

  • 3. TheShade  |  juillet 13th, 2007 at 07:31

    Petite question :
    Tu dis à chaque fois que le noyau est chargé à partir de l’adresse 0x7fffffff mais pourtant si je trace un executable avec olly, les fonctions de la DLL kernel32.dll sont à une adresse inférieure à celle-ci ?
    Cea veut-il dire que la DLL est chargée par chaque executable ? Je croyais que l’avantage des DLL était qu’elles n’étaient chargées en mémoire qu’une fois….

  • 4. admin  |  juillet 13th, 2007 at 09:19

    Le noyau est les drivers sont effectivement chargés à un adresse supérieure à 0×7ffffff. Cependant kernel32 ne fait pas partir du noyau, elle fait partie du windows subsytem et fournit un ensemble de fonction permettant de jouer avec l’OS comme crée un process, un thread, etc…
    Kernel32 va utiliser ntdll pour effectuer l’appel system (le passage de userland à kerneland) pour intéragir avec le noyau (ntosknrl).
    Chaque process recoit un mapping de kernel32 et de ntll dans son userspace (l’espace 0×0 et 0x7ffffff est unique à chaque process !) et par ce mapping tout les process « voient » ces 2 dll. En fait il n’y q’une seul copie de ces dll dans la ram (voir la liste des Knowndlls) et grace au mapping on peut faire en sorte que chaque process est accès à ces dernières.

  • 5. TheShade  |  juillet 13th, 2007 at 10:20

    Est-ce que tu aurais un article qui explique cette histoire de mapping ?
    Si je veux effectuer un hook global d’une API en la modifiant directement en mémoire (api patching), est-ce que je dois la modifier dans chaque process ou est-ce qu’on peut la modifier directement en ram ?

  • 6. Anonyme  |  juillet 13th, 2007 at 13:02

    http://ivanlef0u.free.fr/?p=39

  • 7. TheShade  |  juillet 15th, 2007 at 17:51

    Ok donc si j’ai bien compris, si je veux modifier des api, je dois le faire dans chaue process (cf le dernier commentaire du lien ci-dessus)
    Par contre dans ce commentaire j’ai pas bien compris l’interet pour une application de modifier les fonctions qu’elle utilise dans les DLL. Quel est l’avantage par rapport a la creation de sa propre fonction ?

  • 8. admin  |  juillet 16th, 2007 at 11:42

    L’application n’a que très peu d’interet à modifier les fonctions de ses dll. Par contre si tu veux modifier le comportement d’une API d’un process, comme par exemple hooker NtQueryDirectoryFile pour cacher des fichiers, il te faut y injecter un code qui va modifier le comportement de l’API visé.

  • 9. Geo  |  novembre 10th, 2009 at 14:25

    Yo, Ivan.
    Je t’avais sonné sur IRC avant de tomber sur cet article. Ma foi, j’ai pigé les grandes lignes, sauf qu’il faille utiliser kernel debuger, tool que je n’ai jamais utilisé.

    Sinon, rien de bien grave, mais les \r\n deviennent des « rn » et je voulais savoir pourquoi tu as mis sizeof() au lieu de strlen() dans ta fonction send pour soumettre la taille de ton buffer.

    Rassure-moi, ça ne gêne en rien l’étude ?

    J’espère que, malgré la date de l’article, tu seras toujours disposé à me répondre.

    Geo

Trackback this post