16、逆向网络游戏(基础):网络游戏与单机游戏的区别、封包的概念、使用 Wireshark 抓包、简单的封包分析。
好,我们终于聊到网络游戏了。说实话,很多搞逆向的朋友,单机游戏玩得贼溜,什么内存修改、代码注入,信手拈来。但一碰到网络游戏,就有点懵了。为啥?因为数据不在你手里了。
今天这一章,我就带你跨过这道坎。咱们从最基础的概念讲起,把网络游戏和单机游戏的区别掰扯清楚,再聊聊封包,最后上手用 Wireshark 抓个包看看。嗯,内容不少,但都是干货。
网络游戏 vs 单机游戏:核心区别在哪?
单机游戏,说白了,游戏逻辑全在你本地。你改了内存里的血量,游戏就认为你无敌了。因为裁判是你自己。
网络游戏就不一样了。你的一举一动,都要发给服务器。服务器才是最终的裁判。你本地显示血条是满的,但服务器说你死了,那你就真死了。
我举个例子。你玩一个单机RPG,你给自己改了100万金币,游戏里你就能买买买。但如果你在网游里,哪怕你本地显示金币是100万,服务器一校验,发现不对,直接把你踢下线,甚至封号。我在项目里就见过不少新手,拿着CE改网游的显示数值,结果号没了。
所以,核心区别就一句话:单机游戏,本地是权威;网络游戏,服务器是权威。
这引出了我们逆向网络游戏的关键——你没法直接改服务器,但你可以改客户端发给服务器的数据。这就是封包。
封包是什么?
封包,英文叫 Packet。说白了,就是你的游戏客户端和服务器之间,来回发送的一小段数据。
你想想看,你按了一下W键,角色往前走了一步。这个动作怎么告诉服务器?不是直接发一句“我往前走了一步”,而是发一个结构化的数据包。里面可能包含:
- 操作类型(比如:移动)
- 目标坐标(比如:x=100, y=200)
- 时间戳
- 校验码
服务器收到这个包,解析一下,然后广播给其他玩家:“某某某移动到(100,200)了”。
我们逆向工程师要做的,就是截获这些封包,看懂里面的内容,甚至修改它再发出去。这就是所谓的“封包修改”或“协议逆向”。
使用 Wireshark 抓包
Wireshark 是网络分析的瑞士军刀。免费、开源、功能强大。我们用它来抓取游戏封包。
安装就不说了,直接讲操作。打开Wireshark,你会看到一堆网络接口。选你游戏用的那个。一般是你的有线网卡或无线网卡。
然后,设置一个过滤条件。不然你会被海量数据淹死。游戏通常用TCP或UDP协议。我们先用一个简单的过滤:
ip.addr == 游戏服务器IP
这个IP怎么找?简单。打开游戏,然后打开命令行,输入 netstat -n,看哪个连接是ESTABLISHED状态,而且端口不是常见的80或443,那基本就是游戏服务器了。
举个例子,假设服务器IP是 123.123.123.123。过滤条件就是:
ip.addr == 123.123.123.123
然后开始抓包。你在游戏里做点操作,比如走一步,发个言,买个东西。Wireshark里就会显示对应的封包。
简单的封包分析
抓到包了,怎么看?我们双击一个TCP包,看它的详情。重点关注 Data 部分。这里就是应用层的数据,也就是游戏封包的内容。
假设我们抓到一个包,Data 部分是十六进制:
01 00 00 00 0A 00 00 00 64 00 00 00
这看起来像是一串数字。我们试着解析一下。很多游戏封包有固定的结构。比如:
- 前4个字节:包长度
- 中间4个字节:操作码(Opcode)
- 后面:具体数据
按照这个思路,上面的数据可以拆成:
01 00 00 00→ 长度 = 1(但这里明显不对,因为后面还有数据。实际上长度可能包含整个包,或者有其他含义)0A 00 00 00→ 操作码 = 10(十六进制0A)64 00 00 00→ 数据 = 100(十六进制64)
嗯,这只是一个非常简单的例子。实际游戏中,封包结构要复杂得多。但原理是一样的:找到规律,解析结构。
我建议你从最简单的操作开始分析。比如,在游戏里只做一个动作,比如“点击NPC对话”,然后抓包。对比你点击前后的封包,看看哪些数据变了。这就是分析封包的起点。
下面这张图,是我总结的网络游戏逆向基础流程,你可以对照着看:
避坑指南
最后,说几个我踩过的坑,你注意一下。
- 别用Wireshark抓自己家的路由器:除非你知道自己在干什么,否则数据量巨大,而且可能涉及隐私。
- 注意封包顺序:TCP包是有顺序的。有时候你看到的Data是乱序的,需要重组。Wireshark有“Follow TCP Stream”功能,可以帮你重组。
- 别以为所有游戏都用TCP:很多实时性要求高的游戏(比如FPS、MOBA)用UDP。UDP抓包方式一样,但分析起来更麻烦,因为UDP不保证顺序。
- 加密不是万能的:很多游戏封包加密了,但加密算法往往在客户端里。你可以用CE或IDA去逆向客户端,找到加密函数。这是后面章节的内容。
好了,这一章就到这里。你先把Wireshark装好,找个简单的网络游戏(比如一些老网游的私服),试着抓几个包看看。不用急着分析,先感受一下封包长什么样。下一章,我们会深入封包结构,讲更具体的分析方法。
核心要点回顾:
- 网络游戏与单机游戏的核心区别:服务器是权威。
- 封包是客户端与服务器通信的数据单元。
- Wireshark是抓包利器,配合netstat找服务器IP。
- 分析封包从找规律开始,对比不同操作的封包差异。