10 votos

¿Cómo encriptar tu dispositivo con CyanogenMod 12.1?

CyanogenMod 12 y 12.1 La configuración de "Encriptar el teléfono" no funciona y lo ha sido durante bastante tiempo. ¿Hay alguna manera de cifrar el teléfono de alguna otra manera? ¿Puede CM ser sideloaded en un teléfono con un directorio /data cifrado? ¿Hay alguna otra forma de mantener los datos a salvo? El dispositivo en el que estoy trabajando es un LG G3 de Verizon.

6voto

Lekensteyn Puntos 568

Hay comandos de bajo nivel que se pueden utilizar en un shell para cifrar su partición de datos de usuario. Advertencia: las siguientes instrucciones borrará sus datos Asegúrese de hacer una copia de seguridad si es necesario.

Siguiendo estos pasos, usted debe ser capaz de borrar su partición de datos y tenerla encriptada después (similar a un restablecimiento de fábrica):

  1. Arranca tu teléfono normalmente (o bien el recovery ya no funciona, o bien me encontré con un problema diferente).

  2. Asegúrese de que Modo de depuración USB (adb) y Acceso a root para el ADB está activado.

  3. Introduzca un intérprete de comandos de root con adb root seguido de adb shell .

  4. Opcional: ver los registros invocando adb logcat en otra cáscara.

  5. Introduzca este comando, escriba su contraseña y pulse Enter. Esto establecerá realmente 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 lo convierte en una representación hexadecimal ( hexdump ... ). Si le da miedo o si no está seguro de lo que hace este comando, vea a continuación.

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

Lo anterior vdc ("Volume Daemon Client") comunicado con vold (Volume Daemon) tiene algunos subcomandos como cryptfs para la codificación. El enablecrypto tiene dos modos: wipe (claro /data completamente) y inplace (supuestamente aplicando la encriptación mientras se copia su original /data dentro del contenedor).

Entonces, hay cuatro opciones disponibles a partir de Android 5.0, una de ellas es password que acepta una única secuencia hexadecimal como clave. Así, si su contraseña es foo entonces la representación hexadecimal es 666f6f ( f es 66 en hexágono, o es 6f , ver http://www.asciitable.com/ ). El comando para esto es:

vdc cryptfs enablecrypto wipe password 666f6f

Esto fue probado en un Nexus 5 (nombre de código hammerhead, corriendo cm-12.1-20150814) que tiene una partición separada para almacenar metadatos. Es importante que la partición userdata tiene el encryptable seguido de la ruta de acceso a una partición o de la cadena especial footer . Una línea (abreviada) de mi /fstab.hammerhead archivo:

/dev/block/platform/msm_sdcc.1/by-name/userdata /datos ext4 ...,comprobar, encriptado \= /dev/block/platform/msm_sdcc.1/by-name/metadata

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

Para más información, véase:


Apéndice: extracto de logcat desde que ejecuté el comando de cifrado hasta que termina y se reinicia (omitiendo los mensajes gráficos no relacionados al final). Ten 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

0 votos

Wow @Lekensteyn gracias por tomarte el tiempo de escribir esto. Voy a tener que pasar algún tiempo este fin de semana tratando de configurar esto. En caso de que yo eff para arriba, puedo simplemente borrar todo de TWRP y vuelva a intentarlo, ¿verdad?

1 votos

Sí, es sólo la partición de datos. Yo borré deliberadamente la mía varias veces cuando estaba experimentando.

2 votos

LPT: A partir de la 6.0 (Marshmallow) vdc sí utiliza como parámetro la contraseña no codificada en ascii (=cleartext). Fue bastante agradable para practicar con la tabla ASCII una vez que descubrí esta cosa - sólo minutos después de que se me pidió que introduzca mi contraseña om arranque. Tuve que poner mi contraseña en ASCII por mi culpa lol

5voto

user48616 Puntos 212

Para mí, el respuesta original no ha funcionado como se esperaba. Parecía que se había encriptado con éxito, pero la interfaz de usuario volvía muy rápidamente y la configuración de "Encriptación" no mostraba que los dispositivos estuvieran encriptados. Entonces apliqué los comandos dados en la actualización pero sigue sin funcionar. Entonces reducir el tamaño de la partición de datos y se encriptó con éxito. Es decir.

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

umount /data para que las herramientas externas funcionen.

e2fsck -f -p /dev/block/mmcblk0p26 para no tener problemas en el próximo redimensionamiento.

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

resize2fs /dev/block/mmcblk0p26 3057375 es decir, restar una cantidad suficiente, como 20, del número de bloques original.

e2fsck -f -p /dev/block/mmcblk0p26 encontró un inodo mal colocado para mí.

También necesitaba montar el /system partición con el fin de obtener resize2fs . En mi sistema, ese binario estaba enlazado con una versión de 64 bits de libc, pero el TWRP que utilicé no parecía proporcionarlo. Así que tuve que prefijar los comandos con env LD_LIBRARY_PATH=/system/lib64 .

0 votos

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

3voto

Art Puntos 21

A partir de CM12.1 2015-10-15 el responder de Lekensteyn ya no funciona.

Al parecer, el mkfs.f2fs que se necesita para crear el sistema de archivos, se ha trasladado de /system/bin/ a /sbin/

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

  1. adb root
  2. adb shell
  3. setenforce 0
  4. mount -oremount,rw /system
  5. ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
  6. vdc cryptfs enablecrypto wipe password 666f6f

2voto

gregswift Puntos 83

Otra actualización CM13 9 de enero de 2016 construir, 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 vuelve a vivir aquí. No es necesario crear un enlace simbólico.

Este comando ya no necesita estar en HEX y si ingresa hexágono su PW será hexagonal.
cryptfs enablecrypto wipe password 666f6f - Esto me creó literalmente una contraseña de 666f6f no foo

Todavía estoy investigando este tema porque he superado los bloques adicionales necesarios para los metadatos. Ahora necesito superar el hecho de que tanto la GUI como los comandos manuales para encriptar dan como resultado una encriptación que sólo es viable durante un ciclo de arranque. Informaré cuando tenga una encriptación exitosa.

Ahora mismo cifro y funciona bien y arranco la primera vez y dice que el teléfono está cifrado. Usando TWRP puedo confirmar que /data está encriptado pero las contraseñas HEX y ASCI que pruebo en TWRP ambas no funcionan. En el siguiente reinicio el sistema operativo Android no puede arrancar completamente CM13. Confirma que tengo la contraseña de encriptación correcta y entonces sólo consigo 1 arranque encriptado. Después del primer arranque cifrado con éxito se bloquea en la etapa de animación del ciclo de arranque a partir de entonces. Las mejores prácticas de seguridad ahora recomiendan el cifrado del teléfono AES256.

0 votos

¿Cómo de fiable ha sido el sistema de encriptación telefónica AES256 en CM13? Abrí un hilo sobre el tema aquí Android.stackexchange.com/q/134981/9897

2voto

Bob Puntos 374

Al tener un Moto X 2013 con Cyanogenmod 12.1 tampoco conseguí encriptarlo. Finalmente, tuve éxito con estos pasos:

  1. Habilitar el Root en los Ajustes de Desarrollador del teléfono y abrir un shell (aplicación Terminal, también se puede habilitar en los Ajustes de Desarrollador)
  2. Entre en su y confirmar el acceso a root
  3. Entre en setenforce 0
  4. Ahora abierto Ajustes Ir a Seguridad y seleccione Cifrar el teléfono . Entonces Android se reiniciará y comenzará a encriptar el teléfono.

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

0 votos

No me ha funcionado. Por cierto, ¿puedes volver a poner el estado de SELinux en 1 después de esto?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android 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