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

Ruby 从我的胰岛素泵控制器反向工程统计数据文件,ruby,reverse-engineering,binary-data,Ruby,Reverse Engineering,Binary Data,这可能是也可能不是一个灰色地带的主题,尽管我的意图肯定不是,所以我的意图不是要激起一场关于逆向工程主题的道德辩论 我是1型糖尿病患者,目前正在接受泵治疗。我是一个使用者,它是一个一次性的豆荚,粘在我的身体上,并分配胰岛素3天。它由个人糖尿病管理者[PDM](见下文)控制,该管理者控制在进餐期间分配多少胰岛素、血糖或糖分读数,并且它包含一个计算运动中碳水化合物的食物指数 (来源:) 新PDM具有用于下载数据的USB端口。该软件对Windows用户是免费的(一个名为CoPilot的软件包),但不支

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

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


(来源:)

新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软件包中实现。

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

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


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

我接下来要做的就是试着找出一些数字。数字的编码方式有很多种:

  • 整数(1、2、4字节,各种尾数)
  • 浮点(各种大小)
  • 固定点或其他一些奇怪的格式
你有知道一些数字的优势,因为你可以在屏幕上看到数据。因此,我会在文件中查找这些数字(以上述各种格式)。这至少会给你一些数据

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


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

我只需要为windows版本运行一个VM,然后使用ollydbg对其进行反向组装。这是最好的选择,而不是盯着二进制文件猜测哪些变量与什么偏移量相关


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

该数据文件不在我的PDM中,仅供统计使用。我不会将文件传输回PDM,也不会干扰PDM的功能。至于虚拟机,是的,我可以,但是,我不打算为此购买Windows许可证。我的女朋友也是糖尿病患者,你解决了吗,因为我也想对文件进行反向工程