Как бы вы выполнили реверс-инжиниринг набора двоичных данных, извлеченных из устройства?

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

Вопрос

Мой друг на днях поднял этот вопрос: он недавно купил устройство для измерения сердечного ритма Garmin, которое отслеживает его частоту сердечных сокращений и позволяет ему загружать статистику сердечного ритма за день на свой компьютер.

Единственная проблема заключается в том, что для USB-устройства Garmin нет драйверов Linux. Ему удалось интерпретировать некоторые данные, такие как номер модели и данные пользователя, и он определил, что существуют некоторые двоичные таблицы данных, которые, как мы предполагаем, представляют собой серию записи его сердечного ритма и время, когда была сделана запись.

С чего начать реверс-инжиниринг данных, если вы ничего не знаете о структуре?

Это было полезно?

Решение

У меня была та же проблема, и я изначально нашел этот проект в Google Code, целью которого является создание кроссплатформенной версии инструментов для устройств Garmin...видеть: http://code.google.com/p/garmintools/.На первой странице этого проекта есть ссылка на нужные вам протоколы, которые Garmin проявила достаточно предусмотрительность, чтобы опубликовать их публично.

А вот прямая ссылка на спецификацию ввода-вывода Garmin: http://www.garmin.com/support/pdf/IOSDK.zip

Другие советы

Я бы начал просматривать данные в шестнадцатеричном редакторе, надеюсь, хорошем, который знает наиболее распространенные кодировки (ASCII, Unicode и т. д.), а затем попытался бы разобраться в них из данных, которые, как вы знаете, они хранят.

Как уже упоминалось в другом авторе, реверс-инжиниринг может быть трудным, но не на практике, а с юридической точки зрения.

При этом вы, возможно, сможете найти все, что связано с вашим основным вопросом, проверив этот проект и его код... и они также обрабатывают комбинированные данные о частоте пульса бегуна и GPS.

http://www.gpsbabel.org/

Я бы посоветовал вам начать с проверки законности реверс-инжиниринга в вашей стране происхождения.В большинстве стран действуют очень строгие законы о том, что разрешено, а что нет в отношении устройств и кода обратного проектирования.

Я бы начал с просмотра того, какие данные отправляет устройство, а затем подумал, как такие данные можно представить и упаковать.

Я бы сначала взял много образцов и посмотрел, проявится ли какая-либо закономерность, поскольку сердцебиение — это нечто регулярное, и это предполагает, что это измерение связано с самим сердцем.Я бы также поискал битовые поля, которые монотонно увеличиваются, поскольку это предполагает некую отметку времени.

Сформировав гипотезу о том, что и где, я бы написал программу для ее проверки, нарисовал бы результаты и посмотрел, имеет ли это смысл.Если это так, но не совсем, то более внимательное рассмотрение, вероятно, покажет, что вам нужны некоторые коэффициенты масштабирования здесь или там.Также вполне возможно, что мне нужно сначала обработать данные, прежде чем они будут выглядеть так, как показывает их программа, т.е.возможно, потребуется интегрировать точки данных.Если я получу мусор, то это снова к чертежной доске :-)

Я бы еще сайт производителя проверил, а может и запустил strings на своих двоичных файлах.В мой список также можно было бы найти человека, который работает в области биомедицинской инженерии, поскольку он, вероятно, знает, какие протоколы обычно используются, если таковые имеются.Я бы также поискал эти протоколы и посмотрел, можно ли их применить к данным, которые я вижу.

Я бы начал с создания шестнадцатеричного дампа данных.Предположим, что он, вероятно, заблокирован в виде кусков размером в степень двойки.Начните искать повторяющиеся узоры.Подумайте, какие данные они, вероятно, отправляют.Либо они записывают каждый удар сердца индивидуально, либо записывают все, что посылает датчик, через определенные промежутки времени.Если это отдельные доли, то будет разница во времени (с момента последней доли), продолжительность и какая-то максимальная или средняя сила.Если это фиксированные интервалы, то, вероятно, это будет простой вектор показаний.Вероятно, будет какая-то преамбула с отметкой времени начала и частотой дискретизации.Вы можете попробовать расшифровать временную метку самостоятельно или просто передать ее в ctime() и посмотрите, используют ли они стандартный формат абсолютного времени.

Имейте в виду, что многие дешевые аналого-цифровые преобразователи выдают только 12-битный выходной сигнал, поэтому ваши показания вряд ли будут больше 16 бит (а старшие 4 бита могут использоваться для флагов).Я бы рекомендовал перезагрузить устройство, чтобы оно было «пустым», сбросить и сохранить содержимое, затем снять набор показаний, записать результаты (независимо от того, что обычно сообщает устройство), затем снова сбросить содержимое и попытаться сопоставить записанные результаты. с любыми данными, появившимися после «пустого» дампа.

Не уверены, что это то, что вы ищете, но компания Garmin создала API, который работает с вашим браузером.Кажется, OSX поддерживается, как и браузеры Windows...Я бы попробовал это из Google Chromium, чтобы посмотреть, можно ли его использовать вместо этого обратного проектирования...

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

Возможности API

Автоматическая обнаружение устройств, подключенных к компьютерному доступу к информации о продукте, такой как название продукта и версии программного обеспечения, маршруты, маршруты и путевые точки с поддерживаемыми рекреационными, фитнес-и навигационными. Данные из поддерживаемых фитнес-устройств Гео-код и сохранения на устройстве в качестве путевой точки или любимых файлов garmin xml (GPX и TCX), а также бинарные файлы.Поддержка большинства устройств Garmin (USB, USB-массовое хранилище, большинство серийных устройств) поддержки Internet Explorer, Firefox и Chrome на Microsoft Windows.Поддержка Safari, Firefox и Chrome на Mac OS X.

Можете ли вы синтезировать сердцебиение, используя что-то вроде компьютерного динамика?(Я понятия не имею, как на самом деле работают такие устройства).Посмотрите, как меняются двоичные результаты в зависимости от разных входных данных.

Разобрать устройство и проверить, что внутри, тоже, вероятно, поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top