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


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

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

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

8 8

8 ответов:

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

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

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

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

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

Http://www.gpsbabel.org/

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

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

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

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

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

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

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

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

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

Функции API

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

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

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