简单思路
- 简单而言就是通过外挂程序以某种方式影响到游戏程序,从而改变游戏程序的运行逻辑,达到期望的效果。
例如对于网络游而言,常见的方式就是截取并修改游戏发送到游戏服务器的数据,例如通过改变 call 的内容等方式,从而使游戏服务器返回我们期望的数据来达到功能的增强。
而对于单机游戏而言,常见的就是修改游戏存储在本地计算机内存或者硬盘上内数据从而达到功能的增强。 - 网络游戏也是联网程序,现在的网络游戏多是基于Internet上客户/服务器模式,这种模式的通讯方式一般是采用 TCP/IP 通信协议,数据交换是通过 IP 数据包的传输来实现,一般而言客户端发送给服务器的请求如攻击,移动等都是通过封包的形式和游戏服务器进行数据的交换。
那么我们需要做的就是在发送给游戏服务器之前,截取这个数据包,解析这个数据包的内容,更改数据包中我们期望的部分,而后再发送给游戏服务器。那么,游戏服务器就会返还含有我们期望值的数据包到客户端,从而实现了修改游戏的目的。 - 除了修改游戏封包的方式,我们也可以修改客户端有关的程序来达到目的。这是因为一般而言游戏服务器的运算能力是有限制的,且频繁的将数据包往返于客户端和服务器之间会产生更多的延迟(卡顿),故而无法将所有玩家的所有操作的运算都放到游戏服务器内运行。
因此有一些程序的运算需要依赖客户端辅助完成,故而我们可以对游戏客户端进行脱壳来发现一些程序的判断分支,通过跟踪调试的方式从而把一些对我们不利的判断去掉,以此来达到我们的目的。 - 举例:
在某个游戏中,倘若我们在游戏中执行 1 下攻击操作,正常情况下,服务器接收到 1 下攻击操作后响应回来的数据是掉 100 滴血。
但是我们修改了这个传送的数据包,将其中的 1 修改为 10 并且发送给了游戏服务器,那么游戏服务器就会响应掉 1000 滴血到我们的客户端。
当然,这里面还有服务器端的数据校验,逻辑检验等,这则是关于反检测部分的内容了。 - 简而言之
- 对于单机游戏的外挂制作,由于数据全部在本地运行,故而直接在内存中找到目标数据,进行修改即可。当然,这其中可能会有数据加密等阻挠处理。
- 对于联网游戏而言,修改数据往往风险较大,可以采用逻辑修改,即对往来于客户端和服务端的封包进行逻辑处理,同时,也可以读取联网游戏运行在本机内存中的数据,辅助我们进行封包逻辑修改,常见的如读取一定范围内某些目标的坐标等。
- 当然,游戏的外挂在进步,游戏的反外挂机制也在进步。作为游戏开发者也要更多的了解一些外挂的制作思路,在开发游戏的同时就尽量的避免可能出现的漏洞,使游戏尽可能的少受到外挂的影响。