qq游戏外挂:游戏外挂设计技术探讨①

、 前言

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

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

   2、认识外挂

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

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

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

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

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

  另外现在很多外挂功能强大不仅实现了自动动作代理和封包功能而且还提供了对网络游戏客户端数据进行修改以达到欺骗网络游戏服务器我相信随着网络游戏商家反外挂技术进展游戏外挂将会产生更多更优秀技术让我们期待着看场技术大战吧......

   3、外挂技术综述

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

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

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

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

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

  ● 封包技术:主要包括挡截Sock技术和挡截API技术
4、动作模拟技术

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

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

  (1) 模拟鼠标动作APImouse_event它可以实现模拟鼠标按下和放开等动作

    VOID mouse_event(
      DWORD dwFlags, // 鼠标动作标识
      DWORD dx, // 鼠标水平方向位置
      DWORD dy, // 鼠标垂直方向位置
      DWORD dwData, // 鼠标轮子转动数量
      DWORD dwExtraInfo // 个关联鼠标动作辅加信息
    );

  其中dwFlags表示了各种各样鼠标动作和点击活动常用取值如下:

   MOUSEEVENTF_MOVE 表示模拟鼠标移动事件

   MOUSEEVENTF_LEFTDOWN 表示模拟按下鼠标左键

   MOUSEEVENTF_LEFTUP 表示模拟放开鼠标左键

   MOUSEEVENTF_RIGHTDOWN 表示模拟按下鼠标右键

   MOUSEEVENTF_RIGHTUP 表示模拟放开鼠标右键

   MOUSEEVENTF_MIDDLEDOWN 表示模拟按下鼠标中键

   MOUSEEVENTF_MIDDLEUP 表示模拟放开鼠标中键

  (2)、设置和获取当前鼠标位置API获取当前鼠标位置使用GetCursorPos设置当前鼠标位置使用SetCursorPos

    BOOL GetCursorPos(
     LPPOINT lpPo // 返回鼠标当前位置
    );
    BOOL SetCursorPos(
     X, // 鼠标水平方向位置
       Y //鼠标垂直方向位置
    );  

  通常游戏角色行走都是通过鼠标移动至目然后按下鼠标按钮就搞定了下面我们使用上面介绍API来模拟角色行走过程

   CPo oldPo,Po;
   GetCursorPos(&oldPo); //保存当前鼠标位置
   Po.x = oldPo.x+40;
   Po.y = oldPo.y+10;
   SetCursorPos(Po.x,Po.y); //设置目地位置
   mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);//模拟按下鼠标右键
   mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);//模拟放开鼠标右键  

  2. 键盘模拟技术

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

  模拟键盘动作APIkeydb_event它可以模拟对键盘上某个或某些键进行按下或放开动作

   VOID keybd_event(
     BYTE bVk, // 虚拟键值
     BYTE bScan, // 硬件扫描码
     DWORD dwFlags, // 动作标识
     DWORD dwExtraInfo // 和键盘动作关联辅加信息
   );

  其中bVk表示虚拟键值其实它是个BYTE类型值其取值范围为1-254有关虚拟键值表请在MSDN上使用关键字“Virtual-Key Codes”查找相关资料bScan表示当键盘上某键被按下和放开时键盘系统硬件产生扫描码我们可以MapVirtualKey在虚拟键值和扫描码的间进行转换dwFlags表示各种各样键盘动作它有两种取值:KEYEVENTF_EXTENDEDKEY和KEYEVENTF_KEYUP

  下面我们使用段代码实现在游戏中按下Sht+R快捷键对攻击对象进行攻击

   keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0); //按下CTRL键
   keybd_event(0x52,MapVirtualKey(0x52,0),0,0);//键下R键
   keybd_event(0x52,MapVirtualKey(0x52,0), KEYEVENTF_KEYUP,0);//放开R键
   keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),
   KEYEVENTF_KEYUP,0);//放开CTRL键

  3. 激活外挂

  上面介绍鼠标和键盘模拟技术实现了对游戏角色动作部分模拟但要想外挂能工作于游戏的上还需要将其和游戏场景窗口联系起来或者使用个激活键就象按键精灵那个激活键我们可以用GetWindow来枚举窗口也可以用Findwindow来查找特定窗口另外还有个FindWindowEx可以找到窗口子窗口当游戏切换场景时候我们可以用FindWindowEx来确定些当前窗口特征从而判断是否还在这个场景思路方法很多了比如可以GetWindowInfo来确定些东西比如当查找不到某个按钮时候就介绍说明游戏场景已经切换了等等办法当使用激活键进行关联需要使用Hook技术开发个全局键盘钩子在这里就不具体介绍全局钩子开发过程了在后面例子中我们将会使用到全局钩子到时将学习到全局钩子相关知识



  • 篇文章: 网络游戏通讯模型初探②

  • 篇文章: 游戏外挂设计技术探讨②
  • Tags:  qq空间游戏外挂 qq空间游戏基地外挂 游戏外挂 qq游戏外挂

    延伸阅读

    最新评论

    发表评论