¿Cómo harías para aplicar ingeniería inversa a un conjunto de datos binarios extraídos de un dispositivo?

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

Pregunta

Un amigo mío planteó esta pregunta el otro día, recientemente compró un dispositivo de monitorización de frecuencia cardíaca Garmin que realiza un seguimiento de su frecuencia cardíaca y le permite cargar sus estadísticas de frecuencia cardíaca durante un día en su computadora.

El único problema es que no hay controladores de Linux para el dispositivo USB Garmin. Logró interpretar algunos de los datos, como el número de modelo y sus detalles de usuario, y identificó que hay algunas tablas de datos binarios que asumimos que representan una serie de grabaciones de su frecuencia cardíaca y la hora en que se tomó la grabación.

¿Por dónde empezar cuando se realizan ingeniería inversa de datos cuando no se sabe nada sobre la estructura?

¿Fue útil?

Solución

Tuve el mismo problema e inicialmente encontré este proyecto en Google Code que tiene como objetivo completar una versión multiplataforma de herramientas para los dispositivos Garmin...ver: http://code.google.com/p/garmintools/.Hay un enlace en la página principal de ese proyecto a los protocolos que necesita, que Garmin tuvo la consideración de publicar públicamente.

Y aquí hay un enlace directo a la especificación de E/S de Garmin: http://www.garmin.com/support/pdf/IOSDK.zip

Otros consejos

Comenzaría a mirar los datos en un editor hexadecimal, con suerte uno bueno que conozca las codificaciones más comunes (ASCII, Unicode, etc.) y luego trataría de darles sentido a partir de los datos que sabes que tienen almacenados.

Como mencionó otro cartel, la ingeniería inversa puede ser complicada, no en la práctica sino en la legalidad.

Dicho esto, es posible que pueda encontrar todo lo relacionado con su pregunta raíz consultando este proyecto y su código... y también manejan los datos combinados de frecuencia cardíaca/GPS del corredor.

http://www.gpsbabel.org/

Le sugiero que comience verificando la legalidad de la ingeniería inversa en su país de origen.La mayoría de los países tienen leyes muy estrictas sobre lo que está permitido y lo que no con respecto a los códigos y dispositivos de ingeniería inversa.

Comenzaría viendo qué datos envía el dispositivo y luego consideraría cómo se podrían representar y empaquetar dichos datos.

Primero tomaría muchas muestras y vería si se presenta algún patrón, ya que el latido del corazón es algo regular y eso sugeriría que es una medición relacionada con el corazón mismo.También buscaría campos de bits que aumenten monótonamente, ya que eso sugeriría algún tipo de marca de tiempo.

Habiendo formado una hipótesis sobre qué es y dónde, escribiría un programa para probarla y graficar los resultados y ver si tiene sentido.Si es así, pero no del todo, una inspección más cercana probablemente revelará que necesita algunos factores de escala aquí o allá.También es muy posible que necesite procesar los datos primero antes de que se parezcan a lo que muestra su programa, es decir,Es posible que necesite integrar los puntos de datos.Si recibo basura, entonces vuelvo a la mesa de dibujo :-)

También consultaría el sitio web del fabricante, o tal vez ejecutaría strings en sus binarios.Encontrar a alguien que trabaje en el campo de la ingeniería biomédica también estaría en mi lista, ya que probablemente sabría qué protocolos se utilizan normalmente, si corresponde.También buscaría estos protocolos y vería si alguno podría aplicarse a los datos que estoy viendo.

Comenzaría creando un volcado hexadecimal de los datos.Supongo que probablemente esté bloqueado en algunos fragmentos de potencia de dos tamaños.Empiece a buscar patrones repetidos.Piense en qué tipo de datos probablemente estén enviando.O registran cada latido del corazón individualmente o registran lo que envía el sensor a intervalos fijos.Si se trata de latidos individuales, entonces habrá un delta de tiempo (desde el último latido), una duración y una fuerza máxima o promedio de algún tipo.Si se trata de intervalos fijos, probablemente será un simple vector de lecturas.Probablemente habrá algún tipo de preámbulo, con una marca de tiempo de inicio y la frecuencia de muestreo.Puede intentar decodificar la marca de tiempo usted mismo o simplemente intentar enviársela a ctime() y vea si están usando el formato de hora absoluta estándar.

Tenga en cuenta que muchos convertidores A/D baratos solo producen salidas de 12 bits, por lo que es poco probable que sus lecturas sean superiores a 16 bits (y los 4 bits de orden superior pueden usarse para banderas).Recomendaría restablecer el dispositivo para que esté "en blanco", descargar y almacenar el contenido, luego tomar una serie de lecturas, registrar los resultados (lo que el dispositivo normalmente informa), luego descargar el contenido nuevamente e intentar correlacionar los resultados registrados. con los datos que aparecieron después del volcado "en blanco".

No estoy seguro de si esto es lo que estás buscando, pero Garmin ha creado una API que se ejecuta con tu navegador.Parece que OSX es compatible, así como los navegadores de Windows...Lo probaría desde Google Chromium para ver si se puede utilizar en lugar de esta ingeniería inversa...

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

Características de la API

Detección automática de dispositivos conectados a una computadora acceso a la información del producto del dispositivo, como el nombre del producto y la versión del software, las pistas, rutas y puntos de referencia desde dispositivos recreativos, de aptitud física y de navegación compatibles escriben pistas, rutas y puntos de referencia a dispositivos recreativos, de fitness y de navegación compatibles. Datos de la dirección Geo-Code de los dispositivos de acondicionamiento físico compatibles y guarda en un dispositivo como un punto de referencia o favorito de lectura y escritura de archivos Garmin XML (GPX y TCX), así como archivos binarios.Soporte para la mayoría de los dispositivos Garmin (USB, almacenamiento masivo USB, la mayoría de los dispositivos en serie) Soporte para Internet Explorer, Firefox y Chrome en Microsoft Windows.Soporte para Safari, Firefox y Chrome en Mac OS X.

¿Puedes sintetizar los latidos del corazón usando algo como el altavoz de una computadora?(No tengo idea de cómo funcionan realmente esos dispositivos).Observe cómo cambian los resultados binarios según diferentes entradas.

Probablemente también ayudaría destrozar el dispositivo y comprobar qué hay dentro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top