对我的胰岛素泵控制器的统计数据文件进行逆向工程
这可能是也可能不是一个灰色地带的主题,尽管我的意图肯定不是,所以我的意图不是激起关于逆向工程主题的道德辩论。
我是一名 1 型糖尿病患者,目前正在接受泵疗法。 我是 OmniPod 用户,它是一个一次性豆荚,可以粘附在我的身体上并分配胰岛素 3 天。 它由个人糖尿病管理器 [PDM](如下所示)控制,该管理器控制进餐时分配的胰岛素量、血糖读数,并且包含即时计算碳水化合物的食物指数。
(来源: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 软件包中实现。
This may or may not be a grey area subject, though my intentions are certainly not, so my intention is not to stir up an ethical debate on the topic of reverse engineering.
I'm a type 1 diabetic currently undergoing pump therapy. I'm an OmniPod user, it's a disposable pod that adheres to my body and dispenses insulin for 3 days. It's controlled by a personal diabetes manager [PDM] (seen below) which controls how much insulin to dispense during meals, bloor sugar readings, and it contains a food index for carb counting on the go.
(source: myomnipod.com)
The new PDM has a USB port for the downloading of data. The software is free for Windows users (a package called CoPilot), but there is no Mac support.
Upon plugging the PDM into my Mac, it mounted like any other USB device would and presented me with a readable volume with a single file on it with an IBF extension. It weighs in at 16KB.
My first instinct was to pass it through a text editor and was presented with a very binary looking file. I then passed it through strings (see below) and opened it up with a hex editor. Though I couldn't gain much information aside from the strings below; no compression format details or anything.
$ strings omnipoddata.ibf
Insulet
OmniPod
basal 1
Post-meal
e-meal
Pre-meal
e-bedtime
Pre-bedtime
.(@P
.(@P
.(@P
What should be my next step in this process? I'm a dynamic language guy, so any resources for Ruby would be great, or Python. Are there any test driven reverse engineering processes?
As far as the data I'm looking to obtain, it's information I would like to chart to gain more information on my progress (insulin intake, blood sugar readings, timestamps); all of which is possible in the Windows software package.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
接下来我要做的是尝试找到一些数字。 数字的编码方式有很多种:
您的优势是了解一些将要编码的数字在那里,因为您可以在屏幕上看到数据。 所以我会在文件中查找这些数字(采用上面的各种格式)。 这至少应该为您提供一些数据。
接下来,您提到时间戳。 时间戳通常非常简单,因为它们总是 32 位无符号整数,并且您有一个很好的大概范围(time() +/- 几十万)。 所以寻找附近的整数。
您可以使用十六进制编辑器手动完成所有这些操作或编写一个小脚本。 一旦开始获取一些数据,就寻找模式。 这对于寻找更有趣的领域应该有很大帮助。 祝你好运!
What I would do next is try and find some numbers. There's a bunch of ways the numbers could be encoded:
You have the advantage of knowing some numbers that are going to be in there, since you can see the data on the screen. So I'd look for those numbers in the file (in the various formats above). This should give you some data, at minimum.
Next, you mention timestamps. Timestamps are usually pretty easy, because they're invariably 32-bit unsigned ints, and you have a good ballpark range (time() +/- a few 100,000). So look for ints near there.
You can do all this by hand with a hex editor or write a little script. Once you start getting some data out, look for patterns. This should help a lot with finding more interesting fields. Good luck!
我开始寻找已知值的十六进制表示。 该设备(如图所示)是否有屏幕,或者您可以在窗口中查看吗?
例如,如果您可以找到在 Windows 版本中找到的一系列十六进制数字,您也许能够找出“记录”格式。 看看它,它似乎包含某种标头/版本信息,以及一系列带有十六进制编码数值的记录。
这应该给你一个很好的起点。
I'd start looking for hex-representation of known values. Does the device (as pictured) have a screen, or can you look in windows?
If you can, say, find a series of numbers in hex that you have found inside the Windows version, you might be able to figure out the 'record' format. Looking at it, it seems to contain some kind of header/version information, and a series of records with hex-encoded numeric values.
That should give you a good starting point.
我只会运行一个 Windows 版本的虚拟机,并使用 ollydbg 对其进行反汇编。 这是最好的选择,而不是盯着二进制文件并猜测哪些变量与偏移量相关。
不过,弄乱自己的胰岛素泵可能不是最聪明的主意。 假设该文件操纵泵。
I would just run a VM for the windows version and use ollydbg to reverse assemble it. That is your best bet instead of staring at a binary file and guessing which variables correlate with what offset.
Messing with your own insulin pump is probably not the smartest idea though. Assuming that the file manipulates the pump.