Probar una lista de contraseñas en Sparse Image

2

Tengo un archivo de imagen disperso con algunos datos importantes que me gustaría recuperar. El único problema es que he olvidado la contraseña.

Tengo una buena idea de las partes de la contraseña y logré generar un archivo de 3000 líneas con una lista de posibles contraseñas.

Me gustaría saber cómo puedo probar esto con mi imagen. Hace unos años, había encontrado una aplicación de código abierto muy útil con una interfaz gráfica de usuario simple que hacía esto, pero parece que no puedo encontrarla. Tal vez alguien sepa de qué aplicación estoy hablando. De lo contrario, si alguien conoce otro método para hacer esto (quizás con automator), sería genial.

Gracias

    
pregunta Sebastien 13.10.2012 - 11:06

2 respuestas

7

El comando hdiutil combinado con un un poco de scripting de bash puede lograr lo que estás buscando. Necesitará un archivo de texto simple con cada contraseña en una línea separada, que termina con una línea en blanco .

  1. 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"
    
  2. Guárdalo y hazlo ejecutable ejecutando chmod +x /path/to/scriptfile en la Terminal.

  3. En la Terminal, ejecuta /path/to/scriptfile /path/to/image.dmg /path/to/passwords.txt .
    • Se ejecutará hasta que monte con éxito la imagen del disco, y generará la contraseña que funcionó. En mis pruebas, tomó 1.3-1.6 segundos por contraseña, por lo que 3000 contraseñas pueden tardar alrededor de una hora, dependiendo de su sistema (aunque podría ser más rápido dependiendo de dónde esté la contraseña en el archivo).

Eso debería hacer el truco. Si tienes curiosidad por saber cómo y por qué funciona, sigue leyendo.

Explicación

Mientras bucle

    while read line
    do
    […]
    done < "$2"

Esto recorre cada línea en el archivo de contraseña (que se alimenta a través de la parte < "$2" ) y ejecuta el material entre do y done cada vez que se repite. $2 es una variable especial en Bash que representa el segundo argumento pasado al script (es decir, si ejecuta ./foo bar blah , $2 sería blah ). Está entre comillas en caso de que haya espacios u otros caracteres en el nombre que puedan causar problemas para Bash.

Montando la imagen

hdiutil attach -quiet -stdinpass "$1"'

Este es el comando para montar realmente la imagen de disco (que obtenemos de los argumentos de la línea de comandos a través de la variable $1 , al igual que el archivo de contraseña). El indicador -quiet significa no imprimir ninguna salida (solo para mantener las cosas ordenadas), y -stdinpass significa obtener la contraseña de la línea de comando , no el diálogo de contraseña habitual de OS X.

echo -n "$line"

El comando echo simplemente repite la entrada que se le da, que en este caso es una línea individual del archivo de contraseñas, de la variable $line (que se cita nuevamente en caso de que las contraseñas contengan caracteres especiales). La bandera -n es la pieza final de este rompecabezas, evita que el eco repita el carácter nueva línea , que se incluiría en la contraseña (y así evitar que funcione incluso la contraseña correcta).

Usamos echo con un "pipe" ( | ) para enviar a hdiutil la contraseña. Una tubería envía la salida del comando anterior ( echo ) al comando después de la tubería ( hdiutil ). De esta manera, en lugar de pedirnos la contraseña, hdiutil simplemente toma el texto que leemos del archivo.

Comprobando si la contraseña fue exitosa

if [ $? -eq 0 ]

Esto comprueba si el comando anterior fue exitoso, al verificar su código de salida . El $? es otra variable especial 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 funcionó y que la instrucción if ejecuta estas líneas:

    echo "Password is $line"
    break

Esto muestra un mensaje simple que indica al usuario cuál es la contraseña correcta, luego el comando break sale del bucle while y finaliza el programa. Hacemos esto porque la secuencia de comandos continuaría hasta que se compruebe cada contraseña en el archivo.

La combinación de todas estas piezas juntas le brinda una manera conveniente de automatizar una tarea larga y dolorosa.

    
respondido por el robmathers 13.10.2012 - 20:11
0

Después de probar docenas de búsquedas en Google, encontré la aplicación que había usado hace muchos años.

crowbarDMG - > enlace

Aquí está el script de Python que utilicé para generar la lista de contraseñas:

import itertools
permutations = list(itertools.permutations(['part', 'PART', 'other', 'OTHER', '9', '@', '4', '%', '9', '#'], 4))
for (i, permutation) in enumerate(permutations):
    print ''.join(permutation)

Luego usé crowbarDMG para descubrir la contraseña.

    
respondido por el Sebastien 14.10.2012 - 11:22

Lea otras preguntas en las etiquetas