如何在只有Wireshark的情况下进行反向工程UDP-based 自定义游戏协议?

6

我如何只使用Wireshark逆向工程基于UDP的自定义游戏协议?我可以记录大量流量,但接下来怎么做呢?我的目标是编写一个分析器插件,最终能够解码游戏命令。这看起来可行吗?我可能会面临哪些挑战?命令是否可能加密?

2个回答

10

是的,这是可行的。但实际上它会取决于所涉及的游戏。压缩会使你的工作更加困难,而加密则几乎不可能(至少不能通过Wireshark - 你仍然可以获取内存中的数据)。

最好的方法可能是有条不紊地进行 - 不要记录“大量的流量”,而是执行游戏中的单个操作或命令,查看发送出去的数据。然后你可以查看数据包并尝试发现任何有趣的内容。通常情况下,你不会从中学到很多东西,因此请尝试另一个命令,并将新消息与第一个进行比较。哪些部分在相同的位置?哪些部分已经移动了?哪些部分完全改变了?特别查找一个固定位置附近的值,该值可能描述了消息类型。一般而言,在数据包的开头会是通用的内容,例如标头,而数据包的后面部分将是特定于消息的内容。考虑到UDP协议通常具有自己的手工编写排序或可靠性方案,你可能会在开始附近找到序列号。

了解你的数据类型很有用。例如,整数值可能以大端或小端格式存储。许多游戏会将数据作为浮点值发送,因此请注意连续2或3个浮点值,这些值可能描述位置或速度。


2
商业游戏预计人们会试图通过破解协议来作弊,因此通常会使用加密和可能的篡改检测。制造游戏的公司非常关注阻止这种活动,因为当少数玩家拥有超级工具时,它会破坏大多数玩家的体验。对于像在线扑克这样的游戏,后果甚至更为严重。

谢谢,工作结束后我迫不及待地要开始研究这个了:)你知道有什么资源可以帮助解决这类问题吗?我能试着去分析并搜索数据包加密函数吗?嘻嘻 - Shawn
如果数据已加密,那么Wireshark对你来说将毫无用处。相反,你需要使用调试器来读取解密后的数据。 - Kylotan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接