【发布时间】:2017-10-18 08:43:45
【问题描述】:
我有一个已被其创建者淘汰的旧版(20 多岁)软件。它执行与医疗设备的串行端口通信。我现在正在研究反向“工程”通信并在新软件中重新创建它。
我已经能够使用Serial Port Monitor记录软件和设备之间发生的串行通信。
我可以查看旧版软件的数据表,了解接收到的数据是如何存储在那里的。我的问题是我无法确定接收到的数据流的头部或尾部,而且我以前没有串行端口通信的经验,因此想看看 SO 的伟大集体是否可以帮助我朝着正确的方向前进(尽管在这一点上,我几乎放弃了希望这是以正确的方式解码数据这样简单的事情,并开始认为我需要遗留软件的内部工作才能理解流)。
技术细节:
- 9600 波特率
- 8字长
- 0 奇偶校验
有效负载以两个不同的流到达:
[17/05/2017 01:28:30] Written data (COM3)
16 06 13 06 00 01 00 00 ca ........Ê
[17/05/2017 01:28:30] Read data (COM3)
16 06 13 06 00 02 00 72 0a a7 03 00 00 04 4b 7a .......r.§....Kz
00 70 78 42 00 00 00 00 00 00 00 0f 02 1d 07 e0 .pxB...........à
04 1b 07 e1 00 9b 0b 1e 00 2e 8d 98 c6 0c 00 00 ...á.›....˜Æ...
00 00 0b 1b 00 21 00 00 1e b1 1e ae 00 03 00 00 .....!...±.®....
61 39 00 00 02 c6 00 57 00 00 00 02 00 00 00 01 a9...Æ.W........
00 08 00 03 00 00 4e 4f 50 51 52 53 54 55 56 57 ......NOPQRSTUVW
58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 XYZ[\]^_`abcdefg
68 69 6a 6b 6c 6d 6e 6f b0 71 51 hijklmno°qQ
[17/05/2017 01:28:30] Written data (COM3)
16 06 13 06 04 01 00 00 c6 ........Æ
[17/05/2017 01:28:30] Read data (COM3)
16 06 13 06 04 02 00 ce 00 03 08 1c 11 05 07 e1 .......Î.......á
00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .2..............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 01 00 03 00 01 00 03 ................
00 00 00 00 00 00 00 00 00 32 00 06 00 06 00 08 .........2......
00 06 00 06 00 06 00 06 00 06 00 06 00 06 00 07 ................
00 07 00 06 00 08 00 07 00 06 00 06 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 02 00 03 00 02 ................
00 03 00 00 00 00 00 00 00 00 00 2d 00 06 00 07 ...........-....
00 06 00 06 00 08 00 06 00 08 00 06 00 06 00 07 ................
00 06 00 06 00 06 00 06 00 06 00 06 00 06 00 00 ................
00 00 00 00 00 00 56 ......V
打印输出来自串行端口监视器,我确实意识到很多控制字符都简单地设置为“点”。据我所知,他们似乎并没有清楚地了解正在发生的事情。
请注意,我已经与软件和设备制造商进行了沟通,值得称赞的是,他们试图提供帮助,但无法挖掘任何相关信息。 我也试图研究二进制文件的补码,但它们的意义更小。
任何和所有有用的提示、技巧或要点都将不胜感激。
编辑:
为了澄清;我希望具有串行端口通信知识的人可能知道并可能认识到我不知道的常见压缩技术或编码的用法,这可能会导致流解析为与我可以的数据集匹配的东西参见旧版软件。 没有请求代码
【问题讨论】:
-
这是一项疯狂的任务,为了更好地创造性地实现目的而破解。自己写代码。周围有很多材料。从这里开始,例如“C++中的串口(RS -232)连接” - stackoverflow.com/questions/15794422/…
-
如果我什至无法理解我收到的流,我真的看不出如何创造性地解决问题。而且我猜您并没有完全理解我的问题,因为我确实是自己编写代码。但是,我正在寻找数据流上的输入以及可能已应用的编码(或其他常见的串行通信数据操作),因为我似乎无法将其与旧版软件的数据输出相匹配吐出来。
-
是什么让您认为“以正确的方式解码数据”必然很简单?使用串行端口监视器是一个很好的举措,看起来您已经成功地处理了它的串行端口部分。看起来唯一剩下的(是的,这是一件大事)是设备的接口协议。这完全由医疗设备定义。你被困在寻找文档或逆向工程上。您似乎专注于字符并期待 ASCII 字符。这看起来更像是一个二进制接口。您可能需要考虑原始数字,并且不要忘记字节序。
-
你说得对,它并不简单。就我而言,用词不当。在用尽我有限的知识库后,我想看看是否有更多经验的人能够提出一些对我来说并不明显的建议。事实上,我想到我可能不得不开始运行多个稍微修改过的流,查看它们中的差异并将其与旧软件中的数据表进行匹配,而不是希望有一个简单的解决方案。
-
“如果我什至无法理解我正在接收的流,我真的无法理解如何创造性地解决问题。” - 我想,每个人的第一个想法是 - “你一直在寻找文档”。否则,使用某人的疯狂(或有教育意义的)猜测来解决破解一些“黑匣子”的任务似乎更加疯狂。
标签: c++ serial-port reverse-engineering hexdump