诛仙手游河阳志什么用:浅谈游戏外挂——外挂篇3(外挂制作基础) - 心动--完美空间 - yifeigzs - ...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 20:23:48
浅谈游戏外挂——外挂篇3(外挂制作基础)     说在篇前的话:珍惜好游戏远离外挂。本文很多内容来源与INTERNET,在这里感谢那些文章的作者。同时希望大家可以用自己的双手创造出完美纯净的游戏世界。同时在写本文的时候为了不带来负面影响,重点部分(函数的使用)不做详细介绍
——轻枫逐水
 
 

一、 前言

  所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将。虽然,现在对游戏外挂程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间去说明一切吧。

  不管游戏外挂程序是不是“合法”身份,但是它却是具有一定的技术含量的,在这些小小程序中使用了许多高端技术,如拦截Sock技术、拦截API技术、模拟键盘与鼠标技术、直接修改程序内存技术等等。本文将对常见的游戏外挂中使用的技术进行全面剖析。

 

 

二、认识外挂

  游戏外挂的历史可以追溯到单机版游戏时代,只不过当时它使用了另一个更通俗易懂的名字——游戏修改器。它可以在游戏中追踪锁定游戏主人公的各项能力数值。这样玩家在游戏中可以达到主角不掉血、不耗费魔法、不消耗金钱等目的。这样降低了游戏的难度,使得玩家更容易通关。

  随着网络游戏的时代的来临,游戏外挂在原有的功能之上进行了新的发展,它变得更加多种多样,功能更加强大,操作更加简单,以至有些游戏的外挂已经成为一个体系,比如《石器时代》,外挂品种达到了几十种,自动战斗、自动行走、自动练级、自动补血、加速、不遇敌、原地遇敌、快速增加经验值、按键精灵……几乎无所不包。

   网络游戏的鼻祖是mud,而外挂的鼻祖是mud中机器人。玩过mud的估计都用过机器人,由于mud是用文字命令的,所以机器人的实现比较简单,而且灵活性比较大,我所说的灵活性是指用户可以根据自己的需要定义自己的机器人,自己定义好后由mud客户端(带机器人功能)自动填写,这样就实现了挂机练级别。
    2001年后以传奇为代表的图形网络游戏在大陆开始迅速升温,2001年下半年人们突然发现网络游戏突然成为国内互连网业最另人惊喜的行业,因为网络游戏的收费非常顺利,那些提供了几年的免费新闻免费邮箱的除了广告找不到盈利点的互连网公司找到了救命稻草,2002年开始一波又一波的游戏代理热情一直延续到现在。而也是2001年下半年开始外挂开始出现,一开始主要是免费为主,但到了2002年上半年外挂制作者发现同网络游戏一样除了不能走正规的点卡销售模式外外挂的销售也异常顺利,而与此同时外挂的破解也接踵而至。外挂制作者们逐渐在2002下半年开始了商业运行,有些外挂已经可以看出来并非个人所谓,团体制作模式突显,同时开始出现同业竞争,销售代理机制开始出现。2003年后外挂开始有形成产业的迹象,国家开始重视,有关单位将外挂的发行定性为非法出版物。2003年8月国内最著名的面向程序员的网站csdn开始关注游戏外挂,在9月的开发高手首期中大篇幅的介绍游戏外挂,使游戏外挂再次成为程序员关注热点。

  游戏外挂的设计主要是针对于某个游戏开发的,我们可以根据它针对的游戏的类型可大致可将外挂分为两种大类。

  一类是将游戏中大量繁琐和无聊的攻击动作使用外挂自动完成,以帮助玩家轻松搞定攻击对象并可以快速的增加玩家的经验值。比如在《龙族》中有一种工作的设定,玩家的工作等级越高,就可以驾驭越好的装备。但是增加工作等级却不是一件有趣的事情,可以说是重复枯燥的机械劳动。如果你想做法师用的杖,首先需要做基本工作——砍树。砍树的方法很简单,在一棵大树前不停的点鼠标就可以了,每10000的经验升一级。这就意味着玩家要在大树前不停的点击鼠标,这种无聊的事情通过"按键精灵"就可以解决。外挂的"按键精灵"功能可以让玩家摆脱无趣的点击鼠标的工作。

  另一类是由外挂程序产生欺骗性的网络游戏封包,并将这些封包发送到网络游戏服务器,利用这些虚假信息欺骗服务器进行游戏数值的修改,达到修改角色能力数值的目的。这类外挂程序针对性很强,一般在设计时都是针对某个游戏某个版本来做的,因为每个网络游戏服务器与客户端交流的数据包各不相同,外挂程序必须要对欺骗的网络游戏服务器的数据包进行分析,才能产生服务器识别的数据包。这类外挂程序也是当前最流利的一类游戏外挂程序。

  另外,现在很多外挂程序功能强大,不仅实现了自动动作代理和封包功能,而且还提供了对网络游戏的客户端程序的数据进行修改,以达到欺骗网络游戏服务器的目的。我相信,随着网络游戏商家的反外挂技术的进展,游戏外挂将会产生更多更优秀的技术,同时商家也会不遗余力的与之对战到底!让我们期待着看场技术大战吧......(在这里发表下我的个人意见:希望商家可以取得最后胜利。)
    下面让我介绍一下外挂的大体分类(外挂无外忽,一个是监控,一个是插入):
1、按键精灵一类。这一类外挂发送键盘鼠标的消息给程序,比如左右鼠标键连击功能。这样的东西现在基本没有了,有也觉得没人好意思卖钱按键精灵一类(按键精灵一类:无监控,插入在界面上)。

2、按键精灵加强类。这一类的程序员有些基本功底,他们找出一些内存数值,比如血值蓝值,并在自己的程序中监视这些值,当这些值低于设定值通过发送游戏本身拥有的快捷键消息实现自动加血自动补蓝。同样这样的外挂也很少了(按键精灵加强类:监控在本机,而且监控内容多在内存(不保险),经常容易出错.插入在界面)。

3、包截取分析类。通过各种个样的方式截取包,截取的方式真的很五花八门,有到底层去拿的,有挂接recv send拿的,也有自己写一个截取用的 winXXXX.dll欺骗游戏程序的。这种通过分析数据包并发送定制数据包可以实现基本全部的外挂功能。这个方式同时要解决的是大部分游戏传送数据已经开始复杂加密,所以有个解密的过程(3包截取分析类:网络包监控,插入也在网络传输这里)。

4、挂接游戏客户端关键函数入口。这种类型挂接的函数入口一般是游戏接收数据发送数据的入口,注意不是recv和send的入口,那个是win api而不是游戏的收发入口。通过跟踪客户端我们可以得到游戏的收发函数入口,这些入口传入的数据或者传出的数据都是没加密的,加密是在函数中完成,这样就可以避开解密的过程。当然既然找到函数入口那也可以找到加密解过程,只要把加解密过程提出来转成C语言写的也可以用3的方式来做外挂。但因为传送的数据不只是加密,而且在数据之间还存在一些保持逻辑关系的字段,这样的话光拿加解密函数还是不够的,还要找出逻辑关系,这样的话用4这样的方式就不需要考虑了。我就是用这样的方式(挂接游戏客户端关键函数入口:监控游戏逻辑,我这里提个问题,呢用什么监控,api?封包的工具?调试工具?什么样的调试工具,请指教.插入也在此)。

5、服务模式。这一类实际上是3,但最大的不同是,他自己建立一个本地服务器,然后将游戏的连接地址改到本地,他在中间实现一个转发和分析以及发伪包的工作,而不是hook到游戏进程中进行包的分析和发送。这样的模式有三点好处 A 网络游戏升级还是比较快的,传统hook到进程中的方式经常要修改一些游戏中的特定地址的内容特别是4的方式,所以经常出现游戏升级外挂就不能用的现象,而服务模式只要数据加解密方式不变一般是不会出现类似现象。 B 容易制作出脱离原客户端外挂,实际上也就是可以自己写客户端了。C 无需为2000 和98之间的不同而苦恼,两种系统的内核差比较大,传统方式容易遇到一些兼容性的问题(服务模式:这个方式的问题是要建立一个服务模式,---太困难了.....你要知道服务的各个方面不光是相关的游戏逻辑,还有消息管理,进程管理.否则,随便就出错.根本接管不了)。
 
 

三、外挂技术综述

  可以将开发游戏外挂程序的过程大体上划分为两个部分:

  前期部分工作是对外挂的主体游戏进行分析,不同类型的外挂分析主体游戏的内容也不相同。如外挂为上述谈到的外挂类型中的第一类时,其分析过程常是针对游戏的场景中的攻击对象的位置和分布情况进行分析,以实现外挂自动进行攻击以及位置移动。如外挂为外挂类型中的第二类时,其分析过程常是针对游戏服务器与客户端之间通讯包数据的结构、内容以及加密算法的分析。因网络游戏公司一般都不会公布其游戏产品的通讯包数据的结构、内容和加密算法的信息,所以对于开发第二类外挂成功的关键在于是否能正确分析游戏包数据的结构、内容以及加密算法,虽然可以使用一些工具辅助分析,但是这还是一种坚苦而复杂的工作。

  后期部分工作主要是根据前期对游戏的分析结果,使用大量的程序开发技术编写外挂程序以实现对游戏的控制或修改。如外挂程序为第一类外挂时,通常会使用到鼠标模拟技术来实现游戏角色的自动位置移动,使用键盘模拟技术来实现游戏角色的自动攻击。如外挂程序为第二类外挂时,通常会使用到挡截Sock和挡截API函数技术,以挡截游戏服务器传来的网络数据包并将数据包修改后封包后传给游戏服务器。另外,还有许多外挂使用对游戏客户端程序内存数据修改技术以及游戏加速技术。

  本文主要是针对开发游戏外挂程序后期使用的程序开发技术进行探讨,重点介绍的如下几种在游戏外挂中常使用的程序开发技术:

  ● 动作模拟技术:主要包括键盘模拟技术和鼠标模拟技术。

  ● 封包技术:主要包括挡截Sock技术和挡截API技术。

 

 

四、动作模拟技术

  我们在前面介绍过,几乎所有的游戏都有大量繁琐和无聊的攻击动作以增加玩家的功力,还有那些数不完的迷宫,这些好像已经成为了角色游戏的代名词。现在,外挂可以帮助玩家从这些繁琐而无聊的工作中摆脱出来,专注于游戏情节的进展。外挂程序为了实现自动角色位置移动和自动攻击等功能,需要使用到键盘模拟技术和鼠标模拟技术。下面我们将重点介绍这些技术。

 

  1. 鼠标模拟技术  
  几乎所有的游戏中都使用了鼠标来改变角色的位置和方向,玩家仅用一个小小的鼠标,就可以使角色畅游天下。那么,我们如何实现在没有玩家的参与下角色也可以自动行走呢。其实实现这个并不难,仅仅几个Windows API函数就可以搞定,让我们先来认识认识这些API函数。

(1) 模拟鼠标动作API函数mouse_event,它可以实现模拟鼠标按下和放开等动作。

(2)、设置和获取当前鼠标位置的API函数。获取当前鼠标位置使用GetCursorPos()函数,设置当前鼠标位置使用SetCursorPos()函数

  2.键盘模拟技术

  在很多游戏中,不仅提供了鼠标的操作,而且还提供了键盘的操作,在对攻击对象进行攻击时还可以使用快捷键。为了使这些攻击过程能够自动进行,外挂程序需要使用键盘模拟技术。像鼠标模拟技术一样,Windows API也提供了一系列API函数来完成对键盘动作的模拟。

  模拟键盘动作API函数keydb_event,它可以模拟对键盘上的某个或某些键进行按下或放开的动作。

 

  3. 激活外挂

  就是让你的外挂在游戏中生效。毕竟做外挂是为了使用的目的。

 

五、封包技术

  通过对动作模拟技术的介绍,我们对游戏外挂有了一定程度上的认识。这种动作模拟型游戏外挂有一定的局限性,它仅仅只能解决使用计算机代替人力完成那么有规律、繁琐而无聊的游戏动作。但是,随着网络游戏的盛行和复杂度的增加,很多游戏要求将客户端动作信息及时反馈回服务器,通过服务器对这些动作信息进行有效认证后,再向客户端发送下一步游戏动作信息,这样动作模拟技术将失去原有的效应。为了更好地“外挂”这些游戏,游戏外挂程序也进行了升级换代,它们将以前针对游戏用户界面层的模拟推进到数据通讯层,通过封包技术在客户端挡截游戏服务器发送来的游戏控制数据包,分析数据包并修改数据包;同时还需按照游戏数据包结构创建数据包,再模拟客户端发送给游戏服务器,这个过程其实就是一个封包的过程。
  封包的技术是实现第二类游戏外挂的最核心的技术。封包技术涉及的知识很广泛,实现方法也很多,如挡截WinXXXX、挡截XXX函数、挡截消息、 XXX驱动程序等。在此我们也不可能在此文中将所有的封包技术都进行详细介绍,故选择两种在游戏外挂程序中最常用的两种方法:挡截WinXXXX和挡截 XX函数。

  1. 挡截WinXXXX

  众所周知,WinXXXX是Windows网络编程接口,它工作于Windows应用层,它提供与底层传输协议无关的高层数据传输编程接口。在Windows系统中,使用WinXXXX接口为应用程序提供基于TCP/IP协议的网络访问服务,这些服务是由 WXXXX32.DLL动态链接库提供的函数库来完成的。

  

2.挡截XXX

  挡截XXX技术与挡截WinXXXX技术在原理上很相似,但是前者比后者提供了更强大的功能。挡截WinXXX仅只能挡截WinXXXX接口函数,而挡截XXX可以实现对应用程序调用的包括WinXXXX XXX函数在内的所有XXX函数的挡截。如果您的外挂程序仅打算对WinXXXX的函数进行挡截的话,您可以只选择使用上小节介绍的挡截WinXXXX技术。随着大量外挂程序在功能上的扩展,它们不仅仅只提供对数据包的挡截,而且还对游戏程序中使用的Windows XXX或其它DLL库函数的挡截,以使外挂的功能更加强大。例如,可以通过挡截相关API函数以实现对非中文游戏的汉化功能,有了这个利器,可以使您的外挂程序无所不能了。

 

 

六、结束语

  除了以上介绍的几种游戏外挂程序常用的技术以外,在一些外挂程序中还使用了游戏数据修改技术、游戏加速技术等。在这篇文章里,就不逐一介绍了。随着网络的发展,游戏外挂已经成为了一个不可忽视的问题,我曾经用一个次形容外挂:robber我想着并不为过,希望在今后的对外挂斗争中,玩家与商家可以共同抵制,这才是去本的最好方法