L'application est disponible sur le Playstore : https://play.google.com/store/apps/details?id=com.xiaomi.hm.health&hl=fr_FR.
Extraction de l'apk :
[tlk:~/CTF/MiBand]$ adb shell pm list packages | grep xiaomi package:com.xiaomi.hm.health [tlk:~/CTF/MiBand]$ adb shell pm path com.xiaomi.hm.health package:/data/app/com.xiaomi.hm.health-1/base.apk [tlk:~/CTF/MiBand]$ adb pull /data/app/com.xiaomi.hm.health-1/base.apk 5592 KB/s (7210288 bytes in 1.258s)
On passe un coup d'apktool, de dex2jar, de procyon et on est prêt pour reverse tout ça
J'ai développé une petite application android permettant de lire/écrire les différentes caractéristiques du bracelet : MibandGrepper. Vous trouverez ci-dessous le résumé de toutes ces caractéristiques. Certaines sont documentés officiellement https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx et communes à tous les équipements bluetooth low energy, d'autres sont spécifiques à ce bracelet. Le format de ces dernières a été retrouvé en reversant l'application android officielle.
UUID : 0000fee0-0000-1000-8000-00805f9b34fb
UUID : 0000ff0c-0000-1000-8000-00805f9b34fb
Droits : read
Contient la date de dernière charge, le nombre de charge, le niveau de batterie et le statut actuel de la charge. (10 octets en tout)
UUID : 0000ff01-0000-1000-8000-00805f9b34fb
Droits : read
Contient les informations sur le produit. Identifiant, différentes versions … (16 octets en tout)
public static int checksum(final byte[] array) { int i = 0; int n = 0; while (i < array.length) { n ^= (0xFF & array[i]); for (int j = 0; j < 8; ++j) { if ((n & 0x1) != 0x0) { n = (0x8C ^ (0xFF & n >> 1)); } else { n = (0xFF & n >> 1); } } ++i; } return n; }
La fonction est appelée sur les 7 premiers octets de l'identifiant. Le retour est xoré avec le 4eme octet. Le résultat final doit être égal au 8eme octet. Ca ressemble à un CRC8, mais je ne suis pas totalement sûr.
Dans les numéros de version, le premier octet est la version majeure, le second la version mineure, le troisième la révision et le premier le numéro de build.
UUID : 0000ff02-0000-1000-8000-00805f9b34fb
Droits : read
, write
Rien de spécial, les données répresentent le nom du device.
UUID : 0000ff03-0000-1000-8000-00805f9b34fb
Droits : notification
UUID : 0000ff04-0000-1000-8000-00805f9b34fb
Droits : read
, write
UUID : 00001800-0000-1000-8000-00805f9b34fb
UUID : 00001801-0000-1000-8000-00805f9b34fb
UUID : 00001802-0000-1000-8000-00805f9b34fb
Le firmware se trouve dans les assets de l'application : assets/Mili.fw
.
Il contient quelques chaines intéressantes :
RIVIERAWAVES-BLE DA14580-01 *notify realtimedata Battery fulldata wx indicate
DA14580-01
permet de vérifier ce qui est dit sur le site : http://www.mi.com/my/miband/#08
The DA14580 low-energy Bluetooth 4.0 chip manufactured by Dialog can run for over 4 years on a single 225mAh button power cell. This incredibly low energy consumption means Mi Band can go up to 30 days between charges.
J'ai réussi à trouver toutes les documentations directement sur le site du constructeur : http://support.dialog-semiconductor.com/. Il faut cependant s'inscrire et se faire valider son compte, dites que vous êtes étudiant et ça passera Vous aurez alors accès à toutes les docs et au … SDK !!
Je n'ai pas fais plus de recherches que ça sur le firmware, ça devrait arriver une fois la partie bluetooth finie ;)