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

问题描述 投票:9回答:3

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

我是目前正在接受泵疗法的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软件包中使用。

ruby reverse-engineering binary-data
3个回答
3
投票

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

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

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

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

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


1
投票

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

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

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.