COMMENT DÉTECTER LES PROCESSUS CACHÉS (VIRUS, ROOTKITS...) + ÉNUMÉRATION AVANCÉE
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
21 avril 2009 à 20:58
mostafameknes
Messages postés8Date d'inscriptionjeudi 6 mars 2008StatutMembreDernière intervention25 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.
mostafameknes
Messages postés8Date d'inscriptionjeudi 6 mars 2008StatutMembreDernière intervention25 mai 2009 25 mai 2009 à 19:30
merci c'est bon travail continuer...
cs_mao02
Messages postés2Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention22 mai 2009 21 mai 2009 à 01:53
bon travaille ;)
e_NeX
Messages postés104Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention30 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és2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 23 avril 2009 à 16:40
On est en plein "the dark side of windows"
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és3Date d'inscriptionjeudi 27 mars 2008StatutMembreDernière intervention22 avril 2009 22 avril 2009 à 17:52
merci bien
un bon code.
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 22 avril 2009 à 16:13
Intéressant !
griffondorr
Messages postés427Date d'inscriptiondimanche 6 juillet 2008StatutMembreDernière intervention 4 mai 2009 22 avril 2009 à 11:01
belle sources ;) fallais y penser ;)
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 22 avril 2009 à 08:49
Bien, c'est pas très ".net friendly" mais bien quand même :p
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és129Date d'inscriptionmardi 20 juillet 2004StatutMembreDerniè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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 21 avril 2009 à 20:58
Le fichier *.sys de Brunews est safe, mais des fois détecté par les antivirus.
25 mai 2009 à 19:30
21 mai 2009 à 01:53
27 avril 2009 à 14:27
23 avril 2009 à 16:40
23 avril 2009 à 16:33
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à
@+
22 avril 2009 à 18:28
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à, @+
22 avril 2009 à 17:52
un bon code.
22 avril 2009 à 16:13
22 avril 2009 à 11:01
22 avril 2009 à 08:49
22 avril 2009 à 06:53
Par contre de mémoire, je crois que j'ai oublié un Marshal.FreeHGlobal à la fin de EnumerateHandles...
@+
22 avril 2009 à 00:24
21 avril 2009 à 20:58
Pour info : http://www.virustotal.com/fr/analisis/32cbf1ce905ae81c6149c8341c182381
@+