Identifier une DLL manquante

Juste une note rapide pour présenter un outil que j’ai découvert hier soir.
En lançant un programme Python qui référençait des librairies Windows (DLL), je suis tombé sur une erreur m’indiquant qu’il y avait eu un problème de chargement. La trace indiquait bien la DLL dont le chargement échouait, mais pas ce qui manquait.

J’ai alors découvert Dependency Walker.
Ce programme vous permet de sélectionner une DLL sur votre disque (celle dont le chargement échouait pour ma part), et il va vous donner toutes les autres librairies dont elle dépend. Je me suis alors rendu compte qu’il me manquait une DLL (msvcr71.dll en l’occurrence), que j’ai téléchargée et copiée à l’endroit adéquat.

Publicités

Explorer un Registre Windows depuis Linux

J’ai récemment eu une panne sur un disque dur, celui qui contenait ma partition système pour Windows. Par miracle, ce n’est pas une panne mécanique, et la partition reste lisible depuis un autre PC (via un boitier USB). Il est probable que seul le secteur d’amorçage ait été touché. Toujours est-il que j’ai réinstallé mon Windows sur un nouveau disque (SSD de surcroît, vive la modernité !).

Après avoir réinstallé tous mes logiciels, je me suis rendu compte que j’avais oublié de noter une information cruciale pour me connecter à mes serveurs dédiés : le numéro des ports SSH ! Car bien entendu, je n’utilise pas le port par défaut (parmi d’autres bonnes pratiques de l’administration système). J’avais deux options. Soit essayer régulièrement un nouveau port jusqu’à trouver le bon (il n’y a que quelques dizaines de milliers de choix possibles – en sachant en plus que j’ai fail_2_ban et autres joyeusetés d’installées sur ma machine, je ne peux pas scanner les ports trop violemment). Soit prier pour retrouver l’information dans les fichiers de configuration de PuTTY, mon client SSH.

Il se trouve que PuTTY ne stocke rien dans des fichiers de configuration, mais tout dans le registre de Windows. Plus exactement, dans le registre HKEY_CURRENT_USER/Software/SimonTatham. Sous Windows, vous n’avez pas accès à la partition système (question de permissions). Mais cette contrainte n’existe pas sous Linux. J’ai donc connecté le disque à mon PC, qui tourne sous Ubuntu, et j’ai installé chntpw.

sudo apt-get install -y chntpw

Ensuite, il a fallu que je me rende dans le répertoire qui contient le bon registre.
Certains registres sont contenus dans le dossier Windows (cd /chemin-de-la-partition/WINDOWS/System32/config). Mais dans mon cas, c’est dans le dossier utilisateur qu’il faut regarder (cd /chemin-de-la-partition/Users/Vincent). Le tableau ci-dessous récapitule un peu tout ça.

Nom du registre Fichier à éditer Emplacement
HKEY_CURRENT_USER NTUSER.dat C:/Users/
HKEY_LOCAL_MACHINE\SAM   SAM C:/WINDOWS/system32/config
HKEY_LOCAL_MACHINE\SECURITY   SECURITY C:/WINDOWS/system32/config
HKEY_LOCAL_MACHINE\SOFTWARE   SOFTWARE C:/WINDOWS/system32/config
HKEY_LOCAL_MACHINE\SYSTEM   SYSTEM C:/WINDOWS/system32/config
HKEY_USERS\DEFAULT DEFAULT C:/WINDOWS/system32/config

Le reste, je vous le mets en shell.
Mais en gros, vous lancez chntpw en mode éditeur de registre, puis vous naviguez jusqu’à la clé qui vous intéresse. A noter que je cherchais une seule information, je n’ai pas testé d’export d’une clé.

sudo chntpw -e NTUSER.data

# Là, on entre dans un client interactif pour naviguer dans le registre.
# Vous pouvez taper ?, suivi de la touche Entrée, pour avoir de l'aide.
cd Software
cd SimonTatham
cd PuTTY
cd Sessions
ls

Et là, toutes les clés disponibles à ce niveau sont affichées.
La valeur qui m’intéressait était portNumber. Après, un petit Ctrl + C ou la lettre ‘q’ pour fermer, et tout est bon. On peut déconnecter proprement le disque.

Dans mon cas, ce n’était que de la récupération d’information, mais ce petit programme peut aussi être utilisé pour réinitialiser des mots de passe ou changer des valeurs dans la base de registre. En complément, je vous recommande cet article, qui m’a aidé à identifier le bon registre.