代码之家  ›  专栏  ›  技术社区  ›  György Andrasek

如何从服务器的源代码中提取网络协议?

  •  1
  • György Andrasek  · 技术社区  · 15 年前

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

    在Internet上没有可用于协议的文档,大多数搜索结果都是通过客户端的脚本界面返回的。我可以理解,因为用错了方法,它可能会破坏别人的经验。

    我下载了一些备用服务器的源代码,包括我想连接的服务器,但是那些服务器

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

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

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

    在这一点上,我的全部希望是我能够咀嚼大量不道德的代码。如何开始?

    编辑: A related question .

    4 回复  |  直到 15 年前
        1
  •  3
  •   alexkr    15 年前

    如果您的原始代码是用一些著名的库(如openssl或ctypto++)加密的,那么为这些库的主要入口点编写包装器可能会很有用,然后延迟对实际库的调用。如果您进行了这样的替换并成功地构建了项目,那么您将能够以纯文本方式跟踪出的所有内容。

    如果您的项目不使用第三方加密libs,希望仍然可以用一些跟踪其输入的包装器替换加密例程,然后将加密委托给实际代码。 您可以打赌,通常加密是在单独的、相对较少的源文件中实现的,这样您就可以更容易地跟踪这些文件中的输入/输出。

    祝你好运!

        2
  •  2
  •   Benoît photo_tom    15 年前

    我会说

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

    在路上,您将能够记录解密(或者,更可能,尚未加密)的网络活动。

        3
  •  1
  •   Stephen C    15 年前

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

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

        4
  •  0
  •   MSalters    15 年前

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

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

    推荐文章