Binary 您将如何对从设备中提取的一组二进制数据进行反向工程?

Binary 您将如何对从设备中提取的一组二进制数据进行反向工程?,binary,reverse-engineering,binary-data,Binary,Reverse Engineering,Binary Data,我的一个朋友前几天提出了这个问题,他最近买了一台garmin心率监测仪,它可以跟踪他的心率,并允许他将一天的心率数据上传到电脑上 唯一的问题是garmin USB设备没有linux驱动程序,他设法解释了一些数据,如型号和用户详细信息,并确定存在一些二进制数据表,我们假设这些数据表表示一系列的心率记录和记录时间 当您对结构一无所知时,反向工程数据从何处开始 我建议您首先检查您的原产国的逆向工程的合法性。大多数国家都有非常严格的法律,关于逆向工程设备和代码,什么是允许的,什么是不允许的。你能用电脑扬

我的一个朋友前几天提出了这个问题,他最近买了一台garmin心率监测仪,它可以跟踪他的心率,并允许他将一天的心率数据上传到电脑上

唯一的问题是garmin USB设备没有linux驱动程序,他设法解释了一些数据,如型号和用户详细信息,并确定存在一些二进制数据表,我们假设这些数据表表示一系列的心率记录和记录时间


当您对结构一无所知时,反向工程数据从何处开始

我建议您首先检查您的原产国的逆向工程的合法性。大多数国家都有非常严格的法律,关于逆向工程设备和代码,什么是允许的,什么是不允许的。

你能用电脑扬声器之类的东西合成心跳吗?(我不知道这些设备实际上是如何工作的)。观察二进制结果如何根据不同的输入而变化


拆开设备并检查内部可能也会有所帮助。

我将开始在十六进制编辑器中查看数据,希望是一个了解最常见编码(ASCII、Unicode等)的好编辑器然后试着从你知道它存储的数据中理解它。

我也有同样的问题,最初在谷歌代码中发现了这个项目,该项目旨在为Garmin设备完成一个跨平台版本的工具。。。请参阅:。在该项目的首页上有一个链接,指向您需要的协议,Garmin考虑周到,公开发布了该协议


这里有一个到Garmin I/O规范的直接链接:

正如另一张海报所提到的,反向工程可能会有问题,不是在实践中,而是在合法性方面

也就是说,通过查看这个项目及其代码,你可以找到与你的根本问题相关的所有信息……他们也可以处理跑步者的心率/GPS组合数据


< P> > P>我先看一下设备发送的数据,然后考虑这些数据是如何表示和打包的。p> 我会先采集很多样本,看看是否有任何模式出现,因为心跳是有规律的,这表明它是与心脏本身相关的测量。我还将寻找单调递增的位字段,因为这将暗示某种时间戳

在对什么在哪里形成了一个假设之后,我会编写一个程序来测试它,并绘制结果图,看看它是否有意义。如果确实如此,但不完全如此,那么仔细检查可能会发现您需要一些缩放因子。我也完全有可能在数据看起来像他们的程序所显示的东西之前先处理数据,也就是说,可能需要集成数据点。如果我收到垃圾,它就会回到绘图板上:-)


我也会查看制造商的网站,或者在它们的二进制文件上运行
strings
。我的名单上还列出了在生物医学工程领域工作的人,因为他们可能知道通常使用的协议(如果有的话)。我还将寻找这些协议,看看是否有任何协议可以应用于我看到的数据。

我将首先创建一个十六进制数据转储。我想它可能被两个大小的块的幂所阻塞。开始寻找重复的模式。想想他们可能在发送什么样的数据。他们要么单独记录每个心跳,要么记录传感器以固定间隔发送的任何信息。如果是单个节拍,那么会有一个时间增量(自上次节拍以来),一个持续时间,以及某种类型的最大或平均强度。如果它是固定的间隔,那么它可能是一个简单的读数向量。可能会有某种前导,带有开始时间戳和采样率。您可以尝试自己解码时间戳,也可以尝试简单地将其输入到
ctime()
中,查看它们是否使用标准的绝对时间格式


请记住,许多便宜的A/D转换器只产生12位输出,因此您的读数不太可能大于16位(高阶4位可能用于标记)。我建议重置设备,使其为“空白”,转储并存储内容,然后读取一组读数,记录结果(无论设备通常报告什么),然后再次转储内容,并尝试将记录的结果与“空白”后出现的任何数据相关联转储。

不确定这是否是您正在寻找的,但Garmin已经创建了一个与您的浏览器一起运行的API。似乎OSX和Windows浏览器都受支持。。。我会在谷歌Chromium上试用,看看是否可以用它来代替这种逆向工程

API功能

自动检测连接到计算机的设备访问设备 读取产品名称和软件版本等产品信息 来自受支持的娱乐、健身和娱乐设施的轨道、路线和航路点 导航设备将航迹、路线和航路点写入支持的 娱乐、健身和导航设备从中读取健身数据 支持的健身设备地理编码地址并将其另存为设备 航路点或常用的读写Garmin XML文件(GPX和TCX)如 以及二进制文件。支持大多数Garmin设备(USB、USB 大容量存储,大多数串行设备)支持Internet Explorer, 微软Windows上的Firefox和Chrome。对Safari、Firefox的支持 Mac OS X上的Chrome


谷歌为Garmin设备的特殊问题提供了答案,这是幸运的。然而,这里没有回答这个问题。也许这个问题应该重新考虑一下