Comment procéderiez-vous à propos du reverse engineering d'un ensemble de données binaires extraites d'un périphérique?

StackOverflow https://stackoverflow.com/questions/115836

Question

Un de mes amis a soulevé cette question l'autre jour, il a récemment acheté un appareil de surveillance du rythme cardiaque Garmin qui permet de suivre sa fréquence cardiaque et lui permet de télécharger ses statistiques de fréquence cardiaque pendant un jour sur son ordinateur.

Le seul problème est qu’il n’existe pas de pilote Linux pour le périphérique USB garmin, il est parvenu à interpréter certaines données, telles que le numéro de modèle et ses détails d’utilisateur. Il a en effet identifié qu’il existe certaines données binaires que nous supposons représenter. une série d'enregistrements de son rythme cardiaque et de l'heure à laquelle l'enregistrement a été effectué.

Où commence-t-on quand on reverse engineering de données sans rien connaître de la structure?

Était-ce utile?

La solution

J'ai eu le même problème et j'ai initialement trouvé ce projet chez Google Code qui vise à compléter une version multiplate-forme d'outils pour les appareils Garmin ... voir: http://code.google.com/p/garmintools/ . Sur la page de couverture de ce projet, il existe un lien vers les protocoles dont vous avez besoin, que Garmin a eu la gentillesse de publier publiquement.

Et voici un lien direct vers la spécification d’E / S Garmin: http: // www.garmin.com/support/pdf/IOSDK.zip

Autres conseils

Je commencerais à regarder les données dans un éditeur hexadécimal, espérons-le bon, qui connaît les codages les plus courants (ASCII, Unicode, etc.), puis à essayer de les comprendre à partir des données que vous connaissez déjà. stocké.

Comme l'a mentionné une autre affiche, l'ingénierie inverse peut être complexe, non pas dans la pratique mais dans la légalité.

Cela étant dit, vous pourrez peut-être trouver tout ce qui concerne votre question fondamentale en consultant ce projet et son code ... et ils gèreront également les données de fréquence cardiaque / GPS du coureur du coureur

http://www.gpsbabel.org/

Je vous suggérerais de commencer par vérifier la légalité de l'ingénierie inverse dans votre pays d'origine. La plupart des pays ont des lois très strictes sur ce qui est permis et ce qui ne l’est pas sur les dispositifs et le code de reverse engineering.

Je commencerais par voir quelles données sont envoyées par le périphérique, puis à examiner comment ces données pourraient être représentées et compressées.

Je voudrais d’abord capturer de nombreux échantillons et voir si un motif quelconque se présente, car les battements du coeur sont quelque chose de régulier, ce qui donnerait à penser qu’il s’agit d’une mesure liée au cœur lui-même. Je rechercherais également des champs de bits qui augmentent de façon monotone, car cela suggérerait une sorte d’horodatage.

Ayant formulé une hypothèse sur ce qui se trouve où, je voudrais écrire un programme pour le tester, en représenter graphiquement les résultats et voir si cela a un sens. Si c'est le cas mais pas tout à fait, alors une inspection plus minutieuse révélerait probablement que vous avez besoin de facteurs d'échelle ici ou là. Il est également tout à fait possible que je doive traiter les données avant que cela ressemble à ce que leur programme montre, c’est-à-dire qu’il faudra peut-être intégrer les points de données. Si je sors des ordures, alors il est de retour à la planche à dessin: -)

Je voudrais également consulter le site Web du fabricant, ou peut-être exécuter des chaînes sur leurs fichiers binaires. Trouver quelqu'un qui travaille dans le domaine du génie biomédical serait également sur ma liste, car ils sauraient probablement quels protocoles sont généralement utilisés, le cas échéant. Je voudrais également rechercher ces protocoles et voir s’il est possible d’appliquer ceux-ci aux données que je vois.

Je commencerais par créer un vidage hexadécimal des données. Figure, il est probablement bloqué dans certains morceaux de taille deux. Commencez à chercher des motifs répétitifs. Pensez au type de données qu'ils envoient probablement. Soit ils enregistrent chaque battement de cœur individuellement, soit ils enregistrent tout ce que le capteur envoie à intervalles fixes. Si ce sont des temps individuels, il y aura alors un delta temporel (depuis le dernier temps), une durée et une force maximale ou moyenne quelconque. Si c'est des intervalles fixes, alors ce sera probablement un simple vecteur de lectures. Il y aura probablement un préambule, avec un horodatage de départ et le taux d'échantillonnage. Vous pouvez essayer de décoder l'horodatage vous-même ou simplement l'envoyer dans ctime () et voir s'ils utilisent le format d'heure absolu standard.

N'oubliez pas que de nombreux convertisseurs A / N bon marché ne produisent que des sorties 12 bits. Il est donc peu probable que vos lectures soient supérieures à 16 bits (et les 4 bits de poids fort peuvent être utilisés pour les indicateurs). Je vous recommande de réinitialiser le périphérique afin qu'il soit "vide", de stocker et de stocker le contenu, puis de prendre une série de lectures, d'enregistrer les résultats (quel que soit le périphérique normalement signalé), puis de sauvegarder le contenu à nouveau et d'essayer de corréler le contenu enregistré. résultats avec toutes les données apparaissant après le "blanc". dump.

Vous ne savez pas si c'est ce que vous recherchez, mais Garmin a créé une API qui s'exécute avec votre navigateur. Il semble que OSX soit supporté, ainsi que les navigateurs Windows ... Je voudrais l'essayer sur Google Chromium pour voir s'il peut être utilisé à la place de cette ingénierie inverse ...

http://developer.garmin.com/web-device/garmin -communicator-plugin /

Fonctionnalités de l'API

  

Détection automatique des périphériques connectés à un ordinateur Accès au périphérique   Informations sur le produit, telles que nom du produit et version du logiciel Lire   tracés, itinéraires et points de cheminement de loisirs, de fitness et   appareils de navigation Écrire des traces, des itinéraires et des points de passage sur supportés   appareils de loisirs, de fitness et de navigation Lire les données de fitness de   appareils de fitness pris en charge adresse Geo-code et enregistrer sur un appareil en tant que   Lire et écrire des fichiers XML Garmin (GPX et TCX) en tant que   ainsi que des fichiers binaires. Prise en charge de la plupart des périphériques Garmin (USB, USB   stockage de masse, la plupart des périphériques série) Prise en charge d'Internet Explorer,   Firefox et Chrome sous Microsoft Windows. Prise en charge de Safari, Firefox   et Chrome sur Mac OS X.

Pouvez-vous synthétiser un battement de coeur en utilisant quelque chose comme un haut-parleur d'ordinateur? (Je ne sais pas du tout comment ces dispositifs fonctionnent réellement). Regardez comment les résultats binaires changent en fonction de différentes entrées.

Déchirer l'appareil et vérifier ce qu'il y a à l'intérieur aiderait probablement aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top