Le problème se révèle être une nouvelle fonctionnalité de sécurité dans KitKat. Par défaut, les applications ont leur propre espace de nom de montage, ce qui signifie que les montages créés par une application ne sont pas visibles par une autre application.
Deuxièmement, les téléphones Android sans véritable carte SD utilisent une émulation pour la fausse carte SD, ce qui m'a posé quelques problèmes.
SuperSU de Chainfire a une option pour accéder à l'espace de nom Root mount qui permet à un programme de monter des systèmes de fichiers et de les rendre visibles à tous les autres programmes. Malheureusement, Cryptonite ne connaît pas cette option. Une solution est d'intercaler un script avant le programme encfs
binaire que Cryptonite utilise.
Vous aurez besoin d'un shell Root pour exécuter ces commandes, probablement à partir d'un ordinateur utilisant la fonction adb
pour vous connecter à votre téléphone via usb. (Mais l'utilisation d'une application de terminal pourrait également fonctionner).
Des pas :
Déplacez-vous vers le répertoire de données de la cryptonite :
cd /data/data/csh.cryptonite
Notez l'identifiant de l'utilisateur de Cryptonite :
ll -d -n .
Cela donnera un résultat similaire à drwxr-x--x 11 10133 10133 4096 Feb 14 23:51 .
Le 10133 est l'identifiant de l'utilisateur de Cryptonite (la deuxième copie est l'identifiant du groupe Cryptonite, mais cela devrait être le même).
Créez un dossier pour stocker le binaire original encfs, et donnez-lui le bon propriétaire.
mkdir original
chown 10133:10133 original
(remplacez le 10133 par l'identifiant d'utilisateur que cryptonite a sur votre téléphone)
Déplacez les encfs d'origine
mv encfs original/
Créez un script nommé encfs
pour s'interposer pour les vrais encfs. Je préfère utiliser le nano
pour cela, mais vous pouvez aussi créer le fichier d'une manière différente et le déplacer en utilisant la commande cp /path/to/encfs/replacement/file/here /data/data/csh.cryptonite/encfs
nano encfs
Mettez le contenu suivant dans le script encfs de remplacement
#!/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
Sauvegarder le fichier avec ctrl-x (volume bas + x sur certaines applications émulatrices de terminal), répondre y
à sauver.
Rendre le script de remplacement exécutable
chmod +x encfs
Définir le bon propriétaire
chown 10133:10133 encfs
(Encore une fois, remplacez le 10133 par le nom d'utilisateur que Cryptoite a sur votre téléphone).
Ça devrait être ça. Monter un dossier encfs à partir de /storage/emulated/0/
dans un autre dossier dans /storage/emulated/0
devrait fonctionner maintenant.
Ce qu'il fait
Le script de remplacement fait deux choses : remplacer les chemins d'accès aux dossiers à partir de /storage/emulated/something
à l'endroit réel où les données de la carte SD émulée sont stockées, et appeler le vrai encfs dans l'espace de nom de montage Root afin que le dossier encfs monté soit visible par toutes les applications.
Le changement des chemins de dossiers est nécessaire car pour une raison quelconque, le montage sur la carte SD émulée ne fonctionne pas (du moins pour moi). La carte SD émulée stocke en fait ses données dans le dossier /data/media/0
. En montant sur l'emplacement de stockage réel, la couche d'émulation de la carte SD n'a pas besoin de savoir qu'il s'agit d'un système de fichiers différent.
Montage direct d'un fichier sur /data/media/0
de Cryptonite ne fonctionne pas parce que l'application Cryptonite n'a pas accès à ce dossier, donc le script de remplacement change les chemins du point de montage et du dossier crypté pour pointer vers le stockage sous-jacent de la carte SD.