Extracting My Data from the Microsoft Band
jeffhuang.com
jeffhuang.com
I wanted to track my heart rate while I run. I didn't want to let a large company have direct access to my health information.
http://www.polar.com/us-en/products/get_active/fitness_cross...
You can find a Polar Loop bracelet with the H7 heart rate monitor strap for around $150.00, which is a lot less than the Microsoft Band:
http://www.ebay.com/sch/i.html?_odkw=polar+h7&_from=R40&_osa...
I apologize in advance for the janky links.
https://github.com/mlt/schwinn810
Does anyone have any experience with either?
[1] http://www.mioglobal.com/en-uk/compare-mio-heart-rate-monito...
I just mount it with a Linux box and copy it whereever I want (including uploading to Garmin's cloud service).
It has a GPS and I suppose Wifi triangulation so they can track you outside and inside your house.
Are you running? climbing? walking? Your heart rate goes up with a very specific pattern.
Are you making love with this thing on? Also a clear heart rate pattern. If you remove this thing when you do it, it is also a very clear signal, normally you will put the device near you when you do, like on a table. Ohh, you know this thing has also a microphone?.
They can also track private conversations, like Snowden used to do in the NSA with smartphones. But smartphones use to be way farther than clockwatches to the mouth.
If you have a health problem, like a heart murmur, they also know, before you do.
Don't get me wrong. I would love to have something like this. But something I control, not someone else.
This! FFS this!
I have yet to find a simple fitness tracker that doesn't literally hold your own data ransom, if they let you export your data at all, and many don't!
Every solution that I'm aware of involves MITM-ing the traffic, or something equally nontrivial. I'm looking at you FitBit!
FitBit does expose an API but IMO this is insufficient for exactly the reason parent stated: I don't want to let them have direct access to my health information.
Everyone in my circles who has a fitness tracker would prefer to be able to export their data without any additional fees, why do none of the trackers cater to this demographic?
(And, of course, the NSA. And their partners, employees, etc.)
Instead, the only products available from the big companies seem to require some proprietary app to interface them and give very little control of their data - the user's own health data - to the user, which is certainly disappointing and agrees with the trend of devices getting more and more locked-down against their users. They seem to be going out of their way to make it hard to "extract" the data from their devices, almost as if "plug it in and copy the data over" scares them.
I specifically mentioned "big companies" because what I find somewhat ironic is that it's the cheap, unbranded far-Eastern manufacturers who are more likely to come up with products based on existing standards than invent their own proprietary protocols. For example http://www.amazon.co.uk/Multifunction-Personallized-Signatur... is very similar to the concept I have in mind, and it's a completely non-cloud-based device, but the reviews show users complaining that it's "too difficult to use".
Of course, being able to download this data so you can slice/dice it yourself would be way better. It would also be nice for them to release an SDK so you can write applets for the band.
This is gold :) Nice write-up, Jeff.
There is a very strong chance that it fully conforms to the OData spec: http://www.odata.org/documentation/odata-version-3-0/url-con... - although I'm not sure which version (most recent MSFT stuff has been 3.0).
So what you could do is hit a URL such as:
https://prodphseus.dns-cargo.com//v1/Events?$filter=AverageHeartRate gt 90
To get the events where you pushed yourself above 90.Also, the most recent OData version is 4.0: http://www.odata.org/documentation/odata-version-4-0/
Disclaimer: MS employee, not on OData team however.
I can't imagine there's complex data processing being done that a smartphone can't handle, so I assume the data is being sent back because it's somehow useful or valuable to Microsoft.. but how?
So I'll just post a couple notes:
* auth appears to be using OAuth WRAP (deprecated as a spec, but Microsoft appears to use it for Live logins), so I'm sure could be pretty easily extracted for an API library
* As mentioned the API mostly talks to an endpoint on and the returns are gzipped JSON except for a PUT to prodwus0sts.blob.core.windows.net for the binary log of your actual data (there's a subsequent PUT that then sends the UploadId and some other metadata to the API server)
People have mentioned wanting to avoid sending your data to the cloud completely, and that should be completely possible. The easy way atm is that you could just mitm the endpoints and sync as normal w/ the app.
However, there are at least a couple of people that have successfully reverse-engineered the BTLE protocol, although I haven't seen anything fully published yet. This appears to mostly/primarly be based on digging through the Windows client's DLL.
Pic of source w/ some of the BT protocol: https://twitter.com/JustinAngel/status/527955001436418048
Some BT functions: https://twitter.com/JustinAngel/status/528383467742957571
Methods extracted from the dll: https://twitter.com/JustinAngel/status/529876592479047682
(On OSX, strings gives you significantly less useful information, although apparently it was built by 'ianhowle' and there's a native Objective-C "CargoKit" library)
Note, there's one open source project that has theming and plans on building live sensor output: http://unband.nachmore.com/
And there's a closed source phone already that does access all the sensor data in realtime: http://www.windowsphone.com/en-us/store/app/band-sensor-moni...
I'm not too familiar with Windows Phone, but I believe you can access and decompile an unencrypted XAP if you have a rooted Windows Phone to see what it's doing.
I don't really have much experience/use/access to Windows stuff in general, but for someone w/ that kind of experience, I can't imagine it being very hard to deconstruct.
Making customers depend on online service is a really hostile move. I wonder if the protocol between app and band can be reverse engineered to allow connecting other apps...
Exercise equipment like treadmills should be able to read band data. They can use it for feedback to control speed. That's a common treadmill feature, but it's usually not wireless.