Lo hice y lo entendí

El blog de Vicente Navarro
29 abr

Problemas para encriptar el móvil/tablet Android con una Custom ROM

A pesar de que mi vida gravita desde hace años alrededor de otros polos, si hay algo que me atrae enormemente, y que me encantaría poder tener tiempo para explorar, es el desarrollo en dispositivos Android; área que ya tuvo un pequeño hueco en este mismo blog en Desempaquetando el firmware de móviles y tablets Android de Samsung.

Sin embargo, en las últimas semanas me he visto “forzado” (¡ya!¡como si no me gustara!) a ponerme un poco las pilas con todo esto cuando mi empresa decidió exigir la encriptación del dispositivo para poder conectar al servidor de correo Exchange. Esto no le sentó nada bien a mi Samsung Galaxy SIII, que nunca antes me había dado ningún problema serio, pero que tan pronto como lo encripté pasó a tener un rendimiento realmente lamentable (p.e. lags de varios segundos en el launcher o al intentar abrir cualquier aplicación… ¡incluso la de teléfono!). Reiniciar el móvil al estado de fábrica y comenzar de nuevo (siempre con encriptación, claro) tampoco ayudaba.

Así que me decidí a probar alguna “Custom ROM“, ya que algunas tenían fama de tener muy buen rendimiento. Para ello, comencé instalando el “Custom RecoveryPhilZ Touch con Odin (Cómo instalar una custom ROM en el Samsung i9300) y empecé a probar varias ROMs, algunas basadas en la original de Samsung (stock) (como Revolutionary S5), y otras basadas en AOSP (como SmartDroid AOSP o ArchiDroid). Pero al final la que más me convenció fue simplemente la CyanogenMod 11, más que nada por su minimalismo y sencillez.

Todas ellas tenían sus pros y sus contras. Sin embargo, con todas ellas tuve el mismo problema: No podía conectarme a Exchange porque en cuanto comenzaba el proceso de encriptación de los datos, el móvil se quedaba colgado en la pantalla del comienzo de la encriptación, donde sale el robot de Android, y no hacía nada más:

Android Encrypting

Nota: Esta imagen, encroid_waiting.png, está en el Settings.apk

Incluso era posible pulsar el botón de home y volver al launcher y seguir trabajando con normalidad.

Tras instalar el Driver de Samsung para ADB y el ADB (con el “15 seconds ADB Installer“), me conecté a la shell del móvil para ver qué pasaba durante la encriptación y con el comando logcat descubrí la clave del problema:

E/Cryptfs ( 1899): Orig filesystem overlaps crypto footer region. Cannot encrypt in place.

Dicho error me llevó a “Cm10.2 – Encryption Does Not Start, Stuck At Splash Screen” y a “[Q] ClockworkMod wipe blocking encryption?“, donde descubrí que el problema es que:

What I’ve discovered is that the dmcrypt layer requires 16kb of space at the end of the /data partition to store its volume keys.

Es decir, hay que dejar 16 KiB libres al final de la partición para poder encriptar el volumen y es obvio que el recovery que yo estaba usando no lo estaba haciendo al recrear /data (tal vez haya algún otro recovery que sí que lo haga). Así que, siguiendo las instrucciones, arranqué el móvil en modo recovery y me conecté a su shell con adb:

C:\adb>adb shell
~ # mount
mount
rootfs on / type rootfs (rw)
tmpfs on /dev type tmpfs (rw,seclabel,nosuid,relatime,mode=755)
devpts on /dev/pts type devpts (rw,seclabel,relatime,mode=600)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,seclabel,relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
tmpfs on /storage type tmpfs (rw,seclabel,relatime,mode=050,gid=1028)
tmpfs on /mnt/secure type tmpfs (rw,seclabel,relatime,mode=700)
tmpfs on /mnt/fuse type tmpfs (rw,seclabel,relatime,mode=775,gid=1000)
/dev/block/mmcblk0p8 on /cache type ext4 (rw,seclabel,relatime,errors=panic,user_xattr,barrier=1,journal_async_commit,data=ordered)
/dev/block/mmcblk0p12 on /data type ext4 (rw,seclabel,relatime,errors=panic,user_xattr,barrier=1,journal_async_commit,data=writeback,noauto_da_alloc,discard)

y pude ver que /data era el volumen /dev/block/mmcblk0p12. Luego vi el tamaño de dicho volumen, 12091392 bloques (~11.5GB):

~ # cat /proc/partitions
cat /proc/partitions
major minor  #blocks  name

 179        0   15388672 mmcblk0
 179        1       4096 mmcblk0p1
 179        2       4096 mmcblk0p2
 179        3      20480 mmcblk0p3
 179        4       8192 mmcblk0p4
 179        5       8192 mmcblk0p5
 179        6       8192 mmcblk0p6
 179        7      32768 mmcblk0p7
 179        8    1048576 mmcblk0p8
 179        9    1572864 mmcblk0p9
 179       10     573440 mmcblk0p10
 179       11       8192 mmcblk0p11
 179       12   12091392 mmcblk0p12
 179       16   30931968 mmcblk1
 179       17   30927872 mmcblk1p1

y tras desmontar el sistema de ficheros:

~ # umount /data
umount /data

volví a crear el sistema de ficheros dejando algo de espacio al final, especificando que usara 12091300 bloques, unos pocos menos que los 12091392 disponbles:

~ # mke2fs -T ext4 -L data /dev/block/mmcblk0p12 12091300
mke2fs -T ext4 -L data /dev/block/mmcblk0p12 12091300
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=data
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
755904 inodes, 3022825 blocks
151141 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3095396352
93 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

tras lo cual reinicié:

~ # reboot
reboot

y ya dentro del sistema (tuve que configurarlo todo de nuevo, claro), ¡pude finalmente encriptar /data sin problemas!

Por cierto, con CyanogenMod el rendimiento es mejor, ahora ya aceptable, pero tampoco super fluído, me temo…

:wq!

Entradas relacionadas

4 Comentarios a “Problemas para encriptar el móvil/tablet Android con una Custom ROM”

  • Sys dice:

    ¡Qué fiera! Gracias por la información

    > Problemas para encriptar el móvil/tablet Android
    También quería decir que “encriptar” es meter en una cripta. Es mucho mejor el uso del verbo “cifrar”.

    ¿Pero qué voy a decir? Una explicación detallada, con ejemplos, comentarios, etc. ¡Gracias es lo que voy a decir!

    :x

    [ Sí, bueno, si tecleo :x me ahorro más pulsaciones que con :wq! :-) ]

  • Sys dice:

    Y yo tampoco te he borrado de mi lista de RSS. ¿Por qué? Porque aunque sean pocos los artículos… ¡son buenos!

  • Anubys dice:

    Estoy fllipando, no pensé que volvieras a publicar después de tanto tiempo, contigo he pasado varios de los mejores momentos de mi vida trasteando y aprendiendo, y volver a leerte es todo un placer.

    No nos abandones, mi RSS no te olvida ;)

Tema LHYLE09, creado por Vicente Navarro