This morning I hooked up both Facedancer20’s. One acts as a USB host, the other acts as a USB slave.
I’ve found a bug in the Facedancer host code but it’s still in development anyways. Regardless of that, I have to say, the Facedancer is a really, really nice USB development tool. Being able to use Python on both ends of the connection makes debugging really easy.
It also makes reverse engineering easier as well. I’ve gotten the Facedancer to act as a Nike FuelBand. When I plug in the Facedancer, the Nike desktop app launches, sends some class requests to the Facedancer, and then gives an error saying to replug the FuelBand. And this makes sense because all I’ve done is duplicated the USB descriptors. I haven’t written any of the actual emulation code.
But, so far, I’ve learned a hell of a lot about USB and Python.
I may also have found a few bugs in Nike’s USB driver but I haven’t sat down with that part of this project quite yet. There is already enough information out in the world about how insecure Nike’s RESTFUL API’s are… but they’ve released all of that as an SDK now anyways. I wonder what they’ve missed on the USB end…
I love learning this kind of stuff…
Also, when I get further along on this Nike FuelBand project I’ll post the code and information I’ve got on how it works…
Facedancers back to back and the Nike FuelBand they’re starting to emulate:
