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

mwi*_*ams 9 ruby reverse-engineering binary-data

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

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

替代文字http://www.myomnipod.com/images/pdm-200.jpg

新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
Run Code Online (Sandbox Code Playgroud)

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

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

Jac*_*b B 3

接下来我要做的是尝试找到一些数字。有很多方法可以对数字进行编码:

  • 整数(1、2、4 字节,各种字节顺序)
  • 浮点(各种大小)
  • 定点或其他一些奇怪的格式

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

接下来,您提到时间戳。时间戳通常非常简单,因为它们总是 32 位无符号整数,并且您有一个很好的大概范围(time() +/- 几十万)。所以寻找附近的整数。

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