5 votos

¿Se puede utilizar AppleScript para forzar una unidad de FileVault en la que se ha perdido la contraseña?

Cometí un terrible error. Perdí totalmente mi papel con la contraseña secreta de mi disco duro externo encriptado GUID. Este disco externo contiene muchas fotos pero también algunos documentos de trabajo muy útiles. Así que sería muy interesante para mí conseguir a través de esta contraseña.

He calculado que con la parte conocida de mi contraseña tendré un máximo de 250 000 combinaciones posibles. Un programa como crunch podría hacer la lista de todas las combinaciones pero creo que no es la parte más difícil de esta misión.

Tengo que construir un pequeño programa para llenar el cuadro de diálogo y probar todas las 250 000 combinaciones. Ya he intentado hacer esto con Apple script pero no he encontrado el comando para rellenar la combinación en el cuadro de diálogo "Introduzca una contraseña para desbloquear el disco". Este cuadro de diálogo aparece cuando conectamos el disco al mac.

¿Alguien conoce bien el applescript para ayudarme a interactuar con este cuadro de diálogo del disco de desbloqueo? ¿O tal vez alguien tiene otra solución para desbloquearlo sin applescript?

Si alguien está interesado en ayudarme le estaré muy agradecido.

1 votos

Intentar descifrar un volumen encriptado a través de AppleScript es, en mi opinión, una forma absolutamente equivocada de hacerlo. Probablemente optaría por usar un bucle en un bash script con el diskutil utilidad de línea de comandos. Creo que sería más rápido en el procesamiento del número de combinaciones posibles y probablemente se ocuparía de los intentos fallidos de una manera mejor que a través de la GUI y AppleScript.

0 votos

No sé si ya has visto mi respuesta, sin embargo he actualizado el código y otras informaciones. Por lo tanto, es posible que desee ver la actualización código y la salida de la muestra.

11voto

user3439894 Puntos 5883

Como prueba de concepto, formateé un disco USB usando un mapa de partición GUID y lo formateé en Mac OS Extended (Journaled) llamándolo "Encrypted".

Luego, en el Finder, seleccioné el disco llamado "Encrypted" y hice control-clic seleccionando Encrypt "Encrypted"..., al tiempo que establecía su contraseña a la "contraseña".

Cuando terminó de encriptarse, utilizando el Terminal, comprobé el UUID Tendría que utilizar con el diskutil en mi script con el siguiente comando: diskutil cs list

Quería el UUID de la Logical Volume donde mostraba Volume Name: Encrypted y en este caso lo mostró como:

Logical Volume 1BFD0C99-1A67-4DC2-A0F4-199B2AE635B0

Esta es la salida de diskutil cs list para ver de lo que extraje el UUID .

$ diskutil cs list
CoreStorage logical volume groups (1 found)
|
+-- Logical Volume Group 3D8D6165-909C-4C55-8C0B-811AC4856773
    =========================================================
    Name:         Encrypted
    Status:       Online
    Size:         15270830080 B (15.3 GB)
    Free Space:   16777216 B (16.8 MB)
    |
    +-< Physical Volume 1E6C582B-5822-4986-9F41-164DE662FCE1
    |   ----------------------------------------------------
    |   Index:    0
    |   Disk:     disk2s2
    |   Status:   Online
    |   Size:     15270830080 B (15.3 GB)
    |
    +-> Logical Volume Family 6D7E4DCE-D7C5-4383-BF88-9E2DB9A52E14
        ----------------------------------------------------------
        Encryption Status:       Unlocked
        Encryption Type:         AES-XTS
        Conversion Status:       Complete
        Conversion Direction:    -none-
        Has Encrypted Extents:   Yes
        Fully Secure:            Yes
        Passphrase Required:     Yes
        |
        +-> Logical Volume 1BFD0C99-1A67-4DC2-A0F4-199B2AE635B0
            ---------------------------------------------------
            Disk:               disk3
            Status:             Online
            Size (Total):       14935281664 B (14.9 GB)
            Size (Converted):   -none-
            Revertible:         Yes (unlock and decryption required)
            LV Name:            Encrypted
            Volume Name:        Encrypted
            Content Hint:       Apple_HFS
$ 

Al contar ahora con el UUID Creé mi bash script en la Terminal:

touch unlock
open unlock

A continuación, añadí lo siguiente código :

#!/bin/bash

if [[ ! -z $1 ]]; then
    while read -r line; do
        printf "   Testing: $line \n"
        diskutil coreStorage unlockVolume 1BFD0C99-1A67-4DC2-A0F4-199B2AE635B0 -passphrase "$line" 2>/dev/null
            if [[ $? -eq 0 ]]; then
                printf "\n   The correct password is: $line \n\n"
                exit 0
            fi
    done < "$1"
else
    printf "\n   Missing Dictionary File!...\n\n   Syntax: ./unlock dictionary.txt\n\n"
    exit 1
fi

Nota: Sustituir el UUID arriba con el UUID del Volumen Lógico de su unidad encriptada.

Picture of Sublime Text showing the code.

He guardado y cerrado el script llamado "unlock" y lo hice ejecutable usando:

chmod u+x unlock

A continuación, he creado un archivo de diccionario, touch dictionary.txt y rellenó el archivo. Por supuesto, en tu caso, utilizarías como has mencionado el programa llamado crunch para crear su(s) archivo(s) de diccionario.

A continuación, expulsé y retiré el Thumb-drive USB de mi sistema.

A continuación, conecté la unidad de memoria USB y cuando apareció el cuadro de diálogo "Introduzca una contraseña para desbloquear el disco "Encriptado"", hice clic en el botón Cancelar.

Ahora estaba listo para desbloquearlo usando el bash script y dictionary.txt de la Terminal.

Para mostrar lo que pongo en el dictionary.txt archivo:

$ cat dictionary.txt
p
pa
pass
passw
password
passwo
passwor
$ 

Aquí está la salida de: ./unlock dictionary.txt

$ ./unlock dictionary.txt
   Testing: p 
Started CoreStorage operation
   Testing: pa 
Started CoreStorage operation
   Testing: pass 
Started CoreStorage operation
   Testing: passw 
Started CoreStorage operation
   Testing: password 
Started CoreStorage operation
Logical Volume successfully unlocked
Logical Volume successfully attached as disk3
Logical Volume successfully mounted as /Volumes/Encrypted
Core Storage disk: disk3
Finished CoreStorage operation

   The correct password is: password 

$

Como puede ver, probó lo que había en el archivo dictionary.txt hasta que encontró la contraseña correcta y cuando la contraseña correcta fue probada, desbloqueó y montó el disco, imprimió cuál era la contraseña correcta y salió del script .

La razón por la que se imprimen todas las contraseñas, es para que si necesita detener el script pueda entonces eliminar las contraseñas probadas del archivo dictionary.txt antes de comenzar de nuevo.

Nota: Es importante que antes de ejecutar el bash script primero ha enchufado la unidad y ha hecho clic en el botón Cancelar, luego ejecuta el script .

0 votos

Un nuevo usuario se pregunta si debe hacer una nueva pregunta o si su script de arriba puede manejar o ser adaptado para el almacenamiento del núcleo LV o si debe trabajar fuera de la caja. Mi conjetura es que usted ya maneja el almacenamiento del núcleo y necesitan un nuevo hilo o ayuda para obtener el GUID correcto para adaptarlo a su situación

0 votos

@user3439894 He probado este flujo de trabajo en un disco duro del Macbook Air desde otro ordenador mac conectado pensó la opción de arranque en modo disco de destino. Cuando ejecuto el script el terminal no imprime hace el; Started CoreStorage operation líneas. Sólo imprime las líneas Testing: password. ¿Sucede esto porque el disco duro que estoy intentando desbloquear no tiene la opción CoreStorage? Si es así, ¿el bash script seguirá funcionando para desbloquear un disco duro interno de Mac?

0 votos

@Buck Crockett, Como mi respuesta comienza, "Como una prueba de concepto" y fue en respuesta a un particular dar escenario de la OP, a saber... "disco duro externo GUID encriptado" con la palabra clave "externo", junto con la condición explícita indicada al final de mi respuesta, " Nota: Es importante que antes de ejecutar el bash script se haya enchufado primero la unidad y se haya pulsado el botón Cancelar, para luego ejecutar el script". En cuanto a poder adaptar esto a un disco duro interno que esté conectado como disco de destino, pues al no poder hacer pruebas, no puedo asegurarlo, lo siento.

1voto

tobltobs Puntos 111

En primer lugar, gracias a user3439894 por la impresionante respuesta proporcionada. Esto es absolutamente lo que necesitaba. Sin embargo, me encontré con un problema al completar estos pasos utilizando volúmenes APFS cifrados, pero encontré una solución.

Estoy usando volúmenes APFS encriptados con MacOS Big Sur. He encontrado un problema al ejecutar diskutil cs list ya que devuelve "No se han encontrado grupos de volúmenes lógicos de CoreStorage" en el Terminal, incluso cuando se monta un volumen APFS cifrado. Como resultado, no pude obtener el UUID necesario del volumen APFS encriptado al que quería apuntar.

Para resolver este problema, he ejecutado diskutil list en el Terminal que devolvió lo siguiente:

/dev/disk3 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +5.0 TB     disk3
                                 Physical Store disk2s2
   1:                APFS Volume MY_DRIVE                3.9 TB     disk3s1

Una vez localizado el identificador correcto para MY_DRIVE (en este caso: disk3s1), he sustituido diskutil coreStorage unlockVolume 1BFD0C99-1A67-4DC2-A0F4-199B2AE635B0 -passphrase "$line" 2>/dev/null en el código de user3439894 con lo siguiente:

diskutil apfs unlockVolume disk3s1 -passphrase "$line" 2>/dev/null

Tenga en cuenta que el identificador del disco puede cambiar con el tiempo, ya que los volúmenes se montan, se desmontan, etc. Es posible que tenga que ejecutar diskutil list periódicamente para asegurarse de que tiene el identificador correcto para el volumen al que quiere dirigirse.

Todo lo demás que ha proporcionado user3439894 me ha servido igual y ha funcionado perfectamente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X