Обратный инжиниринг файла статистических данных с моего контроллера инсулиновой помпы - PullRequest
9 голосов
/ 11 июня 2009

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

Я диабетик 1 типа, в настоящее время проходящий помповую терапию. Я OmniPod пользователь, это одноразовая капсула, которая прилипает к моему телу и выдает инсулин в течение 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.

Ответы [ 3 ]

3 голосов
/ 11 июня 2009

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

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

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

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

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

1 голос
/ 11 июня 2009

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

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

1 голос
/ 11 июня 2009

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

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

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

...