逆向工程结合CRCCommand Byte。

问题描述 投票:0回答:1

我有一个未知的hashCRC字节,它是4位随机crcunknown和4位控制标志。每次看到命令字节的时候,它总共可以有16种不同的字节形式。而且会有16个不同的组。没有碰撞,每个字节只见过一次。我正在对MoshiboardMS10105激光控制板进行逆向工程。所以一些代码标志是能够猜测的。由于我可以顺理成章地以为,开启激光器和封闭激光器之间的差别应该是一个位的翻开。

这看起来是一个很扎实的谜题,但我真的想不通。有很多信息可以参考,但也有很多未知数。有些对照组从来没有出现过,因此我也没有。

1. 0A 0E 1A 1E 4A 4E 51 53 59 5A 5B 5E 71 74 79 7B
2. 00 01 03 04 09 0C 10 14 21 23 29 2B 40 44 50 54
3. 55 57 5D 5F 75 77 7D 7F 8A 8E 9A 9E CA CE DA DE
4. 05 07 0D 0F 25 27 2D 2F 80 84 90 94 C0 C4 D0 D4
5. AA AE BA BE D5 D7 DD DF EA EE F5 F7 FA FD FE FF
6. 15 17 1D 1F 35 37 3D 3F 88 8C 98 9C C8 CC D8 DC
7. 45 47 4D 4F 65 67 6D 6F 82 86 92 96 C2 C6 D2 D6
8. A2 A6 B2 B6 C5 C7 CD CF E2 E5 E6 E7 ED EF F2 F6

注:这些是按数字排序的,因为它们的实际顺序未知。

还有一个命令代码范围的部分版本08 0C 13 19 1B 1C 31 3B 48 58 5C ?? ?? ?? ?? ?? 我可以用更多的样本量来计算出来。虽然很可能我也可以通过模式来计算出来。

1. Command header control byte. Followed by 1 int16_le. (Speed, Unk)
2. Position byte. Followed by 3 int16_le
3. Laser Off, X value, Y value. Followed by 2 int16_le
4. Termination byte. 0 int16_le
5. Laser On, X value, Y value. Followed by 2 int16_le
6. Laser Off, Y value. Followed by 1 int16_le
7. Laser Off, X value. Followed by 1 int16_le
8: Laser On, X value. Followed by 1 int16_le.

现在我可以合理地假设3和5相差一点点。而7和8相差一点点。字节码里有一堆模式。其中4位是随机的 它们可能是CRC或者实际上只是纯随机的,字节在组内是均匀分布的。所以这4个非控制字节很可能是均匀分布的东西。

鉴于我不知道哈希值,甚至不知道这些字节的位置。这个可以解决吗?我觉得如果有一个非常简单的方法来做哈希的话,这个位置是可以解决的。我对这些随机的位子一无所知。而我只能对其他位进行一些有根据的猜测。但是,像模式3、4、6和7这样的东西是高度相似的,我可以明确地说,如果你在3的前8个字节中加入0x50,并从后8个字节中减去0x0A,这些模式是一样的。或者说,如果你在3的前8个字节加上0x10,并从后8个字节中减去0x08,4和6是一样的。

然而我无法解决这个问题。而我认为应该是1位翻转的部分,因为它们的上下文含义(3,5和7,8),似乎不太相似。我是说#5的部分明显是#3的2倍。有的似乎偏离了一个位移,有的在高位位移和低位位移中似乎是静态量。

这里有很多模式,而且这是一个2013年系列激光板,所以它不会做一些高处理器密集型的事情。


其他看似关联度不高的信息可以参考。https:/github.commeerk40tmoshi。 的项目,以及那里的维基。


所有的数字都是十六进制的。

  • 这些十六进制的行是什么?

这些都是同一个命令的不同形式,由激光切割机控制板解释。

  • 它们是从网络数据包中提取的吗?

这些数据包是用wireshark通过USB通道截获的。然后,这些信息被发送到CH341串行芯片。

  • 你用来产生这些流量的 "x "和 "y "值是什么?

X和Y值是激光切割机要去的位置。这些都是由一个16位的小恩迪亚值给出的。发出的命令有某种标志,说明发送的是什么类型的值。这些都是不同的命令,但每个命令有16种形式。

  • 你说的 "后面跟着1个int16_le "是什么意思?

我的意思是在命令结构中,这16种形式之一的特定命令后面是一个16位的小恩迪形式的整数。

问题是我希望这些值是同一个值,通常用某些字节开启或关闭来标志,以从激光切割软件中解释这个命令希望激光切割板做什么。但是,我有16个命令,而不是1个意味着1件事的命令,而是意味着1件(我认为)事的命令。这看起来很奇怪。有一大堆图案,但我真的不知道那是什么图案。

color-chart for the bytes

hash crc
1个回答
0
投票
def swizzle(b, p7, p6, p5, p4, p3, p2, p1, p0):
    return ((b >> 0) & 1) << p0 | ((b >> 1) & 1) << p1 | \
           ((b >> 2) & 1) << p2 | ((b >> 3) & 1) << p3 | \
           ((b >> 4) & 1) << p4 | ((b >> 5) & 1) << p5 | \
           ((b >> 6) & 1) << p6 | ((b >> 7) & 1) << p7

def convert(q):
    if q & 1:
        return swizzle(q, 7, 6, 2, 4, 3, 5, 1, 0)
    else:
        return swizzle(q, 5, 1, 7, 2, 4, 3, 6, 0)

适用于将代码行成。

['50', '51', '52', '53', '54', '55', '56', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '8e']
['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0c', '0d', '0e', '0f', '18']
['70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f']
['20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f']
['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff']
['30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f']
['60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f']
['e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef']

根据位奇偶性的不同,所用的模式也略有不同。在第一行和第二行有一个错误的数字,不符合模式。在这两种情况下,这个数字比人们预测的数字增加了1。这至少是可以用的。可能是有不同的算法导致的swizzling与carry错误,导致0x0C不是0x0B,0x74不是0x73的四舍五入。

这也预示着其他未见的模式是。

['00', '01', '40', '03', '10', '21', '50', '23', '04', '09', '44', '0b', '14', '29', '54', '2b']
['08', '11', '48', '13', '18', '31', '58', '33', '0c', '19', '4c', '1b', '1c', '39', '5c', '3b']
['80', '05', 'c0', '07', '90', '25', 'd0', '27', '84', '0d', 'c4', '0f', '94', '2d', 'd4', '2f']
['88', '15', 'c8', '17', '98', '35', 'd8', '37', '8c', '1d', 'cc', '1f', '9c', '3d', 'dc', '3f']
['02', '41', '42', '43', '12', '61', '52', '63', '06', '49', '46', '4b', '16', '69', '56', '6b']
['0a', '51', '4a', '53', '1a', '71', '5a', '73', '0e', '59', '4e', '5b', '1e', '79', '5e', '7b']
['82', '45', 'c2', '47', '92', '65', 'd2', '67', '86', '4d', 'c6', '4f', '96', '6d', 'd6', '6f']
['8a', '55', 'ca', '57', '9a', '75', 'da', '77', '8e', '5d', 'ce', '5f', '9e', '7d', 'de', '7f']
['20', '81', '60', '83', '30', 'a1', '70', 'a3', '24', '89', '64', '8b', '34', 'a9', '74', 'ab']
['28', '91', '68', '93', '38', 'b1', '78', 'b3', '2c', '99', '6c', '9b', '3c', 'b9', '7c', 'bb']
['a0', '85', 'e0', '87', 'b0', 'a5', 'f0', 'a7', 'a4', '8d', 'e4', '8f', 'b4', 'ad', 'f4', 'af']
['a8', '95', 'e8', '97', 'b8', 'b5', 'f8', 'b7', 'ac', '9d', 'ec', '9f', 'bc', 'bd', 'fc', 'bf']
['22', 'c1', '62', 'c3', '32', 'e1', '72', 'e3', '26', 'c9', '66', 'cb', '36', 'e9', '76', 'eb']
['2a', 'd1', '6a', 'd3', '3a', 'f1', '7a', 'f3', '2e', 'd9', '6e', 'db', '3e', 'f9', '7e', 'fb']
['a2', 'c5', 'e2', 'c7', 'b2', 'e5', 'f2', 'e7', 'a6', 'cd', 'e6', 'cf', 'b6', 'ed', 'f6', 'ef']
['aa', 'd5', 'ea', 'd7', 'ba', 'f5', 'fa', 'f7', 'ae', 'dd', 'ee', 'df', 'be', 'fd', 'fe', 'ff']

按字节顺序而不是按排序给定。

© www.soinside.com 2019 - 2024. All rights reserved.