c++ - 逆向工程遗留串行端口通信

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

我有一个旧版(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          

打印输出来自串行端口监视器,我确实意识到很多控制字符只是简单地设置为一个“点”。据我所知,他们似乎并没有清楚地描述正在发生的事情。

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

此时任何和所有有用的提示、技巧或要点都将不胜感激。

编辑:

为了澄清;我希望了解串行端口通信的人可能知道,并且可能认识到我不知道的常见压缩技术或编码的用法,这可能会导致流解析为与我可以匹配的数据集的内容请参阅旧版软件。 没有请求代码

最佳答案

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

从上面的数据中你可以得出的结论是

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

关于c++ - 逆向工程遗留串行端口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44049376/

相关文章:

linux - 嵌入式linux串行终端多路复用器

ruby - 从我的胰岛素泵 Controller 逆向工程统计数据文件

c# - 混淆器的 "Prevent Microsoft IL Disassembler from opening my assembly"选项

c++ - LNK2019,LPCTSTR和C++语法概述

c++ - 我正在编写一个日历来存储带有多个生日对象的生日我是迭代器的新手并且在使用 find() 时遇到编译器错误

C++11 最佳实践 : When to accept by value vs const&?

Linux - 使用互斥锁同步串口

python - 在 Python 中编写和注册自定义 Tensorflow Op

c++ - QSerialPort - setReadBufferSize

binary - 如何对二进制 thrift 文件进行逆向工程?