> Tech > DumpStartups.pl

DumpStartups.pl

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

DumpStartups.pl vous aide à  gérer toutes les applications qui s'exécutent quand un utilisateur se connecte. Le script interroge les répertoires de disques et les sous-clés des registres Run et RunOnce, puis affiche les programmes qui sont configurés pour s'exécuter au démarrage et laisse l'utilisateur supprimer sélectivement les entrées. Le script

DumpStartups.pl

compte sur plusieurs modules et extensions (tous gratuits)
peut-être pas installés par défaut avec tous les packages
Win32 Perl. Le tableau 1 contient la liste de ces modules et
extensions, et aussi la manière de les obtenir. Vous pouvez
télécharger et installer ActivePerl d’ActiveState gratuitement
à  http://www.activestate.com.
Par manque de place, le listing 1 ne contient que des extraits.
Pour visualiser le script dans sa totalité, voir Web
Listing 1 (www.itpro.fr Club abonnés). Vous pouvez télécharger
le script, DumpStartups.pl, à  partir de www.itpro.fr Club
abonnés (téléchargez le fichier 41663.zip.)
Le code du renvoi A dans le listing 1 charge la bibliothèque
Shell32.dll et expose la fonction SHGetFolderPath()
qui découvre le chemin de démarrage pour l’utilisateur courant
et pour All Users. Ce code définit aussi certaines variables
que la fonction SHGetFolderPath() utilisera plus tard
dans le script.
Des versions plus récentes de Windows (c’est-à -dire,
Windows Server 2003, Windows XP, Windows 2000, et même
Windows NT 4.0 dans certains cas) ont une variable d’environnement
appelée pathtext qui contient une liste des extensions
pour les fichiers exécutables (à  l’exception de .pif et
.lnk). Le code du renvoi B détermine d’abord si la variable
d’environnement pathtext existe. Si elle n’existe pas, le script
crée une variable temporaire et utilise des valeurs par défaut
pour les extensions de fichiers .bat, .cmd, .com et .vbs. Le
code divise ensuite la liste des extensions en un tableau de
chaînes (une chaîne par extension de fichier) et rassemble
les chaînes dans une chaîne qui contient un caractère pipe
(|) entre les extensions. Plus loin dans le script, une sousroutine
utilise la chaîne résultante dans une expression régulière
pour déterminer si un fichier est du genre exécutable.
Le code du renvoi C obtient les éléments de démarrage
de la part du registre et du disque système. Ensuite, le code
du renvoi D supprime les emplacements de démarrage ou affiche
simplement la liste, selon les paramètres que l’utilisateur spécifie sur la ligne de commande
quand il exécute le script.
La sous-routine ProcessKey()
énumère chaque valeur dans
une sous-clé de registre spécifiée
et crée un hash anonyme qui
contient la valeur (et autres informations
associées), comme le
montre le code du renvoi E. Ce
hash est ensuite poussé dans le
tableau @ValueList. Ce tableau
de hashes anonymes est renvoyé
à  la fin de la sous-routine.
La sous-routine ProcessDir()
effectue pour un répertoire de
démarrage la même fonction
que ProcessKey()pour une sousclé
de registre : elle énumère
chaque fichier présent dans un
répertoire donné et tous ses
sous-répertoires. Le script transmet
les chemins à  l’utilisateur
courant et les répertoires de démarrage
All Users à  cette sousroutine.
Si la sous-routine trouve
un fichier de raccourci dans le
répertoire, le code du renvoi F
utilise l’extension Win32::Shortcut
pour découvrir les propriétés
du raccourci. Le script tente ensuite
de découvrir le chemin du
raccourci (aussi appelé cible du
raccourci) et extrait la description
du fichier cible. Quand la
description est disponible, le
script l’affiche. Sinon, le script affiche
le nom de fichier du raccourci.
Enfin, le script pousse un
hash anonyme vers un tableau
temporaire lexicalement déterminé
appelé @ValueList et renvoie
le tableau à  l’appelant.
Quand la sous-routine Process-
Ditr() trouve un fichier exécutable
(d’après l’extension du fichier),
elle tente d’extraire
l’information du fichier par la
même méthode qu’elle a utilisée
pour les fichiers de raccourci,
comme le montre le code du
renvoi G.
Quand l’utilisateur spécifie un élément
de démarrage à  supprimer, le
script appelle la sous-routine
Remove(). Cette sous-routine détermine
si l’élément de démarrage spécifié
est dans le registre ou est un fichier
sur un disque dur, comme le montre le
code du renvoi H. Quand l’entrée se
trouve dans le registre (comme une valeur
sous-clé), le script la supprime du
registre. Quand l’entrée est un fichier,
le script supprime le disque système.
Ces retraits et suppressions sont permanents.
Ni les fichiers de démarrage
supprimés ni les valeurs de registre
supprimées ne vont dans le Recycle
Bin.
La sous-routine GetSpecialDirectory()
renvoie le chemin vers un répertoire
spécifié (c’est-à -dire, spécial). Par
exemple, le répertoire My Documents
peut se trouver sur un lecteur local ou
peut pointer vers un répertoire partagé
sur un serveur distant. Cette sousroutine
découvrira exactement où se
trouve ce répertoire. La sous-routine
dans le code du renvoi I accepte une
valeur CSIDL. Les valeurs CSIDL identifient
les dossiers spéciaux Windows
(comme My Documents, Temporary
Internet Items, par exemple). Vous
pouvez trouver une liste des valeurs
CSIDL dans le fichier d’en-tête shlobj.h
du SDK (Software Development Kit)
Windows. La sous-routine GetSpecial-
Directory() appelle la fonction
SHGetFolderPath() que le script a
chargée auparavant. La fonction
GetSpecialDirectory() du script alloue
d’abord un buffer – la variable $pszPath
– pour contenir le chemin. Le chemin
que la fonction renvoie est en format
Unicode. Le script tente de nettoyer le
buffer en supprimant tous les caractères
NUL (\x00), convertissant essentiellement
la chaîne en format ANSI.
Cette pseudo-conversion d’Unicode
à  ANSI est vicieuse pour plusieurs
raisons. Si votre chemin de répertoire
contient des caractères Unicode, la
sous-routine brouille le chemin en
supprimant tous les caractères NUL,
faisant que la sous-routine traite la
chaîne comme de l’ANSI et provoquant
l’échec de tout traitement ultérieur
du chemin. Le script utilise ce
vice quand vous utilisez une version de
Perl, comme une version 5.8 ou 5.6, qui
ne peut pas traiter des chaînes de caractères
Unicode et UTF-8. Si vous devez
prendre en charge des caractères
Unicode, réécrivez cette sous-routine
pour qu’elle assure le nouveau support
Unicode de Perl.

Téléchargez cette ressource

Les mégatendances cybersécurité et cyber protection 2024

Les mégatendances cybersécurité et cyber protection 2024

L'évolution du paysage des menaces et les conséquences sur votre infrastructure, vos outils de contrôles de sécurité IT existants. EPP, XDR, EDR, IA, découvrez la synthèse des conseils et recommandations à appliquer dans votre organisation.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010