我有一些旧的LED板,你要发送一些文字并把它挂在某个地方......它是在1994/95制造的,它通过串口与16位MS-DOS进行通信您可以在其中输入某些文字的应用程序。
所以,因为你可能无法在任何地方运行它,除非使用DOSBox或类似的技巧,我决定用C#重写它。
在对原始dos-exe进行端口监控之后,我发现它对你重建它真的不感兴趣 - 请求必须回答合适,不同的字节,预先发送" ping&# 34;消息等...
也许你知道类似我的dos-exe使用的校验和例程/模式,或者你可以提供任何关于尝试对此进行逆向工程的提示......另外,因为我只熟悉编程并且没有花费在反转方法和/或分析协议上花了很多时间,请不要判断我这个主题是否有点愚蠢 - 我会对任何帮助感到高兴...
真正包含应该显示的文本的消息是 143字节长(只是那么长,因为如果你不用你的文字占用所有空间,它就会填充填充字节),在那个消息中,我注意到以下模式:
第四个字节(仍属于msg标头)与6或7个重复值的列表不同(在我的示例中,该字节始终为0F)。
最后两个字节用作校验和
一些例子:
到目前为止,我完全确定校验和确实依赖于标题中的第四个字节,因为如果它发生变化,则校验和将完全不同,以便显示相同的文本。
这是一个完整的143字节字符串显示" 123"的示例,只是为了给您一个更好的方向:
02 86 04 0F 05 03 01 03 01 03 01 03 00 01 03 00 ...............
00 31 00 32 00 33 00 20 00 20 00 20 00 20 00 20 .1.2.3. . . . .
00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 . . . . . . . .
00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 . . . . . . . .
00 20 00 20 00 20 00 20 00 20 00 FE 03 01 03 01 . . . . . .þ....
04 01 03 00 01 03 00 00 20 00 20 00 20 00 20 00 ........ . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 45 52
(文字信息以第2行的第2个字符开头" 31 00 32 00 33 00(...) "
不幸的是,在整个网络上,没有用户手册,文档,甚至没有这个信息板设备曾经存在的真实证据。
答案 0 :(得分:6)
我会为你在用字符串s喂食时得到的校验和写出F(s)。
观察:
所有这些都与具有以下属性的校验和一致,校验和不经常出现:更改输入中的给定位总是将输出与同一事物进行异或。
我预测,例如,F(“210”)= F(“211”)x或D0 A6 = 8D C5,类似地,F(“222”)= 3C A8 xor C5 C8 xor 95 F4 = 6C 94
如果这是真的,那么下面给出了一个粗暴的方法来计算一般的校验和,前提是你有一个黑盒子为你计算校验和(显然你有):
通常 b ( k )彼此密切相关 - 通常的模式是你将位提供给移位寄存器 - 所以鉴于对算法的理解,上面比你需要的更强大。但是如果你能够以任意选择的位模式作为输入,我希望它有效。
如果没有,您仍然可以这样做。例如,假设您实际选择的是29个7位ASCII字符值,位于输入的17,19,... 73位置。然后你可以首先进入所有空间(0x20),然后在0..6位置依次对1位进行异或。这不会给你所有的 b ( k ),但它会为你提供足够的任意29-ASCII字符输入。