Реверс-инжиниринг файла статистических данных контроллера инсулиновой помпы

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

Вопрос

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

Я диабетик 1 типа, в настоящее время прохожу помповую терапию.Я ОмниПод Пользователь, это одноразовая капсула, которая прикрепляется к моему телу и выдает инсулин в течение 3 дней.Он контролируется личным диабетическим менеджером (PDM) (см. ниже), который контролирует, сколько инсулина вводится во время еды, контролирует показания сахара и содержит пищевой индекс для подсчета углеводов на ходу.

alt text
(источник: myomnipod.com)

Новый PDM имеет порт USB для загрузки данных.Программное обеспечение бесплатно для пользователей Windows (пакет CoPilot), но поддержка Mac отсутствует.

После подключения PDM к моему Mac он смонтировался, как любое другое USB-устройство, и предоставил мне читаемый том с одним файлом с расширением IBF.Он весит 16 КБ.

Моим первым инстинктом было пропустить его через текстовый редактор, и мне представили очень двоичный файл.Затем я пропустил его через строки (см. ниже) и открыл в шестнадцатеричном редакторе.Хотя я не смог получить много информации, кроме строк ниже;никаких подробностей о формате сжатия или чего-то еще.

$ strings omnipoddata.ibf 
Insulet
OmniPod
basal 1
Post-meal
e-meal
Pre-meal
e-bedtime
Pre-bedtime
.(@P
.(@P
.(@P

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

Что касается данных, которые я хочу получить, это информация, которую я хотел бы нанести на график, чтобы получить больше информации о моем прогрессе (прием инсулина, показатели сахара в крови, временные метки);все это возможно в пакете программного обеспечения Windows.

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

Решение

Дальше я бы попытался найти несколько чисел.Существует несколько способов кодирования чисел:

  • Ints (1, 2, 4 байта, различный порядок байтов)
  • Плавающая точка (разных размеров)
  • Фиксированная точка или какой-то другой странный формат

У вас есть преимущество в том, что вы знаете некоторые числа, которые там будут, поскольку вы можете видеть данные на экране.Поэтому я искал эти числа в файле (в различных форматах, указанных выше).Это должно дать вам как минимум некоторые данные.

Далее вы упоминаете временные метки.Временные метки обычно довольно просты, потому что они всегда представляют собой 32-битные беззнаковые целые числа, и у вас есть хороший приблизительный диапазон (time() +/- несколько 100 000).Так что ищите целые рядом.

Вы можете сделать все это вручную с помощью шестнадцатеричного редактора или написать небольшой скрипт.Как только вы начнете получать некоторые данные, ищите закономерности.Это должно очень помочь в поиске более интересных полей.Удачи!

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

Я бы начал искать шестнадцатеричное представление известных значений.Есть ли у устройства (как на фото) экран или можно посмотреть в windows?

Если вы можете, скажем, найти серию чисел в шестнадцатеричном формате, которую вы нашли в версии Windows, возможно, вы сможете определить формат «записи».Глядя на него, кажется, что он содержит какую-то информацию о заголовке/версии и серию записей с числовыми значениями в шестнадцатеричном коде.

Это должно дать вам хорошую отправную точку.

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

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

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