逆向工程旧串口通信

时间:2017-05-18 13:39:28

标签: c++ serial-port reverse-engineering hexdump

我有一个传统(20多岁)的软件,它的创作者已经落日了。它与医疗设备执行串行端口通信。我现在正在研究反向“工程”通信并在一个新的软件中重新创建它。

我能够使用Serial Port Monitor记录软件和设备之间的串行通信。

我可以查看旧版软件的数据表,看看收到的数据是如何存储在那里的。我的问题是我不能接收数据流的头部和尾部,而且我之前没有串口通信的经验,因此想看看SO的大集体是否有助于推动我朝着正确的方向发展(尽管在这一点上,我几乎放弃了希望,这就像以正确方式解码数据一样简单,并开始认为我需要遗留软件的内部工作才能理解流。)

技术细节:

  • 9600波特率
  • 8个字的长度
  • 0胎次

Payload到达两个不同的流:

[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'。就我所知,他们似乎并没有清楚地说明发生了什么。

请注意,我已经与软件和设备制造商进行了沟通,并且他们已经尝试过帮助,但无法挖掘任何相关信息。 我也试图研究二进制文件的补充,但它们的意义更小。

此时,任何和所有有用的提示,技巧或要点都将受到赞赏。

修改

澄清;我希望有人知道有关串口通信的人可能知道并且可能认识到一种我不知道的常见压缩技术或编码的用法,这种技术或编码可能导致流解析成与数据集匹配的东西我可以请参阅旧版软件。 未请求代码

1 个答案:

答案 0 :(得分:1)

像其他人一样,这是一个猜测工作,它是一个二进制协议,只有原始的通信协议会告诉你确切的细节。

您可以从上述数据中找出所有内容

  • 有一些标题字节:16 06 13 06
  • 然后是一些命令字节:00 01或04 01
  • 后面跟着一些数据:' 00 00'或者' 00 .... 00'
  • 后跟8位CRC,最后一个字节为2的补码:CA