De quoi on parle ?

Pour ceux qui ne la connaîtrait pas, l'application "SHealth" est l'un des arguments de vente du Samsung galaxy S4. Il s'agit d'un programme, crée par la firme coréenne donc, qui utilise les nombreux capteurs du Galaxy S4 (et d'accessoires connectés) pour suivre l'état de santé de l'utilisateur (poids, glycémie, pressions artérielle, suivi de l'exercice et des calories consommées...) C'est surtout cette dernière fonction, s'appuyant sur des bases de donnée en ligne et permettant d'enregistrer rapidement ce que l'on consomme qui nous intéresse ici.

Le problème

Au fur et à mesure que l'on utilise cette application, on entre énormément d'informations pour corriger ou compléter les bases de données proposées. On customise ses plats (que l'on peut aussi prendre en photo etc). Plus encore que le carnet d'adresse (que l'on peut généralement retrouver ailleurs assez facilement) ce sont des données qu'il n'est pas question de perdre en cas de vol de ou de casse du téléphone. Je ne suis donc pas le seul à m’être demandé ou pouvaient bien être stockées ces informations et comment faire pour les sauvegarder.

Premiers essais en vain

Sans grands espoir, j'ai commencé par téléphoner au SAV Samsung (oui, je suis un vrai dingue). J'éviterai ici de les descendre en flamme, car la femme que j'ai eu au téléphone à au moins vraiment essayé de m'aider. Ca à donné un truc dans le genre :

  • Je voudrai pouvoir sauvegarder blabla, alors elles sont ou les données de shealth ?
  • Je vais demander à mon responsable technique.
  • ...
  • Voila, alors les données, elles sont stockées sur le téléphone mais vous ne pouvez pas y avoir accès
  • Je ne vous parle d'y avoir accès avec l'application, je vous parle d'aller fouiller dans le système de fichier du téléphone. On y a forcément accès (quitte à utiliser root). Mais je voudrait savoir ou elles sont.
  • Je... retourne voir mon responsable
  • ...
  • Alors, en fait, il me dit que non, que les données sont sur Internet, et que c'est pour ça que vous ne pouvez pas y avoir accès.
  • Ah bon ? C'est sur ça ? Vous envoyer dans le cloud des données médicales sans prévenir l'utilisateur ? Bon au moins ça résoudrait mon problème de sauvegarde mais ... Vous êtes sur ? Si je casse mon S4 et que j'en achète un autre, je me reconnecte avec mon compte Samsung et je retrouve toutes mes données ?
  • (angoissée) ça je... Bon attendez, je retourne lui poser la question.
  • ... attente plus longue que les fois précédentes
  • Bon alors, excusez moi pour l'attente, mais la maintenant c'est une vrai réponse. On à testé, et donc non ça ne fonctionne pas. Les données sont bien présentes sur le téléphone, mais on sait pas ou.
  • ...
  • Écoutez, je vais vous donner l'adresse d'un point point service Samsung, le mieux serait que vous alliez directement leur poser la question.

L'adresse étant très proche de chez moi, je m'y suis rendu par curiosité. Je suis tombé sur une minuscule boutique, tenu par un gars totalement largué ("SHealth, c'est un truc que vous avez téléchargé sur le store ?") et qui s'est contenté de me répéter qu'il ne pouvait rien faire d'autre que de me donner le numéro de téléphone du SAV que j'avais contacté quelques jours avant. Merci Samsung. Au moins leur "support IRL" est à l'image du support Internet. Aimable mais globalement incompétent et totalement inefficace.

La solution

Lassé de perdre mon temps, je me suis dit que le moment était venu de rooter l'appareil. Chose que je n'avais pourtant pas l'intention de faire à la base (sécurité, tout ça...). Après cela, il à suffit d’activer l'utilisation du root dans les options d'ES Explorer (l'un des meilleurs gestionnaire de fichier android), puis de lancer une recherche 'shealth" sur l'ensemble de l'appareil. Voila enfin les fichiers tant recherchés qui apparaissent.

Le répertoire "/data/data/com.sec.android.app.shealth/" semble être le plus important, notamment le sous répertoire databases qui contient trois fichiers au format sqlite3. Malheureusement, seul l'un des trois fichiers est directement lisible avec sqlite3. (Pour cela, sous linux, taper : sqlite3 nom_fichier, puis .dump). Les deux autres semblent chiffrés. Et bien sur, la seule base accessible ne présente en réalité aucun intérêt. C'est une base "par défaut" contenant de nombreuses informations sur les calories des aliments coréens ! (Chez eux, la recherche est donc faite de façon locale, alors que nous nous devons aller chercher les infos sur le net au fur et a mesure).

Un autre fichier est intéressant. Il contient les préférences utilisateur (et son profil age/poids etc). On y découvre surtout un paramètre indiquant que les bases sont chiffrés. Il s'agit de : com.sec.android.app.shealth_preferences.xml, dans le sous répertoire "shared_prefs". J'ai bien essayé de modifier ce paramètre, mais cela ne donne aucun résultat, et l'ancienne valeur est automatiquement repositionnée au reboot de l'appareil. J'avais aussi trouvé un répertoire cache, que je ne retrouve plus, et qui contenait les photos des repas. J'imagine que, comme son nom l'indique, ce répertoire n'est pas nécéssaire et qu'il a été supprimé. Pour le moment, je suppose que les photos sont fortement réduites pour ne plus peser que quelques ko, et qu'elles sont intégrés en tant que blob dans les base sql, mais je n'ai aucune certitude à ce sujet :(

Conclusion

Pour ceux qui veulent simplement pouvoir sauvegarder leur données, il faudra donc rooter le téléphone (oui je sais, c'est du délire...) et copier tous les fichiers trouvés par ES Explorer comportant "shealth" dans le nom. Pour ceux qui auraient aimé pouvoir exporter les informations (en format csv, sql ou n'importe quoi d'autre) la malheureusement je n'ai pas encore de solution. Franchement, chiffrer une base de donnée alors que la clef est enregistrée quelque part sur le téléphone, et qu'il suffit de lancer l'application pour y accéder, ou est l’intérêt !?

A votre avis, je rappel le SAV pour leur demander le cypher et la clef utilisée pour chiffrer la base sqlite3 nommée secure_shealth2.db (uniquement accessible en root) ou pas ? ...