从我的胰岛素泵控制器反向设计统计数据文件

时间:2009-06-10 21:35:04

标签: ruby reverse-engineering binary-data

这可能是也可能不是灰色地区的主题,虽然我的意图当然不是,所以我的意图不是激起关于逆向工程主题的道德辩论。

我是目前正在接受泵疗法的1型糖尿病患者。我是OmniPod用户,它是一个一次性的豆荚,粘在我的身体上并分配胰岛素3天。它由个人糖尿病管理员[PDM](见下文)控制,该管理员控制在用餐期间分配多少胰岛素,血糖读数,并且它包含用于计算碳水化合物的食物指数。

alt text
(来源:myomnipod.com

新PDM有一个用于下载数据的USB端口。该软件对Windows用户是免费的(一个名为CoPilot的软件包),但没有Mac支持。

将PDM插入我的Mac后,它就像任何其他USB设备一样安装,并向我提供一个可读卷,上面有一个带有IBF扩展名的单个文件。它的重量为16KB。

我的第一直觉是通过文本编辑器传递它,并呈现了一个非常二进制的文件。然后我通过字符串传递它(见下文)并用十六进制编辑器打开它。虽然除了下面的字符串之外我无法获得太多信息;没有压缩格式的细节或任何东西

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

这个过程的下一步应该是什么?我是一个动态的语言人,因此Ruby的任何资源都很棒,或者Python。是否有任何测试驱动的逆向工程流程?

就我想要获得的数据而言,我想绘制的信息可以获得更多关于我的进展信息(胰岛素摄入量,血糖读数,时间戳);所有这些都可以在Windows软件包中使用。

3 个答案:

答案 0 :(得分:3)

接下来我要做的就是尝试找一些数字。可以通过多种方式对数字进行编码:

  • Ints(1,2,4字节,各种字节顺序)
  • 浮点(各种尺寸)
  • 固定点或其他一些奇怪的格式

您可以通过了解其中的某些数字,因为您可以在屏幕上看到数据。所以我会在文件中查找这些数字(以上面的各种格式)。这应该至少为您提供一些数据。

接下来,您提到时间戳。时间戳通常很容易,因为它们总是32位无符号整数,并且你有一个很好的球场范围(时间()+/-几十万)。所以在那附近找一下。

您可以使用十六进制编辑器手动完成所有这些操作或编写一个小脚本。一旦开始获取一些数据,就要寻找模式。这应该有助于找到更多有趣的领域。祝你好运!

答案 1 :(得分:1)

我开始寻找已知值的十六进制表示。设备(如图所示)是否有屏幕,或者您可以在窗口中查看吗?

如果你能找到你在Windows版本中找到的一系列十六进制数字,你可以找出“记录”格式。看一下,它似乎包含某种标题/版本信息,以及一系列带有十六进制编码数值的记录。

那应该给你一个很好的起点。

答案 2 :(得分:1)

我只是为Windows版本运行一个VM并使用ollydbg反向汇编它。这是你最好的选择,而不是盯着二进制文件并猜测哪些变量与偏移相关联。

使用自己的胰岛素泵可能不是最聪明的想法。假设文件操纵泵。