13 Comments

  • 1. Taron  |  septembre 3rd, 2008 at 21:01

    Sympathique, et on peut espérer quoi d’un point de vue plus « sombre »? parce que j’avais déjà vu le poste sur sysinternals qui lister tous les process.. c’est possible de les planque ?

  • 2. admin  |  septembre 3rd, 2008 at 21:13

    Waip on peut.

  • 3. newsoft  |  septembre 6th, 2008 at 10:25

    Tu as oublié de préciser: « (…), entouré de psychopathes, qui mangent des fruits de mer périmés, chient à même le sol, voire écoutent du rap ».

    En tout cas je suis ravi de voir que tout cela ne t’a pas dégouté de l’informatique :)

  • 4. shikamaru  |  septembre 6th, 2008 at 23:29

    enfin un post, aller un peut de serieux c’est vraiment trop cool ton blog continue

  • 5. Orkblutt  |  septembre 12th, 2008 at 11:20

    Très interessant!

    Taron, peux tu nous donner le lien du post sur sysinternals ?
    Merci

  • 6. Orkblutt  |  septembre 12th, 2008 at 11:25

    ooops j’avais mal cherché…
    http://forum.sysinternals.com/forum_posts.asp?TID=15457&KW

  • 7. Elo  |  septembre 12th, 2008 at 13:10

    Je viens de lire l’article sur sysinternals,et je me pose une question. Toute la technique repose sur la récupération de CsrHashThread, mais je ne suis pas sûr de la manière dont il s’y prend. Il dit utiliser une ligne de ce type « lea edx, CsrHashThread.anonymous_0[eax*8] » dans une fonction exportée… Mais comment récupère-t-il edx ? Parce que ce registre est modifié avant la sortie de la fonction… Il faut débugger la fonction ? Cela nécessite des droits particuliers non ?

  • 8. admin  |  septembre 12th, 2008 at 15:49

    Il sait juste que la fonction exportée CsrLockThreadByClientId contient à l’offet 0xXX depuis son début un pointeur sur la variable globale CsrThreadHashTable, il la récupère comme ça. Après évidemment pour obtenir ces infos il faut s’inject dans le process csrss.exe et donc avec le SeDebugPrivilege.

  • 9. Elo  |  septembre 12th, 2008 at 16:01

    J’ai commencé à implémenter le tout en user land, et je me pose plusieurs questions :
    - Lorsqu’on déclare une variable dans une DLL, celle-ci n’est pas globale ? Est-ce qu’on ne pourrait pas tout simplement charger la DLL csrss.dll en mémoire dans le processus courant afin de retrouver CsrRootProcess ? Ou serait-ce un CsrRootProcess différent de celui maintenu par csrss.exe ?
    - Dans son executable, l’auteur du post sur sysinternals appelle les fonctions ZwXxX (par exemple ZwOpenProcess ou ZwAllocateVirtualMemory) pour dialoguer avec csrss.exe . Quel avantage par rapport aux fonctions « classiques », comme OpenProcess ou VirtualAlloc ?
    - Enfin, comment faire cela sans le SeDebugPrivilege ? Pour moi, ce token est nécessaire rien que pour OpenProcess… Pourtant, l’executable de sysinternals fonctionne même sans ce token, seul un message d’avertissement apparaît disant que ce n’est pas grave… pourquoi chercher à l’obtenir si ce n’est pas utile ?

    Merci d’avance !

  • 10. 0vercl0k  |  septembre 14th, 2008 at 12:31

    Salut à toi « Shadow »,

    Alors tout d’abord, tu peux bien sur utiliser un LoadLibrary afin de charger la dll dans ton implémentation ; tu pourras la scanner à la recherche du « mov esi, _CsrRootProcess ».
    M’enfin il faut tout de même savoir que cette valeur est un LIST_ENTRY**.
    Une fois récupéré cette valeur il te suffit de lire la mémoire du processus afin de récupérer le simple pointeur sur la LIST_ENTRY (celui-ci pointerait dans le tas de csrss.exe).

    Ensuite, concernant les appels des fonctions ZwXXX, il n’y a aucun « avantage » dans ce cas-ci à les utiliser en userland ; les apis tels que OpenProcess, WriteProcessMemory te faciliteront bien plus la tâche que d’appeler directement les apis natifs.

    Concernant le changement de token, il est obligatoire pour aller trafiqué le subsystem csrss.

    En espérant avoir répondu à tes intérrogations, bonne soirée à toi.
    Cordialement 0vercl0k.

  • 11. xxx  |  septembre 19th, 2008 at 08:46

    how can i download the rar?

  • 12. Yo  |  octobre 31st, 2010 at 20:28

    Sérieusement ton blog c’est de la bombe pour le peu que j’ai vu. J’ai hâte de voir la suite. Bye

  • 13.  |  mai 15th, 2012 at 16:31

    [...] as well. This breakpoint won't work if someone writes a version of runpe that talks directly to the csrss subsystem to launch a process, but let's just hope that never happens. After breaking on [...]

Trackback this post