Come procederesti con il reverse engineering di una serie di dati binari estratti da un dispositivo?

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

Domanda

Un mio amico ha sollevato questa domanda l'altro giorno, ha recentemente acquistato un dispositivo di monitoraggio della frequenza cardiaca Garmin che tiene traccia della sua frequenza cardiaca e gli consente di caricare le statistiche della frequenza cardiaca per un giorno sul suo computer.

L'unico problema è che non ci sono driver Linux per il dispositivo USB di Garmin, è riuscito a interpretare alcuni dei dati, come il numero del modello e i dettagli del suo utente e ha identificato che esistono essenzialmente alcuni database binari che supponiamo rappresentino una serie di registrazioni della sua frequenza cardiaca e del tempo di registrazione.

Da dove si parte quando si invertono i dati tecnici quando non si sa nulla della struttura?

È stato utile?

Soluzione

Ho avuto lo stesso problema e inizialmente ho trovato questo progetto su Google Code che mira a completare una versione multipiattaforma di strumenti per i dispositivi Garmin ... vedi: http://code.google.com/p/garmintools/ . C'è un link sulla prima pagina di quel progetto ai protocolli di cui hai bisogno, che Garmin è stato abbastanza premuroso da rilasciare pubblicamente.

Ed ecco un link diretto alla specifica I / O Garmin: http: // www.garmin.com/support/pdf/IOSDK.zip

Altri suggerimenti

Comincerei a guardare i dati in un editor esadecimale, si spera uno buono che conosca le codifiche più comuni (ASCII, Unicode, ecc.) e quindi proverei a dargli un senso dai dati che sai di avere memorizzato.

Come menzionato in un altro poster, il reverse engineering può essere peloso, non nella pratica ma nella legalità.

Detto questo, potresti essere in grado di trovare tutto ciò che riguarda la tua domanda principale controllando questo progetto e il suo 'codice ... e gestiscono anche la frequenza cardiaca del corridore / i dati combinati GPS

http://www.gpsbabel.org/

Ti suggerirei di iniziare con la verifica della legalità del reverse engineering nel tuo paese di origine. La maggior parte dei paesi ha leggi molto rigide su ciò che è consentito e ciò che non riguarda i dispositivi e il codice di reverse engineering.

Vorrei iniziare a vedere quali dati vengono inviati dal dispositivo, quindi considerare come tali dati potrebbero essere rappresentati e impacchettati.

Vorrei prima catturare molti campioni e vedere se si presenta uno schema, dal momento che il battito cardiaco è qualcosa di normale e che suggerirebbe che è una misurazione correlata al cuore stesso. Cercherei anche campi di bit che sono monotonicamente in aumento, poiché ciò suggerirebbe una sorta di timestamp.

Avendo formulato un'ipotesi su ciò che è dove, scriverei un programma per testarlo e rappresentare graficamente i risultati e vedere se ha senso. Se lo fa, ma non del tutto, allora un'ispezione più ravvicinata probabilmente rivelerà che hai bisogno di alcuni fattori di ridimensionamento qui o là. È anche del tutto possibile che io debba elaborare i dati prima che assomiglino a qualcosa che mostra il loro programma, vale a dire potrebbe essere necessario integrare i punti dati. Se ricevo immondizia, ritorna al tavolo da disegno :-)

Vorrei anche controllare il sito Web del produttore o forse eseguire stringhe sui loro file binari. Trovare qualcuno che lavora nel campo dell'ingegneria biomedica sarebbe anche nella mia lista, poiché probabilmente saprebbero quali protocolli vengono generalmente utilizzati, se presenti. Vorrei anche cercare questi protocolli e vedere se qualcuno potesse essere applicato ai dati che vedo.

Comincerei creando un dump esadecimale dei dati. Figura probabilmente è bloccata in alcuni blocchi di potenza di due dimensioni. Inizia a cercare schemi ripetuti. Pensa al tipo di dati che probabilmente stanno inviando. O stanno registrando ogni battito cardiaco singolarmente o stanno registrando qualunque cosa il sensore stia inviando a intervalli fissi. Se si tratta di singoli ritmi, allora ci sarà un delta temporale (dall'ultimo battito), una durata e una forza massima o media di qualche tipo. Se è a intervalli fissi, probabilmente sarà un semplice vettore di letture. Probabilmente ci sarà un preambolo di qualche tipo, con un timestamp di inizio e la frequenza di campionamento. Puoi provare a decodificare tu stesso il timestamp, oppure potresti semplicemente dargli da mangiare a ctime () e vedere se stanno usando il formato orario assoluto standard.

Tieni presente che molti convertitori A / D economici producono solo uscite a 12 bit, quindi è improbabile che le tue letture siano più grandi di 16 bit (e i 4 bit di ordine elevato possono essere usati per i flag). Consiglio di reimpostare il dispositivo in modo che sia "vuoto", scaricando e archiviando i contenuti, quindi prendendo una serie di letture, registrando i risultati (qualunque cosa il dispositivo normalmente segnala), quindi scarichi nuovamente i contenuti e provi a correlare i dati registrati risultati con qualsiasi dato apparso dopo il "vuoto" discarica.

Non sei sicuro se questo è quello che stai cercando, ma Garmin ha creato un'API che funziona con il tuo browser. Sembra che OSX sia supportato, così come i browser Windows ... Lo proverei da Google Chromium per vedere se può essere usato al posto di questo reverse engineering ...

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

Funzioni API

  

Rilevamento automatico dei dispositivi collegati a un computer Accesso al dispositivo   informazioni sul prodotto come nome del prodotto e versione del software Leggi   tracce, rotte e waypoint da supporto ricreativo, fitness e   dispositivi di navigazione Scrivi tracce, rotte e waypoint su supportati   dispositivi ricreativi, fitness e di navigazione Leggi i dati di fitness da   dispositivi fitness supportati Indirizzo con codice geografico e salvataggio su un dispositivo come a   waypoint o preferito Leggere e scrivere file XML Garmin (GPX e TCX) come   così come i file binari. Supporto per la maggior parte dei dispositivi Garmin (USB, USB   archiviazione di massa, la maggior parte dei dispositivi seriali) Supporto per Internet Explorer,   Firefox e Chrome su Microsoft Windows. Supporto per Safari, Firefox   e Chrome su Mac OS X.

Puoi sintetizzare un battito cardiaco usando qualcosa come un altoparlante del computer? (Non ho idea di come funzionino effettivamente tali dispositivi). Guarda come i risultati binari cambiano in base a input diversi.

Distruggere il dispositivo e scoprire cosa c'è dentro probabilmente sarebbe di aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top