crc - 解码未知的 CRC 或校验和?
问题描述
我一直在尝试解码用于无人机与其相机之间的串行通信的 CRC 或校验和算法大约一周,但运气不佳,我想知道这里是否有人看到我遗漏的东西或有任何建议.
典型的数据包如下所示:
FE1A390100020001AE0BE0FF090046250B00040000004E0D32080008540D8808F4016B54
它们总是以 0xFE 开头。第 2 个字节是数据包的总大小减去 10 个字节。数据包大小各不相同,但我认为我对 0x1A 大小特别感兴趣。字节 3 似乎是一个数据包计数器,因为它通常增加 1,但有时我看到它在恢复增加 1 个序列之前为几个数据包跳到一个完全不同的数字(通常是在更改为 0x22 大小的数据包时)。最后 2 个字节总是在变化,我相信是校验和或 CRC。除非我操纵无人机无线电控制,否则所有其余字节似乎从一个 0x1A 数据包到下一个数据包都保持不变。
开机后有一系列数据包,我假设它们用于初始化通信。它们是最短的数据包,它们之间的变化最少,所以看起来它们可能是最容易看到的。这是开机后发送的前 7 个字节。
From Drone to camera
Time:
8.3982205 FE030001000000010200018F68
8.39934725 FE03010100000001020001A844
8.400473958 FE03020100000001020001C130
8.401600708 FE050301000000000000000001AAE8
8.402900792 FE1A040100020001000000000000000000000C000300000853060008AB028808F4014629
8.406020958 FE22050100030002000000000000000000000000000000000000B3FFFFFFDE22006300FF615110050000C956
8.4098345 FE1A060100020001000000000000000000000C000300000853060008AB028808F40180A9
如果我使用 -w 16 -s 将前 3 个数据包放入 reveng,那么它会返回:
reveng: warning: you have only given 3 samples
reveng: warning: to reduce false positives, give 4 or more samples
width=16 poly=0x1487 init=0x0334 refin=false refout=false xorout=0x0000 check=0xa5b9 residue=0x0000 name=(none)
如果我添加第 4 个数据包,它会找到相同的多边形,但其余部分看起来不同:
width=16 poly=0x1487 init=0x417d refin=false refout=false xorout=0x5582 check=0xbfa2 residue=0xb059 name=(none)
如果我添加第 5 个数据包,则返回时未找到模型。
但是,如果我删除数据包 4,然后使用数据包 1、2、3 和 5 运行它,如果再次找到相同的多边形,但其余的值不同:
width=16 poly=0x1487 init=0x804b refin=false refout=false xorout=0x0138 check=0x7dcc residue=0xc8ca name=(none)
大多数包含 0x1A 大小的数据包和我通过 reveng 运行的前 3 个初始化数据包的组合都返回“未找到模型”。到目前为止,每次我只用 0x1a 大小的数据包运行 reveng 时,都找不到模型。
我认为有可能在初始化数据包之后,它如何将从相机接收到的信息合并到从无人机到相机的数据的 CRC 计算中,但是这些数据包中没有很多数据. 这是从相机发送到无人机的前 9 个数据包。在无人机发送第一个 0x1A 数据包之前,摄像头发送的唯一数据似乎是 0x7D0001。
From camera to drone:
Time
3.474456792 FE0500020000000000007D00013D40
4.475220208 FE0501020000000000007D000168C5
5.476483875 FE0502020000000000007D00018642
6.477295958 FE0503020000000000007D0001D3C7
7.4783405 FE0504020000000000007D00014B45
8.479420458 FE06050200010003FA078538B838B3
8.480811667 FE0506020000000000007D0001F047
9.48057875 FE0507020000000000007D0001A5C2
9.481883 FE06080200010003F9078638B8386037
我尝试将 0x7D0001 合并到数据包中并通过 reveng 运行它们,但这似乎没有帮助。
我还尝试了 reveng -w 8 -s 对各种数据包组合,但没有找到模型。而且我手动尝试了各种校验和算法(可能不正确)但没有成功。
我在这里捕获了更多数据: https ://drive.google.com/open?id=1v8MCaXOvP_2Wv_hcaqhUZnXvqNI1_2Ur
有任何想法吗?建议?这已经让我发疯了一个星期
解决方案
推荐阅读
- opencv - 如何获得具有自适应阈值的实体形状
- ios - 如何在没有调用者 UUID 的情况下从自定义 UI 结束 CallKit 调用?
- go - 在 VS Code 开发过程中调试 Go 包
- javascript - Firebase 消息 (FCM) - 没有通知权限的应用内消息
- node.js - 使用 Firebase Cloud Functions 创建 Node.js REST API,而不使用 Express?
- django - Django Permission 类被调用两次
- java - Spring boot 2中配置Sql server 2019数据库时出错
- sql - Oracle Sql 在插入语句时向 to_date 添加小时和分钟
- javascript - 解析 Visual Studio Code Extensions API 上的每个变量(来自 C 文件)
- c++ - 地图,C++中的矢量