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 ? …
Heuuuu
Bloc note + crayon de papier ?
Sauvegardes aisées, vie privée respecte :p
Alors la solution du papier/crayon, non. Et pour des tas de raisons :p
Pour remplacer la fonction photo, il faut quand même super bien savoir dessiner. Et puis, un bloc note et un crayon, ça prend plus de place à transporter que mon téléphone.
Surtout, pour pouvoir noter tes repas aussi rapidement qu’avec le téléphone, il faudrait procéder de la même façon que le tél, avec une mini base de donnée. Pour pouvoir par exemple écrire juste le numéro du plat avec un index à la fin du bloc note pour se souvenir que le code 314 ça correspond a un poulet fritte, avec 1/5 ème de baguette de pain et une dannette au chocolat noir extra. Bref, le bordel quoi.
Hoper a ta place j’utiliserais pas ce truc qui m’a l’air obscur, je te conseille d’installer la ROM Cyanogen sans les Gapps pour avoir un téléphone clean et sans spywares de Google et Samsung.
Je sais bien que tu as raison. A la base, je voulais conserver un téléphone « de base » pour une fois. Par « sécurité », aussi parce que ça va finir par me souler de passer des heures sur un tél juste pour avoir un truc clean et secure.
Mais bon, vu qu’on a forcément besoin de rooter son tél pour des trucs aussi basiques que les sauvegardes (titanium…) ou le firewall, autant aller jusqu’au bout et changer de rom etc.
Pour shealth, c’est con quand même. Autant le soft de télécommande est une saloperie, un vrai spyware qui s’en cache même pas, autant celui la est plutôt sympa à utiliser.
Si j’avais le courage, je ferai bien un petit coup de tcpdump/wireshark sur le réseau wifi pour voir ce qu’il envoi réellement…
Fait du reverse engineering sur l’apk de s-health (/system/app/SHealth2.apk). Maintenant que tu à l’accès root, ça devrais être simple. Tu trouveras surement la clé, et toutes les informations indiquant l’emplacement des fichiers et leur contenu ! Par contre, prévois quelques heures de lecture de Java
🙂
Pas faux.
Si mon temps était illimité, je me lancerai dans cette entreprise sans hésiter 🙂 Cela dit… ouai… faut voir… Je sais quand même assez précisément ce que je cherche… peut être qu’avec des bons mots clefs…
Je vais déjà plus me renseigner sur sqlite3 et sur les techniques de chiffrement proposés en standard. A mon avis, les devs de Samsung se sont pas amusé à tout ré-inventer…
Copié d’un autre site :
You need to install dataviewer.apk to your phone and not your computer. Make sure your turn on the developer mode in S Heath.
Go to S Health-more settings-about S health. Right above « check for updates » tap 10 times on the version. If it works then it will turn to developer
mode.
Go to your web browser on your phone and go to developer samsung com/health and download. You will need to extract the zip file once downloaded find the dataviewer.apk and install it. Reboot your phone.
Read the programming guide because your need to turn on the permission to sync the data between the dataviewer and S Health for each item you want to view.
To Export the data, go to the main screen of dataviewer and on more is where you export the data. Once you export the data, you need to use a file manager like file commander to find the file and email it to yourself. It should be under the healthdata folder. It is located under storage/emulated/o/Shealth/com.samsung.health.bloodpressure.201601310420.csv for example
Merci !!!
Je n’ai pas testé, et je ne suis pas sur de pouvoir le faire (ça fait un moment quand même la… Je n’utilise plus le même téléphone etc). Mais je vais essayer de regarder cette application.