代码之家  ›  专栏  ›  技术社区  ›  mwilliams

从我的胰岛素泵控制器反向工程一个统计数据文件

  •  9
  • mwilliams  · 技术社区  · 15 年前

    这可能是一个灰色地带的主题,也可能不是,尽管我的意图肯定不是,所以我的意图是不引发一场关于逆向工程的伦理辩论。

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

    alt text 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
    

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

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

    3 回复  |  直到 11 年前
        1
  •  3
  •   Jacob B    15 年前

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

    • ints(1、2、4字节,不同的endianness)
    • 浮点(各种大小)
    • 固定点或其他奇怪的格式

    你有一个优势,那就是知道一些数字将在那里,因为你可以看到屏幕上的数据。所以我会在文件中查找这些数字(以上述各种格式)。这至少应该给你一些数据。

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

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

        2
  •  1
  •   Alex Taylor    15 年前

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

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

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

        3
  •  1
  •   Unknown    15 年前

    我只需要运行一个适用于Windows版本的虚拟机,然后使用Ollydbg对其进行反向组装。这是您的最佳选择,而不是盯着一个二进制文件,猜测哪些变量与偏移量相关。

    不过,弄乱自己的胰岛素泵可能不是最聪明的主意。假设文件操纵泵。