El hdiutil combinée avec un peu de script bash peut accomplir ce que vous recherchez. Vous aurez besoin d'un fichier texte brut avec chaque mot de passe sur une ligne séparée, se terminant par une ligne blanche .
-
Copiez et collez ceci dans un fichier texte :
#!/bin/bash
while read line
do
echo -n "$line" | hdiutil attach -quiet -stdinpass "$1"
if [ $? -eq 0 ]; then
echo "Password is $line"
break
fi
done < "$2"
-
Sauvegardez-le et rendez-le exécutable en exécutant chmod +x /path/to/scriptfile
dans le terminal.
-
Dans le Terminal, exécutez /path/to/scriptfile /path/to/image.dmg /path/to/passwords.txt
.
- Il s'exécutera jusqu'à ce qu'il réussisse à monter l'image disque, et affichera le mot de passe qui a fonctionné. Dans mes tests, cela a pris 1.3-1.6 secondes par mot de passe, donc 3000 mots de passe peuvent prendre environ une heure, selon votre système (bien que cela puisse être plus tôt selon l'endroit où se trouve le mot de passe dans le fichier).
Cela devrait faire l'affaire. Si vous êtes curieux de savoir comment et pourquoi cela fonctionne, lisez la suite.
Explication
Boucle While
while read line
do
[…]
done < "$2"
Cela boucle sur chaque ligne du fichier de mots de passe (qui est alimenté par la commande < "$2"
) et exécute les choses entre do
y done
à chaque fois qu'il tourne en boucle. $2
est une variable spéciale dans Bash qui représente le deuxième argument passé au script (c'est-à-dire que si vous exécutez ./foo bar blah
, $2
serait blah
). Il est placé entre guillemets au cas où le nom contiendrait des espaces ou d'autres caractères susceptibles de poser des problèmes à Bash.
Montage de l'image
hdiutil attach -quiet -stdinpass "$1"`
Il s'agit de la commande permettant de monter l'image disque (que nous obtenons à partir des arguments de la ligne de commande via l'attribut $1
comme le fichier des mots de passe). Le site -quiet
signifie ne pas imprimer de sortie (juste pour garder les choses en ordre), et -stdinpass
signifie obtenir le mot de passe à partir de la ligne de commande et non la boîte de dialogue habituelle pour les mots de passe sous OS X.
echo -n "$line"
El echo
répète simplement l'entrée qui lui est donnée, qui dans ce cas est une ligne individuelle du fichier de mots de passe, de la commande $line
(qui est à nouveau citée au cas où les mots de passe contiennent des caractères spéciaux). Le site -n
Le drapeau est la pièce finale de ce puzzle, il empêche l'écho de répéter la nouvelle ligne qui serait inclus dans le mot de passe (ce qui empêcherait même le bon mot de passe de fonctionner).
Nous utilisons echo
avec un "tuyau" ( |
) pour envoyer hdiutil
le mot de passe. Un pipe envoie la sortie de la commande précédente ( echo
) à la commande après le tuyau ( hdiutil
). De cette façon, plutôt que de nous demander le mot de passe, hdiutil
prend simplement le texte que nous avons lu dans le fichier.
Vérifier si le mot de passe a réussi
if [ $? -eq 0 ]
Cela vérifie si la commande précédente a réussi, en vérifiant son code de sortie . Le site $?
est une autre variable spéciale qui stocke le code de sortie de l'opération précédente.
Si le code de sortie est 0 (aucune erreur), alors nous savons que le mot de passe a fonctionné, et l'instruction if exécute ces lignes :
echo "Password is $line"
break
Cela affiche un simple message indiquant à l'utilisateur quel est le mot de passe réussi, puis l'option break
quitte le while
et termine le programme. Nous faisons cela parce que le script continuerait autrement jusqu'à ce qu'il ait vérifié chaque mot de passe dans le fichier.
En combinant tous ces éléments, vous disposez d'un moyen pratique d'automatiser une tâche autrement longue et pénible.