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