除了Wireshark之外,我如何进行逆向工程基于UDP的自定义游戏协议?我可以记录一堆流量,但那又怎么样?我的目标是为Wireshark编写一个解剖器插件,最终能够解码游戏命令.这看起来可行吗?我可能面临哪些挑战?命令是否可以加密?
是的,这是可行的.但它的实用程度将取决于所讨论的游戏.压缩将使您的工作更加困难,加密将使其变得不可能(至少通过Wireshark - 您仍然可以获取内存中的数据).
可能最好的解决方法是有条不紊地做 - 不要记录"一堆流量",而是在游戏中执行单个动作或命令,看看发送的数据是什么.然后你可以查看数据包并尝试发现任何感兴趣的内容.通常你不会从中学到很多,所以尝试另一个命令并将新消息与第一个消息进行比较.哪些部件在同一个地方?哪些部分搬了?哪些部分完全改变了?特别注意可能描述消息类型的数据包开头附近的固定位置的值.一般来说,数据包的开头将是标题之类的通用内容,后面的数据包部分将是消息特定的.考虑到UDP协议通常有自己的手动排序或可靠性方案,并且您可能会在开始附近找到序列号.
了解您的数据类型非常方便.例如,整数值可以以big-endian或little-endian格式存储.许多游戏将数据作为浮点值发送,因此可以在一行中查找可能描述位置或速度的2或3个浮点数.