我正在尝试为热门网络编写聊天客户端。原始客户端是专有的,比我想要的大15 GB。 (公平地说,其他人称之为游戏。)
互联网上的协议绝对没有可用的文档,大多数搜索结果只返回客户端的脚本界面。我可以理解,因为以错误的方式使用,可能会导致破坏其他人的经历。
我已经下载了几个替代服务器的源代码,包括我要连接的服务器,但那些
src
文件夹包含12 MB的.cpp
和.h
个文件),grep
没有找到任何相关的内容我也试过搜索他们的论坛并联系服务器的维护人员,但到目前为止,没有运气。
数据包嗅探不太可能有所帮助,因为协议在很大程度上依赖于加密。
此时,我所有的希望都是能够咀嚼不同代码的能力。我该如何开始?
答案 0 :(得分:3)
如果您的原始代码是使用OpenSSL或Ctypto ++这样的知名库加密的,那么为这些库的主入口点编写包装器可能会很有用,然后将调用分离到实际库。如果您进行此类替换并成功构建项目,您将能够以纯文本方式跟踪所有内容。
如果您的项目没有使用第三方加密库,希望仍然可以用一些跟踪其输入的包装器替换加密例程,然后将加密委托给实际代码。 您的赌注是通常enctyption是在单独的相对较少数量的源文件中实现的,因此您可以更轻松地跟踪这些文件中的输入/输出。
祝你好运!答案 1 :(得分:2)
我会说
在途中,您将能够记录解密(或更可能是尚未加密)的网络活动。
答案 2 :(得分:1)
IMO,最好的答案是阅读替代服务器的源代码。尝试使用优秀的C ++ IDE来帮助您。它会产生很大的不同。
您需要了解的与协议相关的材料可能仅限于文件的子集。这些将包含对网络套接字和东西的引用。从那里开始,尽可能地向外工作。
答案 3 :(得分:0)
一种可行的方法是将此作为加密挑战来解决。这很容易,因为你控制了很多。
例如,您可以使用当前客户端将已知消息发送到服务器,然后检查服务器内存中的该字符串。一旦你发现了字符串结束的对象,就可以通过代码跟踪它的祖先。在对象的任何非const方法上设置断点,并找到堆栈跟踪。这使您可以实时查看消息如何到达服务器,以及消息处理所必需的核心功能列表。接下来您可以找到相关的函数(列表中函数的调用者/被调用者)。