当前位置:首页 > 科技 > 正文内容

网络游戏外挂技术(做外挂需要什么技术)

2019-06-14 20:24:02科技576

大家好,今天就和小月一起来看看这个问题吧 。做外挂需要什么技术,网络游戏外挂技术很多人还不知道,现在让我们一起来看看吧!

网络游戏外挂技术简介

网络游戏外挂技术(做外挂需要什么技术)

所谓游戏插件,就是游戏之外的辅助程序,可以帮助玩家自动生成游戏动作,修改游戏的网络数据包,让玩家用最少的时间和精力完成游戏中的各种任务。随着网络游戏的不断升温,作为其配件的游戏外挂也发展迅速。从最初的鼠标键盘模拟和传输齿轮技术,到阻塞Sock、阻塞API等高端技术的应用。

任何事物都有两面性,游戏外挂也不例外。一方面可以将玩家从机械重复的操作中解放出来,让游戏更加人性化和娱乐化。另一方面,一些恶意外挂篡改游戏数据,欺骗服务器,严重损害了游戏的公平性,使大量玩家损失。所以插件的开发应该仅限于编程技术的研究和学习。

1外部存储技术概述

插件的种类繁多复杂,功能多样。同一个网游甚至有几十个插件,实现相同功能的插件有几种不同的技术。比如本文要讨论的一款网游中卡牌玩家外挂的实现方式,至少有三种。通过分析屏幕上扑克牌的画面,读取本地机中游戏使用的内存空间,截取分析数据包。因此,有必要对网络游戏外挂进行科学的分类。根据外挂针对的游戏类型,可以分为两类,即模拟玩家鼠标键盘操作的动作模拟外挂和拦截数据包并提取或修改其中数据的数据包外挂。下面详细解释两种外部存储所采用的技术。

1.1动作模拟类插件

仿真插件可以自动控制游戏中的人物走动或发动攻击,无需人工干预。这种插件看起来很复杂,但原理很简单。游戏中角色的动作由鼠标和键盘控制。这种插件就是调用相关的API函数来模拟玩家对鼠标键盘的操作,从而控制游戏中的角色。

1.1.1鼠标模拟技术

鼠标操作包括以下几种:点击左键、右键、中键,移动鼠标改变指针在相应表格中的位置。实现上述操作所需的API函数描述如下。

1)mouse_event函数,模拟鼠标按下并释放左右键。其格式如下:

VOID鼠标事件(

DWORD dwFlags,//鼠标动作标识

Orddx,//鼠标横坐标位置

Orddy,//鼠标纵坐标位置

DWORD dwData,//鼠标滚轮旋转的次数

Ord dwextrainfo//其他信息

);

其中dwFlags表示各种鼠标动作,如MOUSEEVENTF_LEFTDOWN、MOUSEEVENTF_LEFTUP、MOUSEEVENTF_MOVE等。

2)GetCursorPos函数,该函数获取鼠标的当前位置。其格式如下:

布尔GetCursorPos(

LPPOINT lpPoint //返回鼠标的当前位置。

);

3)SetCursorPos函数,设置当前鼠标位置。其格式如下:

BOOL SetCursorPos(

Int,//鼠标的横坐标

y//鼠标的纵坐标

);

游戏中人物的移动一般是通过移动鼠标到目的地,然后按下鼠标左键来完成的。使用上述API函数来模拟角色的移动。

CPoint oldPoint,newPointGetCursorPos(old point);//保存当前鼠标位置

新点=设定点(旧点);//SetPoint设置自定义坐标的功能。

SetCursorPos(newPoint.x,new point . y);//设置目标位置

mouse _ event(mouse eventf _ left down,0,0,0,0);//模拟按下鼠标左键

mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//模拟释放鼠标左键

1.1.2键盘模拟技术

键盘的操作相对简单,只需按下和释放按键即可。Keydb_event函数用于模拟键盘动作,其格式如下:

VOID keybd_event(

字节bVk,//虚拟键值

字节bScan,//硬件扫描码

DWORD dwFlags,//动作标识

DWORD dwExtraInfo //辅加信息

);

下面利用该函数来模拟按下拷贝的操作。

keybd _ event(VK _控制,MapVirtualKey(VK _控制,0),0,0);//按下计算机的计算机的ctrl按键按键(控制键)键

keybd_event(0x43,

  keybd_event(0x43,MapVirtualKey(0x43,0), KEYEVENTF_KEYUP,0);//放开C键

  keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),

  KEYEVENTF_KEYUP,0);//放开CTRL键

  其中,MapVirtualKey函数功能是在虚拟键值与扫描码之间进行转换。

  1.2 封包类外挂

  网络游戏最大的特点在于分布在各地的玩家之间可以相互通信,实现这个功能的关键是玩家在游戏中所做的任何操作,都会以数据封包的形式发送至服务器,服务器经过处理后再把数据封包反馈给游戏中的玩家们。

  封包类外挂利用网络游戏这个特点,在客户端拦截服务器发送来的数据封包,采用特定的方法对封包内的数据进行分析,最后按照需要修改封包内的数据模拟客户端发送至服务器。此类外挂实现的关键技术涉及两个方面:封包截获与封包数据的分析。

  1.2.1 封包截获

  API Hook技术是封包截获的核心,是指拦截API调用的过程。API Hook技术的应用十分广泛,如实时翻译系统中屏幕取词功能。API Hook一般由两部分组成:Hook服务器和Hook驱动器。Hook服务器一般以exe的形式出现,主要负责把Hook驱动器注入到目标进程或模块中。Hook驱动器一般以DLL的形式出现,主要负责API的拦截工作。至此,又涉及到两个核心技术:DLL注入技术与API拦截技术。

  1.3DLL注入技术

  DLL的注入方法有很多种,由于篇幅有限,只介绍两种比较常用的方法,即利用全局钩子进行DLL注入和利用远程线程进行DLL注入。下面分别介绍。

  全局钩子必须在DLL中也就是Hook驱动器中实现,原理是当待注入进程在接收到某一消息时,消息不会先到这个进程,而是先到DLL中的钩子函数中,由钩子先处理这个消息后再传递到接收这个消息的进程中。

  也就是说,当待注入进程的消息被一个钩子截获时,相当于这个进程调用了DLL中的钩子函数,系统便会强制把DLL文件映射到这个进程的地址空间中,供这个进程使用。以上是利用全局钩子进行DLL注入的全过程。可以通过SetWindowsHookEx函数在系统中安装钩子,通过UnHookWindowsHookEx卸载钩子。

  利用远程线程进行DLL注入的步骤:

  利用OpenProcess函数取得远程进程的进程ID;

  利用VirtualAllocEx函数在远程进程空间中分配一段内存用来存放要注入的DLL完整路径

  ;利用WriteProcessMemory函数将要注入的DLL的路径写到刚才分配的远程进程空间;

  利用GetProcAddress函数从Kernel32.dll中取得LoadLibray的地址

  ;利用CreateRemoteThread函数以从Kernel32.dll中取得的LoadLibrary函数的地址为线程函数的地址,以我们要注入的DLL文件名为参数,创建远程线程。

  1.4API拦截技术

  API拦截的实现方法也有多种,本文重点介绍两种最为常用的技术,即挡截Winsock和挡截API函数。

  Winsock是Windows网络编程接口。在Windows系统中,使用Winsock接口为应用程序提供基于TCP/IP协议的网络访问服务,而这些服务是由Wsock32.DLL提供的函数库来完成的。因此,任何Windows基于TCP/IP的应用程序都必须通过Winsock接口访问网络。挡截Winsock的原理是由自己写一个与原有进程调用的Wsock32.DLL具有相同接口函数的DLL,再用重写的DLL替换原有的DLL。在替换的过程中,可以对感兴趣的函数进行挡截,放入外挂控制代码,而对其它不感兴趣的函数,则以函数转发的形式调用原有Wsock32.DLL中的函数。

  实现挡截API的常用方法是改写执行代码,主要步骤是:利用GetProcAddress函数获取所要挡截的API函数的地址;利用VirtualQuery函数查询关于本进程内虚拟地址页的信息,利用VirtualProtect函数改变本进程内虚拟地址页的保护属性;利用WriteProcessMemory函数修改原API函数执行代码的前8个字节,使得对该API函数的调用能转向自定义的函数调用。除此之外,还可以通过改写PE文件的输入地址表来实现挡截API的功能,有关此方法可以参见MSDN的相关内容。   1.2.2 封包数据分析

  封包数据分析的过程非常复杂,需要分析人员有极大的耐心和毅力。首先,封包内数据的格式很复杂,需要经过反复的试验与分析,才能得出数据中每个字节在游戏中所表示的含意。其次,绝大部分游戏对封包内的数据进行了加密处理。在网络游戏出现的初期,只要掌握几种简单的加密解密算法,就可以通过对封包内数据的分析得出封包的加密解密算法。但随着机器性能的提高与网络带宽的提升,游戏开发商对封包的加密与解密算法设计的越来越复杂,单纯的通过封包内数据的分析已经很难推出加密解密算法。目前破解封包加密与解密算法的方法主要是通过动态调试技术来实现的。

  其原理是首先通过动态调试跟踪并取出加密与解密算法的代码段,然后再通过分析这些代码最终得出结论。动态调试主要是跟踪代码的执行,一般跟踪的起点可以是windows消息、socket中的send与recv等函数。动态调试工具一般采用OllyDbg,softice等工具。动态调试工具所跟踪的代码都是以汇编语言的形式反馈给用户,汇编语言相对高级语言难以读懂,一般可以通过代码反推导将汇编语言转换为相应的高级语言,

  步骤如下:首先,可以将汇编码写成三元表达码,其次,将代码中的转移指令转换为条件语句或循环语句,再次,将代码中的变量进行迭代,最后,进行变量形式转换与语句形式转换。当然我们对代码进行动态调试的目的是为了掌握封包的加密算法,进而对封包中的数据进行分析,通过大量的实验,最终读懂封包中重要数据的含意。为后面的编程工作做好准备。

  2 结束结

  外挂程序对网络游戏的环境安全和健康发展有着极大的影响,防治外挂必然要对外挂的实现技术有所了解。但防治外挂仅靠技术手段是很难实现的,因为在网络世界没有什么是绝对安全绝对保密的。技术手段只能是尽可能的加大外挂制作的难度,拖延外挂开发的时间而已,并不可能完全杜绝外挂。因此外挂的防治必须要多管齐下,尤其是加强游戏信用体制的建设,完善相应的法律法规,以促进网络游戏更好,更快的发展。

这篇文章到此就结束,希望能帮助到大家。

扫描二维码推送至手机访问。

版权声明:文章内容摘自网络,如果无意之中侵犯了您的版权,请联系本站,本站将在3个工作日内删除。谢谢!

本文链接:http://xixia168.cn/n/kj/7665.html

标签: 技术外挂
分享给朋友:

“网络游戏外挂技术(做外挂需要什么技术)” 的相关文章

复活节干什么庆祝活动(复活节活动有哪些)

复活节干什么庆祝活动(复活节活动有哪些)

大家好,今天就和丹尼一起来看看这个问题吧 。复活节活动有哪些,复活节干什么庆祝活动很多人还不知道,现在让我们一起来看看吧!    1、画鸡蛋  你可以在几乎所有的超市在复活节月买个鸡蛋画盒。煮一些鸡蛋,让你的孩子在复活节期间为他们做装饰。通常你在不同的杯子里染上不同颜色的染料。鸡蛋在颜料的覆盖下会变...

中国朝代顺序时间完整表(中国朝代时间表)

中国朝代顺序时间完整表(中国朝代时间表)

大家好,今天就和大牛一起来看看这个问题吧 。中国朝代时间表,中国朝代顺序时间完整表很多人还不知道,现在让我们一起来看看吧!  一、中国朝代时间表  中国历史朝代顺序:夏、商、西周、东周、秦、西汉、东汉、三国(曹魏、蜀汉、东吴)、西晋、东晋、五胡十六国、南朝(宋、齐、梁、陈)、北朝(北魏、东魏、北齐、...

10月有哪些节日全部(十月份节日有哪些)

10月有哪些节日全部(十月份节日有哪些)

大家好,今天就和小白一起来看看这个问题吧 。十月份节日有哪些,10月有哪些节日全部很多人还不知道,现在让我们一起来看看吧!  一、十月份节日有哪些  10月1日:“十.一”国庆节、国际音乐节、国际老年人日  10月2日:国际和平与民主自由斗争日、国际非暴力日  10月4日:世界动物日  10月4-1...

不惑之年是指哪个年龄(人不惑之年是指多少岁)

不惑之年是指哪个年龄(人不惑之年是指多少岁)

大家好,今天就和小鱼一起来看看这个问题吧 。人不惑之年是指多少岁,不惑之年是指哪个年龄很多人还不知道,现在让我们一起来看看吧!  一、  人不惑之年是指多少岁  不惑之年指的是四十岁,意思是遇事能明辨不疑。因为其源于孔子所说的“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而...

植树节的由来简说(植树节的来历简写50字)

植树节的由来简说(植树节的来历简写50字)

大家好,今天就和兔兔一起来看看这个问题吧 。植树节的来历简写50字,植树节的由来简说很多人还不知道,现在让我们一起来看看吧!    植树节的来历简写50字:植树节是为了纪念中国民主革命先行者孙中山先生。他是中国近代史上 第一个重视并大力提倡植树造林的人。习俗就是在这一天植树造林,美化环境的活动。一、...

中秋节的寓意和象征(中秋节的寓意是什么)

中秋节的寓意和象征(中秋节的寓意是什么)

大家好,今天就和毛毛一起来看看这个问题吧 。中秋节的寓意是什么,中秋节的寓意和象征很多人还不知道,现在让我们一起来看看吧!    中秋节的寓意为家庭团圆幸福、花好月圆。中秋节自古便有祭月、赏月、吃月饼、玩花灯、赏桂花、饮桂花酒等民俗。到后来人们逐渐把赏月与月饼结合在一起,寓意家人团圆,寄托思念。拜月...