2009-09-17 109 views
4

有一个有趣的问题。我有一个通过客户端应用程序(而不是浏览器)运行的角色扮演MMOG,它将我的播放器的操作发送到服务器,通过发回数据包来保持所有播放器同步。理解/逆向工程顶层网络协议的好工具

现在,游戏使用TCP/IP上的顶层协议来发送数据。然而,wireshark不知道正在使用什么协议,并将TCP报头之外的所有内容显示为转储。

此外,该转储没有任何纯文本字符串。尽管游戏具有聊天功能,但发送的聊天字符串在此转储中不会以纯文本形式出现在任何位置。

我的任务是逆向工程协议一点点找到包含在包中的数据了一些非常基本的东西。

有谁知道为什么聊天字符串不以纯文本形式可见,并且是否有可能正在使用一个标准的最高级别协议?

此外,有没有任何工具可以帮助从转储中获取数据?

+0

如果加密方案是SSL的时候,你会不会后悔/ TLS,那么你可以使用http://crypto.stanford.edu/~ eujin/sslsniffer/index.html来分析线路上的数据包。如果是一些土生土长的加密,你是失锁...... – Malkocoglu 2009-11-16 09:59:00

回答

5

如果它已加密有机会(实际上,如果您正确处理它,您有100%的机会):密钥必须位于计算机的某个位置。只需打开你最喜欢的调试器,观察一下数据来自套接字,设置一个关于这些数据的观察点,然后看看访问的事物的堆栈痕迹(err,一百个字节或者我希望的)它。如果你真的很幸运,你甚至可能会看到它被解密。如果不是这样,那么你可能会选择使用标准加密算法(他们从理论上的安全角度来看不是傻瓜),要么通过查看堆栈跟踪(如果你幸运的话),要么通过使用其中一个IV/S-Box分析器(避开学术分析器,其中大多数分析器在没有很多麻烦的情况下工作)。许多加密算法使用可检测到的“标准数据”块(这些是IVs/S盒),这些就是您在没有其他信息的情况下所寻找的。无论您发现什么,都可以将其谷歌,并尝试覆盖他们的加密库来转储正在加密/解密的数据。从这些转储中,应该比较容易地看到发生了什么。

REing加密的会话,可以有很多的乐趣,但它需要技巧与调试器,将大量的阅读。它可以是令人沮丧的,但如果你花学习如何做到这一点:)

2

最佳猜想:加密或压缩。

即使远程登录支持压缩过线,即使整个协议是完全基于文本(好,非常接近)。

你可以尝试通过一些常见的压缩实用程序运行的数据流,但我怀疑这会为你做很多,因为他们不传输压缩头所有的可能性,有强制执行只是某些特定值。

如果是INFACT加密,那么你几乎拧(没有多少,更多的努力,我甚至不打算开始进入)。

2

它最有可能是压缩或加密。

如果它被加密,你将不会有机会。

如果它是压缩你必须以某种方式找出哪部分数据被压缩,在压缩的部分开始,压缩算法是什么。如果你的幸运将会有标准标题,你可以识别,尽管它们可能被剥离出来以节省空间。

这一切都不简单。逆向工程很难。没有任何标准工具可以帮助你,你只需要进行调查和尝试,直到找出答案。我的建议是向开发人员询问协议规范,看看他们是否愿意帮助支持你想要做的事情。

+0

+1沟通,但我怀疑很多网络游戏的将是开心透露自己的协议规范。 – 2009-09-17 10:15:36

+1

@Matthew:这是真的,这可能是一个长镜头,但很多游戏都有兴旺改装社区。取决于他们可能想要支持第三方扩展的团队。看看Quake&Unreal(显示我的年龄)这些游戏,他们实际上将所有的源代码发给mod。我不知道这是否仍然是惯例,但值得提问。 – 2009-09-17 10:20:26