binary - seguridad - ingeniería inversa del cerebro
¿Cómo trabajarías en la ingeniería inversa de un conjunto de datos binarios extraídos de un dispositivo? (8)
Un amigo mío sacó a relucir esta pregunta el otro día, recientemente compró un dispositivo Garmin de monitoreo de frecuencia cardíaca que realiza un seguimiento de su ritmo cardíaco y le permite subir sus estadísticas de frecuencia cardíaca por un día a su computadora.
El único problema es que no hay controladores de Linux para el dispositivo USB garmin, ha logrado interpretar algunos de los datos, como el número de modelo y sus detalles de usuario, y ha identificado que existen algunas tablas de datos binarios, que suponemos que representan una serie de grabaciones de su ritmo cardíaco y el tiempo que tomó la grabación.
¿Dónde se inicia uno cuando los datos de ingeniería inversa cuando no sabes nada acerca de la estructura?
¿Puedes sintetizar un latido usando algo así como un parlante de computadora? (No tengo idea de cómo funcionan realmente estos dispositivos). Mira cómo cambian los resultados binarios basados en diferentes entradas.
Descomponer el dispositivo y verificar qué hay dentro probablemente también lo ayude.
Comenzaría a buscar los datos en un editor hexadecimal, con suerte uno bueno que conozca las codificaciones más comunes (ASCII, Unicode, etc.) y luego trate de darle sentido a los datos que sabe que ha almacenado.
Comenzaría por crear un volcado hexadecimal de los datos. Figura que probablemente esté bloqueado en algunos trozos de poder de dos. Comience a buscar patrones repetitivos. Piense qué tipo de datos probablemente envíen. O bien están grabando cada latido del corazón individualmente, o están grabando lo que sea que el sensor esté enviando a intervalos fijos. Si se trata de ritmos individuales, entonces habrá un delta de tiempo (desde el último tiempo), una duración y una potencia máxima o media de algún tipo. Si se trata de intervalos fijos, entonces probablemente será un simple vector de lecturas. Probablemente habrá un preámbulo de algún tipo, con una marca de tiempo de inicio y la frecuencia de muestreo. Puede intentar decodificar la marca de tiempo usted mismo, o puede intentar simplemente alimentarlo a ctime()
y ver si están usando el formato de tiempo absoluto 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 mayores que 16 bits (y los 4 bits de orden superior se pueden usar para indicadores). Recomiendo reiniciar el dispositivo para que esté "en blanco", volcar y almacenar el contenido, luego tomar un conjunto de lecturas, registrar los resultados (lo que normalmente informa el dispositivo), volcar el contenido e intentar correlacionar los resultados grabados con los datos que aparecieron después del volcado "en blanco".
Comenzaría por ver qué datos está enviando el dispositivo y luego consideraré cómo se pueden representar y empaquetar.
Primero capturaría muchas muestras y vería si se presenta algún patrón, ya que el latido del corazón es algo que es regular y eso sugeriría que es una medida relacionada con el corazón mismo. También buscaría campos de bits que aumentan monótonamente, ya que eso sugeriría algún tipo de marca de tiempo.
Después de haber formado una hipótesis para qué es dónde, escribiría un programa para probarlo y graficar los resultados y ver si tiene sentido. Si lo hace pero no del todo, una inspección más cercana probablemente revele que necesita algunos factores de escala aquí o allá. También es completamente posible que necesite procesar los datos primero antes de que se parezca a lo que muestra su programa, es decir, podría necesitar integrar los puntos de datos. Si me sale basura, vuelve al tablero de dibujo :-)
También verificaría el sitio web del fabricante o podría ejecutar 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ían qué protocolos se usan normalmente, si los hay. También buscaría estos protocolos y vería si alguno podría aplicarse a los datos que estoy viendo.
Como se menciona en otro cartel, la ingeniería inversa puede ser peluda, no en la práctica, sino en la legalidad.
Una vez dicho esto, es posible que pueda encontrar todo lo relacionado con su pregunta raíz al revisar este proyecto y su código ... y también manejan los datos combinados de la frecuencia cardíaca / GPS del corredor.
Le sugiero que comience por verificar 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 está relacionado con los dispositivos y códigos de ingeniería inversa.
No estás 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, al igual que los navegadores de Windows ... Lo probaría desde Google Chromium para ver si se puede usar 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 de software Leer pistas, rutas y puntos de referencia de dispositivos recreativos, de fitness y de navegación admitidos Escribir pistas, rutas y puntos de referencia para dispositivos recreativos, de ejercicio y navegación compatibles Leer aptitud datos de dispositivos de entrenamiento compatibles Geocodifique la dirección y guárdela en un dispositivo como waypoint o favorito. Lea y escriba archivos XML de Garmin (GPX y TCX), así como archivos binarios. Compatibilidad con la mayoría de los dispositivos Garmin (USB, almacenamiento masivo USB, la mayoría de los dispositivos en serie) Compatibilidad con Internet Explorer, Firefox y Chrome en Microsoft Windows. Soporte para Safari, Firefox y Chrome en Mac OS X.
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 para los protocolos que necesita, que Garmin fue lo suficientemente considerado para 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