【问题标题】:How do I extract the network protocol from the source code of the server?如何从服务器的源代码中提取网络协议?
【发布时间】:2010-12-16 23:50:52
【问题描述】:

我正在尝试为流行的网络编写聊天客户端。原始客户端是专有的,大约比我想要的大 15 GB。 (公平地说,其他人称之为游戏。)

互联网上绝对没有该协议的可用文档,大多数搜索结果只返回客户端的脚本界面。我可以理解,因为使用不当,可能会破坏其他人的体验。

我已经下载了几个替代服务器的源代码,包括我想连接的那个,但是那些

  • 除安装说明外不包含任何文档
  • 评论不佳(我做了一个肤浅的浏览)
  • 很大(目标服务器的src 文件夹包含价值12 MB 的.cpp.h 文件),而grep 没有找到任何相关内容

我也尝试过搜索他们的论坛并联系服务器的维护人员,但到目前为止,没有运气。

数据包嗅探不太可能有帮助,因为该协议严重依赖加密。

在这一点上,我所有的希望都是我能够咀嚼大量的代码。我该如何开始?

编辑:A related question

【问题讨论】:

    标签: c++ networking tcp reverse-engineering


    【解决方案1】:

    我会说

    1. 找到用于通过套接字发送数据的命令(调用取决于网络库)
    2. 找到该命令的引用并从那里展开。如果您可以修改-重新编译服务器代码,它可能会有所帮助。

    在此过程中,您将能够记录已解密(或者更有可能是尚未加密)的网络活动。

    【讨论】:

      【解决方案2】:

      IMO,最好的答案是阅读替代服务器的源代码。尝试使用一个好的 C++ IDE 来帮助你。会有很大的不同。

      您需要了解的协议相关材料可能仅限于文件的子集。这些将包含对网络套接字和事物的引用。从那里开始,根据需要向外工作。

      【讨论】:

        【解决方案3】:

        如果您的原始代码使用 OpenSSL 或 Ctypto++ 等知名库进行加密,则为这些库的主要入口点编写包装器可能会很有用,然后将调用委托给实际库。如果您进行此类替换并成功构建项目,您将能够以纯文本方式跟踪所有内容。

        如果您的项目没有使用第三方加密库,希望它仍然可以用一些包装器替换加密例程,这些包装器跟踪它们的输入,然后将加密委托给实际代码。 您敢打赌,通常加密是在单独的、数量相对较少的源文件中实现的,因此您应该更容易跟踪这些文件中的输入/输出。

        祝你好运!

        【讨论】:

          【解决方案4】:

          一种可行的方法是将其作为加密挑战来解决。这很容易,因为你控制的太多了。

          例如,您可以使用当前客户端向服务器发送已知消息,然后检查该字符串的服务器内存。一旦您发现字符串在哪个对象中结束,也可以通过代码追踪其祖先。在对象的任何非常量方法上设置断点,并找到堆栈跟踪。这为您提供了消息如何到达服务器的实时视图,以及消息处理所必需的核心功能列表。接下来您可以找到相关函数(列表中函数的调用者/被调用者)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-04
            • 2013-12-27
            • 2013-07-29
            • 2016-06-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多