农企新闻网

网络游戏外挂在哪里举报(网络游戏外挂技术)

发布者:丁俊明
导读大家好,农企新闻小编来为大家解答以上问题。网络游戏外挂在哪里举报,网络游戏外挂技术很多人还不知道,现在让我们一起来看看吧!网络游戏外挂技术简介所谓游戏插件,就是游戏之外的辅助程序,可以帮助玩家自动生成

大家好,农企新闻小编来为大家解答以上问题。网络游戏外挂在哪里举报,网络游戏外挂技术很多人还不知道,现在让我们一起来看看吧!

网络游戏外挂技术简介

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

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