从技术角度谈封号

这些天到处看到的都是外挂,封号等等,大多都是站在玩家的角度来看。今天,我们站在网易的角度来分析分析外挂,封号!

一。什么是外挂?
外挂是指一种游戏外辅程序,它可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数等,以实现玩家用最少的时间和金钱来达到自己的目的。好外挂可以时间人机长时间脱离。依然使游戏帐号保持玩家在电脑前操作的状态。

别看外挂仅仅几百K。大点的也就几M。可里面包含的技术工程量非同小可,如拦截Sock技术、拦截API技术、模拟键盘与鼠标技术、直接修改程序内存技术等等。

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

1。是将游戏中大量繁琐和无聊的攻击动作使用外挂自动完成,以帮助玩家轻松搞定攻击对象并可以快速的增加玩家的经验值。之前的白日梦。等等外挂都是属于这类外挂。官方所谓的影响游戏平衡性等等所产生的巨大的危害实属夸大其词。这类外挂仅仅是通过“按键精灵”的方式使原本枯燥无味的升级过程通过程序来实现人机分离。可以让这个程序来代替原本只有玩家手动操作才可以达到的动作。例如:四圣。万寿。白骨挂机,再往前说就是仙族练水法的时候跑到海三秒龟丞相。

这类外挂在不修改游戏本身客户端的情况下。对游戏本身所产生的影响小之又小。但是网易为什么要大力封杀?时间。我们都知道。人可以一个小时不断的重复一个动作。两个小时。三个小时。。。。十个小时呢?人人都是邱少云?不可能吧?在重复了这样一段枯燥无味的动作之后。必然要去做些别的事情换换脑筋。或者说,在重复了这样的动作一段时间时候。能产生的有效时间效果必然下降。所以这类外挂影响到的就是网易的直接点卡收益。或许一个人用无所谓。十个人用无所谓。但是大话根据官方统计。冲值点卡。(也就是咱们说的正经玩游戏的人)在4600多万。如果这样的外挂不加以控制。保守估计。网易每天营业额至少下降20%-30%也就是说人民币损失至少达到一百万---二百万。

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

这类外挂在大话中理论存在。大话一。大话二前半时期在网易技术等等不是很强的情况下。或许出现过。在本地电脑。可以通过这类外挂使一个10级抗物理11的石头变成补天。1级抗物理3一样也可以变成补天。的(1级绿宝石抗物理是3么?好久没当过车夫了。忘了。)这类外挂对游戏的打击是致命的,很荣幸大话在这方面做的很好。网易对这类外挂应该实行的是实时检测。一旦发现,马上封停帐号。绝不姑息。这样的铁血政策是我没有异议的。本来玩游戏就是想好好玩。要是想通过这类程序投机倒把。牟取暴利。是任何一个热爱大话的玩家都不能接受的。

三。外挂实现所使用的技术。
1。动作模拟技术:主要包括键盘模拟技术和鼠标模拟技术。

a。 鼠标模拟技术。(Windows API函数)
(1) 模拟鼠标动作API函数mouse_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 lpPoint // 返回鼠标的当前位置。
    );
    BOOL SetCursorPos(
    int X, // 鼠标的水平方向位置。
      int Y //鼠标的垂直方向位置。
    );

通常游戏角色的行走都是通过鼠标移动至目的地,然后按一下鼠标的按钮就搞定了。下面我们使用上面介绍的API函数来模拟角色行走过程。
   CPoint oldPoint,newPoint;
   GetCursorPos(&oldPoint); //保存当前鼠标位置。
   newPoint.x = oldPoint.x+40;
   newPoint.y = oldPoint.y+10;
   SetCursorPos(newPoint.x,newPoint.y); //设置目的地位置。
   mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);//模拟按下鼠标右键。
   mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);//模拟放开鼠标右键。


b。键盘模拟技术。(Windows API函数)

模拟键盘动作API函数keydb_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。

  下面我们使用一段代码实现在游戏中按下alt+A捷键对攻击对象进行攻击。
   keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0); //按下alt键。
   keybd_event(0x52,MapVirtualKey(0x52,0),0,0);//键下A键。
   keybd_event(0x52,MapVirtualKey(0x52,0), KEYEVENTF_KEYUP,0);//放开A键。
   keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),
   KEYEVENTF_KEYUP,0);//放开alt键。


(其中涉及的键值记得不是很清楚。所以可以出现少许错误。)

2。封包技术:主要包括挡截Sock技术和挡截API技术。
由于这类外挂在大话中没有。所以暂时不谈。

四。根据我个人猜想。网易区分外挂有两种手段。

1。很简单的技术方法就是用API全局HOOK把SendInput、keybd_event、mouse_event、WriteProcessMemory都拦截了。

这个技术很简单。但是很实用。几乎主流外挂,像白日梦等等。都逃不出这样的技术。但是问题来了。大话本身也调用这类函数。如果控制的话。那计算量是天文数字。成本会成几何级数增加。所以我觉得这个技术应用的概率小于20%。

2。建一个黑名单,把流行外挂的进程名都写进去,反外挂程序每隔一段时间搜索进程,看看有没有已知的外挂在运行。这个技术也比较简单。我估计网易用这样的技术来封锁外挂的可能性占80%以上。一个反外挂的服务器端和反外挂的客户端程序。服务器端的功能是一个“安检站”,它在游戏服务器跟游戏客户端中间,首先会检测玩家的机器上有没有反外挂客户端在运行,如果有运行,就把游戏客户端发来的数据包转发给游戏服务器。
就是这样:
游戏客户端&反外挂客户端 -> 反外挂服务器端 -> 游戏服务器 (正确情况)
游戏客户端 -> 反外挂服务器端 游戏服务器 (不把数据包转发到游戏服务器)

反外挂客户端跟反外挂服务器端之间的验证包的加密可以每隔几天更新,反外挂客户端要经常下载新版本。这样就算有人破解了反外挂客户端,他也要随着加密包的更新,不断推出新版本,累死他,最后都懒得破解了

第二个情况也就是网易口中的可以拦截到使用外挂的玩家的数据。这个技术拦截到的数据真实么?可信么?或者说。准确率高么?通过我自己来说。我本着爱国的热情假设一下。网易的工作人员大脑还是很好的。智商也是比较高的。准确率也是99%以上的。那我们来看一下这样的技术所要花费的成本。4600万玩家。假设正常没有使用外挂的玩家是4000万。那600万是可疑数据传送者。600万个人数据。根据网易口中本着认真负责的态度反复对这些数据50次的检验。假设网易这方面工作人员是100人。(不可能这么高。暴雪公司反外挂做的这么好也达不到这样的程度。)100人来检查50次600万个人数据。需要是时间至少在1个月左右。这是他们不睡觉,不吃饭。保持相当的速度才可以达到的时间。那么我们来看。从外挂出现到现在封杀也就是不到一个月时间。通过技术分析。对外挂的解密等等。从时间上来说。是不可能的。除非。网易用的不是电脑,是银河III光脑。

也就是说网易除非使用了在全世界都领先的其他技术,而且是不为人知的技术。才可以做到他们口中所宣传的那样。但是可能么?谁可以回答我?可能么?

附:主流反外挂技术:itsong、np、APEX公司的新技术、反HOOK、等等。我相当期待网易什么时候能把他们嘴里所谓的不适合公布的数据公布出来!!!



文中“大话”可换为“梦幻”等游戏。

连接地址:http://bbs.yzz.cn.yzz.cn/viewthread.php?tid=1033605&extra=page%3D1

[编辑:]
上一篇:于封停后的看法 下一篇:力魔平民(附录象)

点击排行