【发布时间】:2014-11-23 13:22:34
【问题描述】:
我正在尝试连接到 Safecom TA-810(徽章/注册系统),以自动执行计算员工每天工作时长的过程。目前这是由以下人员完成的:
- 拉取数据到官方应用中
- 打印所有“注册”列表
- 手动将打印列表中的值输入到我们的 HR 应用程序中
这是一项可能需要数小时才能完成的工作,我们希望实现自动化。到目前为止,官方技术支持一直令人失望,并拒绝透露任何细节。
使用 wireshark,我一直在捕获 UDP 传输,并且非常成功地理解了协议是如何构建的。我只对我认为的 CRC 字段有疑问。我不知道它是如何计算的(CRC类型和参数)以及使用哪些字段...
这是消息头的样子:
D0 07 71 BC BE 3B 00 00
D0 07 - Message type
71 BC - This i believe is the CRC
BE 3B - Some kind of session identifier. Stays the same for every message after the initial message (initial message has '00 00' as value)
00 00 - Message number. '01 00', '02 00', '03 00'
一些例子:
Header only examples
E8 03 17 FC 00 00 00 00 -> initial request (#0, no session nr)
D0 07 71 BC BE 3B 00 00 -> Initial response (#0, device sends a session nr)
4C 04 EF BF BE 3B 06 00 -> Message #6, still using the same session # as the initial response
Larger example, which has data
0B 00 07 E1 BE 3B 01 00 7E 45 78 74 65 6E 64 46 6D 74
我也一直试图通过阅读原始应用程序的反汇编代码来解决这个问题。下面的截图发生在 socket.sendto 之前,似乎是相关的。
任何帮助将不胜感激。
编辑:使用 ollydbg 调试应用程序取得了一些成功。 CRC 出现在以下屏幕截图中所选行的寄存器(反转)EDX 中。
【问题讨论】:
-
在调试流程方面取得了一些不错的进展。似乎比CRC16容易得多。他们只是添加所有字节。
标签: reverse-engineering network-protocols crc crc16