Como você iria sobre engenharia reversa de um conjunto de dados binários extraídos de um dispositivo?

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

Pergunta

Um amigo meu trouxe até este questiont ele outro dia, ele comprou recentemente um dispositivo moniter freqüência cardíaca garmin que mantém o controle de sua taxa de coração e lhe permite fazer upload de suas estatísticas de frequência cardíaca por um dia ao seu computador.

O único problema é que não há drivers Linux para o dispositivo Garmin USB, ele conseguiu interpretar alguns dos dados, como o número do modelo e seus detalhes do usuário e identificou que existem algumas datatables binários essencialmente que assumimos representar uma série de gravações de sua frequência cardíaca e o tempo que a gravação foi tirada.

Por onde começar quando os dados de engenharia reversa, quando você não sabe nada sobre a estrutura?

Foi útil?

Solução

Eu tive o mesmo problema e, inicialmente, encontrou esse projeto no Google Code, que visa completar uma versão multi-plataforma de ferramentas para os dispositivos Garmin ... ver: http://code.google.com/p/garmintools/ . Há um link na primeira página desse projeto para os protocolos que você precisa, que Garmin foi suficiente pensativo para liberar publicamente.

E aqui está um link direto para o Garmin I / O especificação: http: // www.garmin.com/support/pdf/IOSDK.zip

Outras dicas

eu começar a olhar para os dados em um editor hexadecimal, espero um bom aquele que sabe mais codificações comuns (ASCII, Unicode, etc.) e, em seguida, tentar fazer sentido fora dos dados que você sabe que tem armazenado.

Como outra com dossel mencionados, engenharia reversa pode ser peludo, não na prática, mas na legalidade.

Dito isto, você pode ser capaz de encontrar tudo relacionado à sua pergunta raiz na mão, verificando este projeto e seu código ... e eles fazem lidar com a frequência cardíaca do corredor / GPS Dados de combinação bem

http://www.gpsbabel.org/

Eu sugiro que você comece com a verificação da legalidade de engenharia reversa em seu país de origem. A maioria dos países tem leis muito rígidas sobre o que é permitido eo que não é sobre dispositivos de engenharia reversa e código.

Gostaria de começar por ver o que os dados estão sendo enviados pelo dispositivo, em seguida, considere como tais dados poderiam ser representados e embalado.

Gostaria em primeiro lugar capturar muitas amostras, e ver se qualquer padrão se apresenta, uma vez batida do coração é algo que é regular e que sugerem que é medida relacionada ao próprio coração. Eu também olhar para os campos de bits que são monotonicamente crescentes, como que possa sugerir algum tipo de carimbo de tempo.

Tendo formado uma hipótese para o que é onde eu iria escrever um programa para testá-lo e representar graficamente os resultados e ver se faz sentido. Se isso acontecer, mas não completamente, inspeção, em seguida, mais perto provavelmente revelaria você precisa de alguns fatores de escala aqui ou ali. Também é perfeitamente possível necessidade I para processar os dados antes de ele se parece nada com o que seu programa está mostrando, ou seja, pode precisar de integrar os pontos de dados. Se eu pegar o lixo, então ele está de volta à prancheta de desenho: -)

Também gostaria de verificar o site do fabricante, ou talvez executar strings em seus binários. Encontrar alguém que trabalha na área de engenharia biomédica também seria na minha lista, como eles provavelmente sabem o que os protocolos são normalmente utilizados, se houver. Também gostaria de olhar para estes protocolos e ver se algum poderia ser aplicada para os dados que eu estou vendo.

Eu começaria criando uma hexadecimal dos dados. Figura é provavelmente bloqueado em alguns pedaços potência de dois porte. Comece procurando repetir padrões. Pense sobre o tipo de dados que provavelmente está enviando. Ou eles estão gravando cada batimento cardíaco individualmente, ou eles estão gravando tudo o que o sensor está enviando em intervalos fixos. Se é batidas individuais, então não vai ser um delta de tempo (desde a última batida), uma duração, e uma força máxima ou média de algum tipo. Se for intervalos fixos, então ele provavelmente vai ser um vetor simples de leituras. Provavelmente vai haver um preâmbulo de algum tipo, com um timestamp de início e a taxa de amostragem. Você pode tentar decodificar o timestamp si mesmo, ou você pode tentar simplesmente alimentando-o para ctime() e ver se eles estão usando o formato tempo absoluto padrão.

Tenha em mente que muitos Um barato / conversores D só produzem saídas de 12 bits, assim que suas leituras não são susceptíveis de ser maior do que 16 bits (e o alto-ordem 4 bits pode ser usado para bandeiras). Eu recomendo redefinir o dispositivo de modo que é "em branco", dumping e armazenar o conteúdo, em seguida, tomar um conjunto de leituras, registrar os resultados (qualquer que seja o dispositivo normalmente relatórios), em seguida, despejar o conteúdo novo e tentar correlacionar os resultados registrados com todos os dados que apareceram após o despejo "em branco".

Não tem certeza se é isso que você está procurando, mas Garmin criou uma API que é executado com o seu browser. Parece OSX é suportado, bem como navegadores do Windows ... Quero experimentar do Google Chromium para ver se ele pode ser usado em vez de esta engenharia reversa ...

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

API Características

Auto-detecção de dispositivos conectados a um acesso ao computador para o dispositivo informações sobre o produto, como nome do produto e versão do software Leia trilhas, rotas e waypoints de apoiado lazer, fitness e dispositivos de navegação Escrever trilhas, rotas e waypoints para suportadas , dispositivos de fitness e de navegação ler dados de fitness de lazer de dispositivos de fitness suportados endereço Geo-código e salvar para um dispositivo como um arquivos XML waypoint ou ler favorito e escrever Garmin (GPX e TCX) como bem como arquivos binários. Suporte para a maioria dos dispositivos Garmin (USB, USB de armazenamento em massa, a maioria dos dispositivos de série) Suporte para Internet Explorer, Firefox e Chrome no Microsoft Windows. Suporte para Safari, Firefox e Chrome no Mac OS X.

Você pode sintetizar um batimento cardíaco usando algo como um alto-falante do computador? (Eu não tenho nenhuma idéia de como esses dispositivos realmente funciona). Veja como os resultados binários mudar com base em diferentes entradas.

Rasgando o dispositivo e verificar o que está dentro provavelmente ajudaria também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top