El hdiutil comando combinado con un poco de bash scripting puede lograr lo que usted está buscando. Usted necesitará un archivo de texto plano con cada una contraseña en una línea separada, terminando con una línea en blanco.
-
Copia y pega esto en un archivo de texto:
#!/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"
Guardarlo y hacerlo ejecutable por ejecutar chmod +x /path/to/scriptfile
en la Terminal.
- En la Terminal, ejecute
/path/to/scriptfile /path/to/image.dmg /path/to/passwords.txt
.
- Se ejecutará hasta que se monta correctamente la imagen de disco, y la salida de la contraseña que trabajó. En mis pruebas, se tomó 1.3-1.6 segundos por contraseña, así 3000 contraseñas puede tomar alrededor de una hora, dependiendo de su sistema (aunque podría ser antes, dependiendo donde está la contraseña en el archivo).
Que debe hacer el truco. Si tienes curiosidad de cómo y por qué funciona, sigue leyendo.
Explicación
Bucle while
while read line
do
[…]
done < "$2"
Esto se repite a lo largo de cada línea en el archivo de contraseña (que es alimentado a través de la < "$2"
parte) y ejecuta las cosas entre do
y done
cada vez que se repite. $2
es una variable especial en Bash que representa el segundo argumento que se pasa a la secuencia de comandos (es decir, si se ejecutó ./foo bar blah
, $2
serían blah
). Es entre comillas en caso de que existan espacios u otros caracteres en el nombre que podría causar problemas para Bash.
Montaje de la imagen
hdiutil attach -quiet -stdinpass "$1"`
Este es el comando para montar la imagen de disco (la que podemos obtener a partir de los argumentos de línea de comandos a través de la $1
variable, al igual que el archivo de contraseña). El -quiet
bandera significa no imprimir cualquier tipo de salida (sólo para mantener todo en orden), y -stdinpass
significa obtener la contraseña de la línea de comandos, no es el habitual de OS X de diálogo de contraseña.
echo -n "$line"
El echo
comando simplemente repite la entrada es dado, que en este caso es un individuo de la línea de la contraseña de un archivo, desde la $line
variable (que es citado de nuevo en el caso de las contraseñas que contienen caracteres especiales). El -n
bandera es la última pieza de este rompecabezas, que impide que el eco de la repetición de la nueva línea de caracteres, que sería incluido en la contraseña (y así evitar incluso la contraseña correcta de trabajo).
Utilizamos echo
con un "tubo" (|
) para enviar hdiutil
la contraseña. Una tubería envía la salida del comando anterior (echo
) para el comando después de la cañería (hdiutil
). De esta manera, en lugar de pedir la contraseña, hdiutil
simplemente toma el texto que nos leen desde el archivo.
Comprobar si la contraseña fue un éxito
if [ $? -eq 0 ]
Este comprueba si el comando anterior fue un éxito, por la comprobación de su código de salida. El $?
es otro de los especiales de la variable que almacena el código de salida de la operación anterior.
Si el código de salida es 0 (sin errores), entonces sabemos que la contraseña trabajado, y si la instrucción se ejecuta estas líneas:
echo "Password is $line"
break
Esto muestra un simple mensaje que indica al usuario lo que el éxito de la contraseña, entonces el break
comando sale de la while
de bucle y termina el programa. Hacemos esto porque el guión de lo contrario seguirían hasta que sea revisado cada contraseña en el archivo.
La combinación de todas estas piezas juntas te ofrece una manera conveniente de la automatización de un largo y doloroso de la tarea.