¿Cómo cifra su dispositivo con CyanogenMod 12.1?

La configuración de CyanogenMod 12 y 12.1 'Cifrar teléfono' está rota , y lo ha estado durante bastante tiempo. ¿Hay alguna forma de cifrar el teléfono de alguna otra manera? ¿Se puede cargar CM en un teléfono con un directorio /datos encriptado? ¿Existen otras formas de mantener sus datos sanos y salvos? El dispositivo en el que estoy trabajando es un Verizon LG G3.

Respuestas (7)

Hay comandos de bajo (más) nivel que se pueden usar en un shell para cifrar su partición de datos de usuario. Descargo de responsabilidad/Advertencia: las siguientes instrucciones borrarán sus datos , asegúrese de hacer una copia de seguridad si es necesario.

Siguiendo estos pasos, debería poder borrar su partición de datos y cifrarla después (similar a un restablecimiento de fábrica):

  1. Inicie su teléfono normalmente (o la recuperación ya no funciona o me encontré con un problema diferente).
  2. Asegúrese de que el modo de depuración USB (adb) y el acceso raíz para ADB estén habilitados.
  3. Ingrese un shell raíz con adb rootseguido de adb shell.
  4. Opcional: ver registros invocando adb logcaten otro shell.
  5. Ingrese este comando, escriba su contraseña y presione Entrar. Esto realmente establecerá su contraseña. Este comando lee una línea de entrada ( head -1), elimina la nueva línea final de Enter ( tr -d '\n') y la convierte en una representación hexadecimal ( hexdump ...). Si parece aterrador o si no está seguro de lo que hace este comando, consulte a continuación.

    vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
    
  6. Si todo va bien, su dispositivo establecerá claves y se reiniciará para completar el cifrado.

El vdccomando anterior ("Volume Daemon Client") comunicado con vold(Volume Daemon) tiene algunos subcomandos como cryptfsel cifrado. El enablecryptosubcomando tiene dos modos: wipe(borrar /datacompletamente) y inplace(supuestamente aplicando cifrado mientras copia su original /datadentro del contenedor).

Luego, hay cuatro opciones disponibles a partir de Android 5.0, una de ellas es passwordla que acepta una sola secuencia hexadecimal como clave. Por lo tanto, si su contraseña es foo, entonces la representación hexadecimal es 666f6f( festá 66en hexadecimal, oes 6f, consulte http://www.asciitable.com/ ). El comando para esto es:

vdc cryptfs enablecrypto wipe password 666f6f

Esto se probó en un Nexus 5 (nombre en clave hammerhead, ejecutando cm-12.1-20150814) que tiene una partición separada para almacenar metadatos. Es importante que la partición de datos de usuario tenga el encryptableindicador establecido seguido de la ruta a una partición o la cadena especial footer. Una línea (abreviada) de mi /fstab.hammerheadarchivo:

/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 ...,check, encryptable = /dev/block/platform/msm_sdcc.1/by-name/metadata

Cuando la cadena especial footer( encryptable=footer) está presente, se utilizan 16 KiB al final de la partición de datos para almacenar metadatos de cifrado.

Para leer más, consulte:


Apéndice: extracto de logcat desde el momento en que ejecuté el comando de cifrado hasta que finaliza y se reinicia (omitiendo mensajes gráficos no relacionados al final). Tenga en cuenta que este Nexus 5 tiene criptografía acelerada por hardware (QSEECom).

--------- beginning of main
08-16 12:57:15.459 W/DrmManagerClientImpl(Native)( 2108): DrmManager server died!
08-16 12:57:15.459 I/ServiceManager(  184): service 'drm.drmManager' died
08-16 12:57:15.467 D/Cryptfs (  186): Just asked init to shut down class main
08-16 12:57:15.470 D/Cryptfs (  186): unmounting /mnt/shell/emulated succeeded
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.audio_flinger' died
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.player' died
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.camera' died
...
08-16 12:57:16.695 D/Cryptfs (  186): unmounting /data succeeded
08-16 12:57:16.695 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.696 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:16.697 I/Cryptfs (  186): keymaster version is 3
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.697 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:18.058 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:18.058 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:18.058 I/Cryptfs (  186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:18.208 D/BootAnimation( 2683): Use save memory method, maybe small fps in actual.
08-16 12:57:18.208 E/QCOM PowerHAL( 2683): Failed to acquire lock.
08-16 12:57:18.691 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:18.691 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:18.692 I/Cryptfs (  186): Signing safely-padded object
08-16 12:57:18.797 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:18.797 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:20.056 I/Cryptfs (  186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:20.690 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:20.691 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:20.691 I/Cryptfs (  186): Signing safely-padded object
08-16 12:57:20.796 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:20.796 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:21.429 I/Cryptfs (  186): Enabling support for allow_discards in dmcrypt.
08-16 12:57:21.429 I/Cryptfs (  186): load_crypto_mapping_table: target_type = crypt
08-16 12:57:21.429 I/Cryptfs (  186): load_crypto_mapping_table: real_blk_name = /dev/block/platform/msm_sdcc.1/by-name/userdata, extra_params = 1 allow_discards
08-16 12:57:21.431 I/Cryptfs (  186): Making empty filesystem with command /system/bin/make_ext4fs -a /data -l 13725837312 /dev/block/dm-0
08-16 12:57:21.447 I/make_ext4fs(  186): SELinux: Loaded file_contexts from /file_contexts
08-16 12:57:21.447 I/make_ext4fs(  186): Creating filesystem with parameters:
08-16 12:57:21.447 I/make_ext4fs(  186):     Size: 13725835264
08-16 12:57:21.448 I/make_ext4fs(  186):     Block size: 4096
08-16 12:57:21.448 I/make_ext4fs(  186):     Blocks per group: 32768
08-16 12:57:21.448 I/make_ext4fs(  186):     Inodes per group: 8144
08-16 12:57:21.448 I/make_ext4fs(  186):     Inode size: 256
08-16 12:57:21.448 I/make_ext4fs(  186):     Journal blocks: 32768
08-16 12:57:21.449 I/make_ext4fs(  186):     Label: 
08-16 12:57:21.449 I/make_ext4fs(  186):     Transparent compression: none
08-16 12:57:21.449 I/make_ext4fs(  186):     Blocks: 3351034
08-16 12:57:21.449 I/make_ext4fs(  186):     Block groups: 103
08-16 12:57:21.459 I/make_ext4fs(  186):     Reserved block group size: 823
08-16 12:57:21.465 I/make_ext4fs(  186): Created filesystem with 11/838832 inodes and 93654/3351034 blocks
08-16 12:57:21.465 I/make_ext4fs(  186):     Total files: 0
08-16 12:57:21.465 I/make_ext4fs(  186):     Total bytes: 0
08-16 12:57:42.926 D/Cryptfs (  186): Successfully created filesystem on /dev/block/dm-0
Wow @Lekensteyn, gracias por tomarte el tiempo de escribir esto. Tendré que pasar algún tiempo este fin de semana tratando de configurar esto. En caso de que falle, puedo borrar todo de TWRP e intentarlo de nuevo, ¿verdad?
Sí, es solo la partición de datos. Deliberadamente limpié el mío varias veces cuando estaba experimentando.
LPT: a partir de la versión 6.0 (Marshmallow), vdc usa una contraseña no codificada en ASCII como parámetro (=texto sin cifrar). Fue bastante bueno practicar con la tabla ASCII una vez que descubrí esto, solo unos minutos después de que me pidieron que ingresara mi contraseña de arranque. Tuve que poner mi contraseña en ASCII por culpa mía jajaja

Para mí, la respuesta original no funcionó como se esperaba. Parecía que se había cifrado correctamente, pero la interfaz de usuario volvió muy rápidamente y la configuración de "Cifrado" no mostraba que los dispositivos estuvieran cifrados. Luego apliqué los comandos dados en la actualización , pero aún así no funcionó. Luego reduje el tamaño de la partición de datos y la cifré con éxito. Es decir

mount | grep datapara encontrar el dispositivo de bloque real de la partición de datos. Supongamos que lo es /dev/block/mmcblk0p26.

umount /datapara que las herramientas ext funcionen.

e2fsck -f -p /dev/block/mmcblk0p26para no tener problemas para el próximo cambio de tamaño.

tune2fs -l /dev/block/mmcblk0p26para obtener el recuento de bloques. Supongamos que lo es 3057395.

resize2fs /dev/block/mmcblk0p26 3057375, es decir, reste una cantidad suficiente como 20 del recuento de bloques original.

e2fsck -f -p /dev/block/mmcblk0p26Encontré un inodo mal colocado para mí.

También necesitaba montar la /systempartición para conseguir resize2fs. En mi sistema, ese binario estaba vinculado a una versión de libc de 64 bits, pero el TWRP que usé no parecía proporcionar eso. Así que necesitaba prefijar los comandos con env LD_LIBRARY_PATH=/system/lib64.

Para el sistema de archivos F2FS: android.stackexchange.com/questions/146081/…

A partir de CM12.1 2015-10-15, la respuesta de Lekensteyn ya no funciona.

Aparentemente, el mkfs.f2fs, que se necesita para crear el sistema de archivos, se ha movido de /system/bin/a/sbin/

También tenemos que lidiar con SELINUX. Esto significa que tenemos que hacer varios pasos adicionales:

  1. adb raíz
  2. shell adb
  3. setenforce 0
  4. montar -oremount,rw /sistema
  5. ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
  6. vdc cryptfs enablecrypto borrar contraseña 666f6f

Otra actualización : compilación CM13 del 9 de enero de 2016 , usando el teléfono Nubia Z7 Max, NX505J

Este comando ( ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs) ya no es necesario ya que el archivo vive aquí nuevamente. No es necesario crear un enlace simbólico.

Este comando ya no necesita estar en HEX y si ingresa hexadecimal, su PW será hexadecimal.
cryptfs enablecrypto wipe password 666f6f- Esto literalmente creó una contraseña para mí de 666f6fnofoo

Todavía estoy investigando este problema porque superé los bloques adicionales necesarios para los metadatos. Ahora necesito superar el hecho de que la GUI y los comandos manuales para cifrar dan como resultado un cifrado que solo es viable a través de un ciclo de arranque. Informaré cuando tenga un cifrado exitoso.

En este momento encripto y funciona bien y arranco la primera vez y dice que el teléfono está encriptado. Usando TWRP puedo confirmar que /los datos están encriptados, pero las contraseñas HEX y ASCI que intento en TWRP no funcionan. En el próximo reinicio, el sistema operativo Android no puede iniciar completamente CM13. Confirma que tengo la contraseña de cifrado correcta y luego solo obtengo 1 arranque cifrado. Después del primer inicio cifrado exitoso, se bloquea en la etapa de animación del ciclo de inicio a partir de entonces. Las mejores prácticas de seguridad ahora recomiendan el cifrado de teléfono AES256.

¿Qué tan confiable ha sido el sistema con el cifrado telefónico AES256 en CM13? Abrí un hilo sobre el tema aquí android.stackexchange.com/q/134981/9897

Al tener un Moto X 2013 con Cyanogenmod 12.1, tampoco pude cifrarlo. Finalmente, lo logré con estos pasos:

  1. Habilite la raíz en la configuración del desarrollador en el teléfono y abra un shell (aplicación de terminal, también se puede habilitar en la configuración del desarrollador)
  2. Ingrese suy confirme el acceso de root
  3. Ingresarsetenforce 0
  4. Ahora abra Configuración , vaya a Seguridad y seleccione Cifrar teléfono . Luego, Android se reiniciará y comenzará a cifrar el teléfono.

Llegué a esta solución combinando la respuesta de Art y este hilo del foro .

No funcionó para mí. Por cierto, ¿puedes volver a establecer el estado de SELinux en 1 después de esto?

Después de 6 horas de dolor mental y sudor, podría haber encontrado una solución que funcionó para mí. Y también fue un accidente. Hice esto para el Samsung S4 Mini con CyanogenMod 13.0 y Android 6.0.1. Un factor clave importante aquí es que lo comencé desde un teléfono limpio (firmware nuevo y sin rootear), porque cuando el teléfono estaba previamente rooteado, entonces el teléfono no quería funcionar en absoluto.

Usé la solución del Firelord y Lekensteyn para el problema, pero logré olvidar una línea de los comandos.

Así es como lo hice:

  1. Encendí la depuración de Android y el acceso raíz a ADB solo en las Opciones de desarrollador .

  2. En el símbolo del sistema ADB usé el comando adb rooty . adb shellDespués de eso, abrí otro símbolo del sistema ADB y usé el adb logcatcomando.

  3. En el primer shell ADB, avancé con setenforce 0y después de eso vdc cryptfs enablecrypto wipe password YOUR-PASSWORD.

AVISO IMPORTANTE: El comando de contraseña puede variar de la versión de Android que esté utilizando. Si está usando Android 5.X , debe usar el sistema hexadecimal (en la línea Chr está el símbolo en su contraseña, el valor hexadecimal está en la línea Hx). Si está utilizando Android 6.X , entonces SU CONTRASEÑA será la contraseña que ingresó allí.

Como notará, olvidé usar el mount -oremount,rw /systemcomando. Después de eso, la pantalla se volverá negra. Cuando vi que el shell ADB con el registro se detuvo y terminó, reinicié el teléfono. Pero como para todos, el problema es que CyanogenMod no se carga. Y me las arreglé para arreglarlo con bastante facilidad:

  1. Mantenga presionado Vol Up & Home & Power down hasta que se inicie el TWRP. Le pedirá su contraseña de cifrado.
  2. Realice la parte de instalación de CyanogenMod con las aplicaciones adicionales de Google (la segunda parte de la guía).
  3. Una vez hecho esto, reinicie el dispositivo. Cuando se inicie, tomará un tiempo. Primero iniciará el teléfono, luego solicitará la contraseña de cifrado y luego tomará un tiempo hasta que se inicie.

Ahí tienes, debería funcionar. Al principio, cuando aparezca la configuración del teléfono, déjalo así por un minuto. Puede haber un pequeño bloqueo para el asistente de configuración si lo acelera demasiado rápido, pero se reiniciará automáticamente cuando se bloquee.

En mi muy pequeño conocimiento de cómo funciona CyanogenMod y Android Encryption, creo que durante el formateo elimina algunos archivos importantes de Cyanogen o Android, lo que impide que se inicie.

El cifrado no funcionó en mi teléfono (SGS5; CM13, TWRP 3.0.2-2): siempre tenía una pantalla negra.

No quería usar comandos de shell, así que encontré otra forma:

Tenía SuperSU instalado, lo desinstalé en la aplicación y luego actualicé el SU-Remover .

Después de eso, pude usar el cifrado desde el menú.

Advertencia:

  • El cifrado eliminó todos mis datos y aplicaciones (incluidos los archivos en la SD interna), ¡ así que haga una copia de seguridad primero !
  • Después del cifrado, solo me quedaban 2 GB de espacio interno (normalmente 11 GB). Tuve que hacer un borrado completo (también eliminar Cyanogenmod), reinstalar Cyanogenmod y otro intento de cifrado para recuperar mi espacio.
  • También tienes que reactivar la raíz, usé BETA-SuperSU-v2.68-20160228150503 para eso (flash con twrp).