COMMENT DÉTECTER LES PROCESSUS CACHÉS (VIRUS, ROOTKITS...) + ÉNUMÉRATION AVANCÉE

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 21 avril 2009 à 20:58
mostafameknes Messages postés 8 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 25 mai 2009 - 25 mai 2009 à 19:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49893-comment-detecter-les-processus-caches-virus-rootkits-enumeration-avancee-des-processus

mostafameknes Messages postés 8 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 25 mai 2009
25 mai 2009 à 19:30
merci c'est bon travail continuer...
cs_mao02 Messages postés 2 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 22 mai 2009
21 mai 2009 à 01:53
bon travaille ;)
e_NeX Messages postés 104 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 30 novembre 2009
27 avril 2009 à 14:27
faites un petit tour du coté du prefetch de windows. vous aurez surement la réponse :)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
23 avril 2009 à 16:40
On est en plein "the dark side of windows"
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
23 avril 2009 à 16:33
J'ai trouvé la réponse aux 2 questions :

En fait, lorsqu'un processus a été tué, il reste bizarrement ouvrable via OpenProcess. Du coup pour les questions :

1) -> quand le processus a été lancé puis tué plusieurs fois, tous les précédents lancements sont considérés comme des processus cachés par la méthode "brute force". Le process n'existe en fait bien qu'une seule fois, sont détectées cachées uniquement les instances qui ont été tuées.
2) -> XP cache rien, c'est juste des processus qui ont été tués.


La question est donc : pourquoi OpenProcess marche avec les processus tués ? Et pourquoi certaines infos (le path par exemple) restent-elles disponibles pour les processus après leur mort ???

Quoi qu'il en soit, il doit être possible de différencier les processus tués des processus cachés via GetExitCodeProcess.

Pour compléter sur le sujet : le pid du processus tué restera pointé sur un processus tué et sera ouvrable (pour renvoyer les infos sur le processus tué) jusqu'à ce que le pid soit réutilisé par un nouveau processus. Il est également possible d'empêcher un processus de prendre l'ancien PID d'un autre en gardant un handle ouvert sur ce PID.

Voilà
@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
22 avril 2009 à 18:28
Merci pour les commentaires :-)

J'avoue que cà fait pas trop VB.Net, mais bon, comme on dispose de la classe Marshal, autant l'utiliser ;-) Et pi le framework est complètement incapable de faire tout çà ^^


Sinon j'ai oublié de préciser 2 trucs :

- y a du code vraiment superflu là dedans (genre l'héritage avec generalInfos, ou même carrément processInfos, toutes les déclarations dans API.vb), j'ai pas viré tout çà parce que j'avais la flemme, j'ai tout extrait de mon autre code, YAPM :-p
Ce qui est intéressant est donc dans cProcess.vb.

- j'ai laissé en commentaires dans getVisibleProcesses du code pour pouvoir récupérer la liste des threads en même temps que la liste des processus, via ZwQuerySystemInformation.

D'ailleurs au passage, je précise que ZwQuerySystemInformation est une fonction absolument géniale, mais malheureusement non documentée ! A titre d'information, la récupération des processus dans getVisibleProcesses permet :
- de récupérer tous les processus sans ouvrir un seul Handle
- de récupérer toutes les infos sur la mémoire, les I/O, les temps CPU...etc sans ouvrir un seul handle
- de récupérer la liste des threads et toutes les infos dessus (temps CPU...) en même temps sans ouvrir un seul handle
Et tout çà en un temps vraiment record (nécessite bcp moins de CPU que taskmgr par exemple). Bref, c'est vraiment ce qu'il y a à privilégier comme méthode de listing des processus, pour peu qu'on ait besoin de quelques infos, genre la mémoire ou autre.


Sinon si vous avez des infos sur :
- pourquoi certains processus sont présents sous plusieurs PID différents ??
- pourquoi Windows (XP) cache des fois ses processus de taskmgr ??
n'hésitez pas je suis curieux !

Voilà, @+
aitnamane Messages postés 3 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 22 avril 2009
22 avril 2009 à 17:52
merci bien
un bon code.
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
22 avril 2009 à 16:13
Intéressant !
griffondorr Messages postés 427 Date d'inscription dimanche 6 juillet 2008 Statut Membre Dernière intervention 4 mai 2009
22 avril 2009 à 11:01
belle sources ;) fallais y penser ;)
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
22 avril 2009 à 08:49
Bien, c'est pas très ".net friendly" mais bien quand même :p
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
22 avril 2009 à 06:53
merci :-)

Par contre de mémoire, je crois que j'ai oublié un Marshal.FreeHGlobal à la fin de EnumerateHandles...

@+
BadoqueAlex Messages postés 129 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 6 juin 2009
22 avril 2009 à 00:24
Très joli travail de recherche et d'application. 9/10
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
21 avril 2009 à 20:58
Le fichier *.sys de Brunews est safe, mais des fois détecté par les antivirus.

Pour info : http://www.virustotal.com/fr/analisis/32cbf1ce905ae81c6149c8341c182381

@+
Rejoignez-nous