Как бы вы занялись реверс-инжинирингом набора двоичных данных, извлеченных из устройства? - PullRequest
8 голосов
/ 22 сентября 2008

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

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

С чего начать при обратном проектировании данных, когда вы ничего не знаете о структуре?

Ответы [ 8 ]

4 голосов
/ 22 сентября 2008

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

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

1 голос
/ 22 сентября 2008

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

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

http://www.gpsbabel.org/

1 голос
/ 22 сентября 2008

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

0 голосов
/ 18 сентября 2013

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

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

Функции API

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

0 голосов
/ 05 марта 2010

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

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

0 голосов
/ 22 сентября 2008

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

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

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

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

0 голосов
/ 22 сентября 2008

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

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

0 голосов
/ 22 сентября 2008

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

...