一、登录模块流程及封包分析
我们先看登录流程。从封包流程来看,冒险岛的登录流程是这样的:
1.由Client向登录/账号服务器(Login Server)发送用户名及密码等信息。此数据包的最后部分是用户名(明文表示,未加密),在用户名的前一个字节表示的是用户名的长度。登录/账号服务器向Client返回登录成功及后续连接到游戏服务器服务器所必备的信息等。这中间的两个来往数据包,我还没有看出具体有什么作用。在这个交互过程中,由登录/账号服务器向Client发送所有的游戏服务器列表,服务器列表数据包的内容包括:ip, port, 服务器上所拥有的角色个数等信息,因服务器列表内容过多,被客户端分为两次接收完毕。
2.Client收到Login Server的服务器列表后,根据最近访问的服务器标识(这个信息应该是包含在那个服务器列表数据包中),连接到最近游戏的那个游戏服务器(Game Server)。连接成功后,Game Server首先向Client发送一个8字节的数据包,据以往的常识判断,这个数据包的内容很可能是以后客户端与服务器通信的加密密钥。
3.Client向Game Server再次发送自己的账号信息。Game Server与Client经过两个数据包的交互后,向Client发送角色数据包,此包中包括了玩家在该Game Server所创建的所有角新开网通传奇3g私服色信息,当然这个信息只是部分的,并不是该角色的所有信息。
4.在此后的通信过程中,Client每隔30秒向Game Server发送一个保持连接的包,该包长度为10字节,包的最后四字节是一个递增数字,前面6字节暂时未看出规律。
5.只要Client没有点击某个角色进入最终的Game Server,则Client要始终与Login Server保持连接。当Client点击角色进入Game Server时,Client才与Login Server断开连接。在以后的游戏过程中,Client始终与且仅与该Game Server进行数据通信。
通过对登录流程中的数据包初步分析,可以得出以下几个结论:
1.Client向Login Server发的第一个数据包,用户名部分是采用明文的,且该数据包的内容,每次登录都一样,并没有因时间的不同而发生改变。由此可以推算:针对于此数据包中的密码加密算法是固定不变的,换句话说,密码的加密算法是比较容易通过逆向工程被找到的。我认为,针对于此处,服务器也应该先向客户端发送一个加密密钥,以后的通信可以用该密钥作为安全验证的依据。但暴雪没有这样作,最大的可能是为了提高服务器的效率,在登录服务器上,如果每个客户端一旦连接成功,登录服务器都得向客户端广播一个数据包的话,可能这个量还是比较大的,这可能延长了玩家的登赢在龙头软件公式源码录等待时间,所以他们没有在这块作。
2.Client在登录Login Server的地址,每次Login Server的登录地址都可能是不一样的。我没有在客户端目录里找到这些地址,只在客户端目录里找到了四个大区的四个域名,我猜想,冒险岛是用的DNS解析的简单方法来实现Login Server的简单动态均衡的。不知道这个猜想是否正确。
3.“根据玩家最近在玩的哪个游戏,由客户端和服务器自动为玩家选择进入这个游戏服务器”,这一项设定充分体现了暴雪一贯的风格:为玩家着想,最大限度地提高游戏的舒适度。再次对暴雪的态度予以肯定!
4.一旦玩家进入了游戏世界,客户端与服务器的通信端口会一直保持不变。即:冒险岛的游戏世界服务器群设计结构采用的是带网关的服务器集群。
5.在整个的登录流程中,产生最大疑问的就是Login Server与Client的连接保持逻辑。当Client与Game Server连接了之后,Client并未与Login Server断开,是一直保持连接的。后来,经进一步的抓包分析,Client之所以要与Login Server保持这样的连接,是为了当Client重新选择服务器时,不至于重新连接Login Server。当Client点击了"选择服务器"按纽后,Login Server会每隔5秒向Client发一个当前所有的服务器列表数据包。要知道,这个服务器列表数据包的内容可是非常大的,如果有传奇变态私服发布站玩家就打开了这个窗口不关闭,Login Server向这种情况的所有玩家每5秒钟就发一个服务器列表数据包,这个广播量可是很大的哦(2k左右,这可是一个用户是2k哦)。我认为这里的逻辑设计是相当不合理的。Login Server如果为了给客户端提供一个最新的全局服务器列表,可以保持连接,但也没必要每隔5秒就向客户端发一个服务器列表,最多只在客户端在某个服务器上创建了不同的角色后再更新这个列表也是可以的,但只用更新这个列表中的变化内容即可,不用发全部的完整包,这样,在通信量上就小了很多。据说,冒险岛刚开始的时候,产生DOWN机的原因就是登录模块没有处理好,我不知道现在的这个情况是不是已经经过改良的了。但我还是认为每隔5秒就向客户端发送一个2K的包,这一点是不可以被接受的。
以上只是针对于冒险岛登录流程的简单分析,没有多少技术含量,拿出来跟大家相互讨论讨论,看看有没有可以借鉴的地方,后面还会有其它部分的封包分析。
作为一个网络编程人员,熟练使用截包软件和掌握基本的封包分析方法是其基本能力之一,发此文的目的一个原因也是希望向正在最新仿官方魔域私服作网络编程的兄弟介绍一下相关工具的使用和常见的分析方法。下面补充一下关于封包分析的基本方法和相关工具:
1.你需要一个截包工具,推荐:commview,小巧但功能强大,支持自定义的封包分析插件以DLL形式装载,也就是说只要你愿意,你可以写个DLL对某类特殊形式的包进行显示、记录、解密等特别处理。
2.如何查看真正的封包数据。在commview里,会详细列出自网卡级别以上的各层封包数据,包括Ethernet层,IP层和TCP层。而我们作封包分析时,只需要关注TCP层。但TCP层里也有很多内容,对于我们的分析需求来说,我们需要关注的是其Data字段(在协议目录里可以看到"data length标识,点击即可查看data段")的内容。
3.TCP的几个状态对于我们分析所起的作用。在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前开心大亨实时价格表者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。
分享到:
相关推荐
冒险岛抓包转换工具 封包数据转换助手 很方便的小工具
通过对“网络封包拦截VC源程序”的解析,我们将揭开网络封包分析与拦截的神秘面纱。 网络封包,简单来说,是数据在网络中传输时被分段形成的单元,包含了完整的通信信息,如源地址、目的地址、协议类型、数据内容等...
标题中的“封包截取程序源代码”是指一种软件开发技术,主要应用于网络通信的监控和分析。在游戏外挂开发或网络安全领域,封包截取是常见的实践,它允许开发者捕获网络传输的数据包,以便理解数据交换的模式、解析...
OpenKore是一款开源的韩国在线游戏机器人(RPGbot)软件,主要针对《冒险岛》(MapleStory)游戏设计,允许用户自定义自动化任务,如自动打怪、收集物品等。1.9.1版是该软件的一个特定版本,可能包含了一些新的功能...
在IT领域,网络通信是至关重要的部分,而封包抓取技术则是理解网络通信过程、调试网络应用或分析网络数据的关键工具。C++作为一种强大的编程语言,被广泛用于开发网络应用,包括网络封包的抓取和解析。本文将深入...
驱动程序开发的例子,tdi防火墙源代码,数据封包的拦截,过滤
在编程领域,封包与解包是数据传输和存储中常用的技术手段,尤其在网络通信、数据存储和序列化等方面。易语言作为一款中文编程语言,提供了方便的数据封包和解包功能,使得开发者能够有效地处理和传递各种类型的数据...
"封包加密解密程序"指的是用于保护数据隐私和安全的软件工具,它可以将数据转化为密文,防止未经授权的访问。16进制数在这里扮演了关键角色,因为它是计算机科学中常用的一种数字表示方式,便于数据处理。 16进制...
本文将深入探讨“纯C#封包拦截源代码”这一主题,包括其核心概念、实现原理以及相关的编程技巧。 首先,我们要理解什么是封包拦截。在网络通信中,数据通常被分割成若干个数据包进行传输,每个数据包包含源地址、...
DELPHI封包截取源代码是用于网络通信监控的一种技术,主要涉及到计算机网络协议、API钩子(HOOK API)以及编程语言DELPHI的应用。在这个简单源代码例子中,开发者利用HOOK API来拦截和分析SEND和RECV函数,这两个...
在IT领域,数据的封包与解包是一个关键的概念,特别是在网络通信和数据传输中。易语言是一种中国本土开发的编程语言,它以其简洁的语法和面向对象的设计思想,为初学者和专业开发者提供了便利。在这个场景下,我们...
在游戏编程领域,"冒险岛吸怪无敌"是一种特殊的外挂程序,主要用于游戏《冒险岛》。这款程序由VC++编程语言编写,展示了利用C++进行游戏修改的技术。尽管这个项目可能年代久远,只适用于《冒险岛》的8.0版本,但其...
在信息技术领域,数据封包是网络通信的基础,它将信息分割成可传输的小单元,每个单元包含了目标地址、源地址以及数据本身。这款软件的功能在于帮助用户解析、解密和转换这些封包数据,以便更好地理解和分析网络通信...
Windows防火墙与网络封包截获技术源代码
冒险岛079版本,一键即可启动,可单机可联网,无需繁琐的配置即可畅玩,云盘链接在txt中,永久有效。
**VC 封包拦截源代码详解** 在计算机网络编程中,封包拦截是一种技术,用于分析、监控或修改网络通信中的数据包。这种技术在网络安全、软件调试、性能优化等领域有着广泛的应用。本文将深入探讨VC(Visual C++)...
通过深入研究《Astroranger HSP格式封包工具+源代码》,不仅可以学习到游戏资源封装技术,还能提升在文件解析、加密算法和数据结构等方面的技能,对于有志于游戏开发或逆向工程的人员来说是一份宝贵的资源。
封包,也称为数据包,是网络传输中最小的数据单元,通常包含源地址、目标地址以及实际传输的数据。在网络编程和调试中,了解和分析封包内容至关重要,因为它们揭示了应用层的数据交换细节。封包对比工具能够帮助我们...
总的来说,这个"封包器解包器工程源代码"提供了学习和研究封包解包机制的实践平台,特别是对于网络通信、数据加密、软件打包和安全领域的开发者而言,这是一个深入了解和提升技能的好机会。通过分析源代码,可以学习...