El problema resulta ser una nueva característica de seguridad en KitKat. Las aplicaciones tienen por defecto su propio espacio de nombres de montaje, lo que significa que los montajes creados por una aplicación no son visibles para una aplicación diferente.
En segundo lugar, los teléfonos Android sin tarjeta SD real utilizan la emulación para la tarjeta SD falsa, y eso me dio algunos problemas.
SuperSU de Chainfire tiene una opción para acceder al espacio de nombres de montaje de root que permite a un programa montar sistemas de archivos y tenerlos visibles para todos los demás programas. Desafortunadamente, Cryptonite no conoce esta opción. Una solución es interponer un script antes del encfs
binario que utiliza Cryptonite.
Necesitarás un shell Root para ejecutar estos comandos, probablemente desde un ordenador que utilice adb
para conectarse a su teléfono a través de usb. (Pero el uso de una aplicación de terminal también podría funcionar).
Pasos:
Muévete al directorio de datos de la criptonita:
cd /data/data/csh.cryptonite
Observe el identificador de usuario de Cryptonite:
ll -d -n .
Esto dará una salida similar a drwxr-x--x 11 10133 10133 4096 Feb 14 23:51 .
El 10133 es el id de usuario de Cryptonite (la segunda copia es el id de grupo de Cryptonite, pero debería ser el mismo).
Crear una carpeta para almacenar el binario original de encfs, y darle la propiedad correcta
mkdir original
chown 10133:10133 original
(sustituye el 10133 por el identificador de usuario que tiene cryptonite en tu teléfono)
Alejar los encfs originales
mv encfs original/
Crear un script llamado encfs
para interceder por los verdaderos encfs. Prefiero utilizar el nano
para esto, pero también podrías crear el archivo de una manera diferente y moverlo usando el comando cp /path/to/encfs/replacement/file/here /data/data/csh.cryptonite/encfs
nano encfs
Poner el siguiente contenido en el encfs de sustitución script
#!/system/bin/sh
cmd=/data/data/csh.cryptonite/original/encfs
for param in "$@"
do
replaced=`echo "$param" | sed 's:^/storage/emulated/:/data/media/:'`
cmd="$cmd $replaced"
done
su -mm -c $cmd
Guarda el archivo con ctrl-x (volumen abajo + x en algunas aplicaciones del emulador de terminal), responde y
para ahorrar.
Hacer el reemplazo script ejecutable
chmod +x encfs
Establecer el propietario adecuado
chown 10133:10133 encfs
(De nuevo, sustituye el 10133 por el identificador de usuario que Cryptoite tiene en tu teléfono)
Eso debería ser todo. Montar una carpeta encfs desde /storage/emulated/0/
en una carpeta diferente en /storage/emulated/0
debería funcionar ahora.
Qué hace
El reemplazo script hace dos cosas: reemplazar las rutas a las carpetas de /storage/emulated/something
al lugar real donde se almacenan los datos de la tarjeta SD emulada, y llamar al encfs real en el espacio de nombres de montaje de root para que la carpeta encfs montada sea visible para todas las aplicaciones.
Cambiar las rutas de las carpetas es necesario porque por alguna razón el montaje en la tarjeta SD emulada no funciona (al menos para mí). La tarjeta SD emulada, de hecho, almacena sus datos en /data/media/0
. Al montar en la ubicación de almacenamiento real, la capa de emulación de la tarjeta SD no necesita saber que hay un sistema de archivos diferente.
Montar directamente un archivo en /data/media/0
de Cryptonite no funciona porque la aplicación Cryptonite no tiene acceso a esa carpeta, por lo que el reemplazo script cambia las rutas del punto de montaje y de la carpeta cifrada para que apunten al almacenamiento subyacente de la tarjeta SD.
0 votos
¿Cómo lo montas?
0 votos
@Mathew ¿Qué quieres decir exactamente? La carpeta encriptada está en /storage/emulated/legacy/encfs.crypt y he intentado montarla en /storage/emulated/legacy/encfs. Cryptonite ofrece una guía para montar las carpetas encfs. (Las carpetas también existen en /storage/emulated/0, pero eso tampoco funciona).
0 votos
¿Puede alguien con la reputación necesaria añadir las etiquetas 'cryptonite' y 'encfs' a esta pregunta?