Android vérouillé et mode avion
La veille du drame : Au moment de me coucher, je passe mon téléphone Android en mode "avion" comme habituellement. En effet, utilisé comme réveil et posé sur ma table de chevet, j'aime autant éviter de passer mon cerveau aux micro-ondes toutes les nuits.
Le matin : Le téléphone Android sonne comme prévu. Je coupe le réveil mais laisse le mode avion activé le temps de prendre le petit déjeuner (on a le droit de manger avant de lire ses nouveaux messages!).
Les prémices : De retour dans ma chambre, je vois mon petit garçon avec le téléphone en main qui s'amuse à faire des jolies traits de couleur avec le schéma de déverrouillage. Rien d'inquiétant, j'ai justement mis en place le schéma de déverrouillage pour éviter de voir mes applications supprimées ou d'avoir à expliquer à un correspondant à l'autre bout de la planète qu'on l'a appelé vingt fois par erreur.
Le drame : Au bout de plusieurs tentatives, le schéma de déverrouillage se bloque automatiquement et passe la main à un écran où l'on inscrit son login et mot de passe Google. Voyant cela je récupère le téléphone et rentre consciencieusement mon identifiant et mon mot de passe comme demandé, mais impossible de déverrouiller l'écran. J'éteins le téléphone, re-saisi plusieurs fois les informations demandées sans succès... Et pour cause, le téléphone est en mode avion donc aucun moyen pour lui de communiquer avec Google pour valider mon compte. Et comme il est verrouillé, impossible d'accéder à la gestion des connexions ou à la barre de statut pour activer le WiFi ou la 3G.

Les premières pistes trouvées sur le web n'ont pas fonctionné ou n'étaient pas satisfaisantes : appuyer comme un malade (4 à 5 fois par seconde!) sur "home" lors du démarrage, effectuer un reset d'usine et tout perdre, etc.
La solution est venue de l'utilitaire adb en ligne de commande, du mode root installé au préalable et de l'utilitaire sqlitebrowser sur le PC. Ceci a permis de récupérer la base des préférences du téléphone sur le PC, de la modifier et de la renvoyer. Ready? Go!
J'ai donc branché mon téléphone sur le PC et lancé la détection des périphériques par ADB:
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
HT9CNP8xxxxx device
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
HT9CNP8xxxxx device
Ok, le téléphone est visible et je peux donc récupérer les paramétrages du téléphones (base SQLite) et faire une copie de sauvegarde (toujours faire une sauvegarde!):
$ adb pull /data/data/com.android.providers.settings/databases/settings.db .
400 KB/s (36864 bytes in 0.089s)
$ cp settings.db settings.db.orig
400 KB/s (36864 bytes in 0.089s)
$ cp settings.db settings.db.orig
Là il me faut un utilitaire permettant d'éditer la base SQLite:
$ sudo aptitude install sqlitebrowser
Les NOUVEAUX paquets suivants vont être installés :
sqlitebrowser
0 paquets mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
[...]
Les NOUVEAUX paquets suivants vont être installés :
sqlitebrowser
0 paquets mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
[...]
Je lance donc mon éditeur et en paramètre la base SQLite des préférences de mon téléphone Android (enregistrée temporairement sur mon disque dur) :
$ sqlitebrowser ./settings.db
Depuis l'onglet Browse Data, je sélectionne la table system dans la liste déroulante. Une fois la table chargée, j'ai passé la valeur de la variable "airplane_mode_on" de 1 à 0 (zéro) afin de désactiver le mode avion.

Penser à sauver la base et quitter le logiciel avant la suite.
L'enregistrement dans le téléphone se fait très simplement avec un push au lieu d'un pull:
$ adb push ./settings.db /data/data/com.android.providers.settings/databases/
801 KB/s (36864 bytes in 0.044s)
801 KB/s (36864 bytes in 0.044s)
J'ai redémarré immédiatement le téléphone et au reboot il était connecté aux réseaux. J'ai pu dès lors faire valider mon identifiant par Google et retrouver mes petits icones :-)

Notes post-drame :
- Toujours rooter son téléphone (il vous appartient après tout!).
- ADB est votre ami
- Demander à Google la saisie d'un mot de passe qui sera enregistré DANS le téléphone lors de la première utilisation et ainsi éviter de bloquer le téléphone quand celui-ci n'est pas connecté au réseau.
CategoryAndroid, CategoryLinux, CategorySecurite