这可能是也可能不是一个灰色地带的主题,尽管我的意图肯定不是,所以我的意图不是激起关于逆向工程主题的道德辩论。

我是一名 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 软件包中实现。

有帮助吗?

解决方案

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

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

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

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

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

其他提示

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

如果你可以,比方说,发现了一系列有Windows版本中发现了十六进制的数字,你也许能够找出“记录”格式。看着它,它似乎包含某种页眉/版本信息,并与十六进制编码数值的一系列记录。

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

我仅运行一个虚拟机为Windows版本,并使用OllyDbg的扭转组装。这就是你最好的选择,而不是在一个二进制文件凝视和猜测哪些变量与哪一个偏移有关。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top