逆向工程遗留串行端口通信
Reverse engineering legacy serial port communication
我有一个遗留的 (20+ y.o) 软件已被其创建者淘汰。它与医疗设备进行串行端口通信。我现在正在研究反向 "engineering" 通信并在新软件中重新创建它。
我已经能够使用 Serial Port Monitor.
记录软件和设备之间发生的串行通信
我可以查看遗留软件的数据 table 并了解接收到的数据是如何存储在那里的。我的问题是我无法对接收到的数据流进行处理,而且我以前没有串行端口通信的经验,因此想看看 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
打印出来的是Serial Port Monitor,我确实意识到很多控制字符只是简单地设置为'dot'。据我所知,他们似乎并没有清楚地描述正在发生的事情。
请注意,我已经与软件和设备制造商进行了沟通,值得称赞的是,他们试图提供帮助,但无法挖掘出任何相关信息。
我也试图研究二进制文件的补充,但它们更没有意义。
任何和所有有用的提示、技巧或要点将不胜感激。
编辑:
澄清一下;我希望了解串行端口通信的人可能知道,并且可能认识到我不知道的常见压缩技术或编码的用法,这可能会导致流解析为与我可以匹配的数据集的内容请参阅旧版软件。 没有请求代码
就像其他人所说的那样,这是一个猜测工作,它是一个二进制协议,只有原始的通信协议会告诉你确切的细节。
从上面的数据中你可以得出的结论是
- 有一些头字节:16 06 13 06
- 然后是一些命令字节:00 01 或 04 01
- 后跟一些数据:“00 00”或“00 .... 00”
- 后跟 8 位 CRC,最后一个字节为 2 的补码:CA
我有一个遗留的 (20+ y.o) 软件已被其创建者淘汰。它与医疗设备进行串行端口通信。我现在正在研究反向 "engineering" 通信并在新软件中重新创建它。
我已经能够使用 Serial Port Monitor.
记录软件和设备之间发生的串行通信我可以查看遗留软件的数据 table 并了解接收到的数据是如何存储在那里的。我的问题是我无法对接收到的数据流进行处理,而且我以前没有串行端口通信的经验,因此想看看 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
打印出来的是Serial Port Monitor,我确实意识到很多控制字符只是简单地设置为'dot'。据我所知,他们似乎并没有清楚地描述正在发生的事情。
请注意,我已经与软件和设备制造商进行了沟通,值得称赞的是,他们试图提供帮助,但无法挖掘出任何相关信息。 我也试图研究二进制文件的补充,但它们更没有意义。
任何和所有有用的提示、技巧或要点将不胜感激。
编辑:
澄清一下;我希望了解串行端口通信的人可能知道,并且可能认识到我不知道的常见压缩技术或编码的用法,这可能会导致流解析为与我可以匹配的数据集的内容请参阅旧版软件。 没有请求代码
就像其他人所说的那样,这是一个猜测工作,它是一个二进制协议,只有原始的通信协议会告诉你确切的细节。
从上面的数据中你可以得出的结论是
- 有一些头字节:16 06 13 06
- 然后是一些命令字节:00 01 或 04 01
- 后跟一些数据:“00 00”或“00 .... 00”
- 后跟 8 位 CRC,最后一个字节为 2 的补码:CA