第61章:外挂原理(1/2)
老赵刚才提到的外挂一词也激起了孙轶民的好奇。关于游戏外挂,自打孙轶民进入公司与老赵共事以来,通过耳濡目染也大致有个概念上的了解。毕竟老赵的岗位负责了《天问》工程的服务器安全这一块。
但是关于外挂程序实现的具体细节,他并不是特别清楚。此时便好奇跟老赵打听了起来:“你给我科普一下看,游戏外挂具体是如何工作的?篡改服务器上的数据吗?”
“严格上说确实是这样,”老赵解释道,“对于网游来说,外挂程序准确的定义指通过黑客手段串改服务器游戏数据,或者利用游戏设计上的漏洞实现诸如穿墙,瞬移之类的非法操作,从而为玩家谋取利益的作弊程序或软件。从本质上讲,她就是一种黑客攻击软件,是非法的。但是这种程序只存在于网游刚刚流行的那个时代。如今随着网游安全技术的不断提升,这样的外挂程序基本上不存在。”
“哦?是吗?”孙轶民一脸疑惑的望着老赵。
老赵慢条斯理的继续解释道:“现在市面上流传的大多数所谓外挂,其实根本不算真正意义上的外挂,它顶多只能叫做游戏辅助程序。因为它不能篡改服务器数据,也不会对服务器造成损害或增加额外的负担。它的作用是帮助玩家提高游戏操作的效率,速度,从而占据优势。比如说一些辅助城西可以代替玩家手动操作,从而提高角色的行动速度与精准性,等等。这些辅助程序一定程度上造成了对其他玩家的不公平,因此作为网游运营者来说,对此还是要反对与杜绝的。”
孙轶民琢磨了老赵这一番话,大致明白了其中的含义。想来,自己近日在计划着手制作的一个可以在醉风月中操作他的霸王角色自动战斗的程序,也并不属于什么非法外挂,而是一种辅助程序而已。因为孙轶民根本没有想过要去黑游戏服务器或者篡改数据,他只是希望借助这一辅助程序来提升操作速度与战斗效率。
但是这个工程他目前只完成了一小部分——用程序代替手指自动按键的功能,剩余关键部分如何实现,他还没开始好好琢磨。今日是个不错的机会,他想借此好好请教一下老赵,看看是否能在技术方面获得一些有用的信息。
“那你能不能说说,现在那种游戏辅助程序,具体是如何工作的呢?”孙轶民问。
“目前的辅助程序分两种,”老赵重新坐了下来点上烟,缓缓吐出一口深灰色的烟气之后,他解释道:“其中第一种是最原始的模拟按键程序,这种工作原理很简单,无非是用程序向游戏窗口传送虚假的按键信息,从而代替手工按键。它不能解读从游戏服务器返回的信息从而判断游戏角色自身的状态与各种属性数值,只能傻乎乎的按照设定好的顺序发送虚拟按键,仅此而已。说白了,他的作弊效果非常有限,对游戏造成的不公平性也不大。对于这种,我们一般都不太去管。”
孙轶民暗想,这种辅助程序功能确实连菜鸟程序员都会都会,自己昨晚就做出来了。然而对于他的远大目标来说,这并没什么卵用。
“那第二种呢?”孙轶民问。
“另一种就比较高端了,技术含量也比较高。它可以解读游戏客户端接收到的数据,或者从客户端程序虚存中读取各种游戏数据,然后从这些数据中解译出各种游戏信息,比如角色当前的生命值,技能冷却状态,自己的增益或受控状态等等。然后根据这些信息,让程序操纵游戏角色随机应变,作出合适的动作或操作。举个简单的例子来说:辅助程序会判断自身角色的剩余生命值是否低于某个阈值,如果是,那么自动服用生命恢复药剂。”
“那么辅助程序如何操纵角色动作?”孙问。
“有些辅助程序可以伪造数据报发送给服务器,从而可以取代游戏的客户端直接操作角色行动。但是这种制作难度高,而且很容易被发现,一旦被发现角色就容易被封号。所以现在大多数的外挂都是通过向游戏客户端发送模拟的按键信息的方式来驱动角色的动作,也就是说,客户端必须存在。这种操作方式从本质上不属于非法操作,因此比较难被监测到。”
“那你们是如何防范这些辅助程序作弊的呢?”孙轶民用右手柱起脑袋,望着老赵,好奇的问。
对此,老赵耐心的解释了一番:“对于第二种,最关键的措施就是对于传输的数据进行加密了,加密方式越高级越安全。就现在而言,基本上没人能够破解这种传输方式的,所以,这种外挂的制作难度非常高。对于第一种的话,只能从客户端着手,让客户端程序检测收到的按键信息是否虚构,但这个其实很难预防,因为聪明的程序员完全可以把窗口消息模拟的真假难辨。不过我们还有另外一种方法,那就是扫描客户端所在电脑的进程列表,找出市面上常见的那种按键外挂的进程名称,上报给服务器就行了。”
“加密?难道以前的游戏都是明码传输数据的?”孙问。
“嗯。以前的网游数据传送方式基本不加密,或者加密方式非常简单,很容易被人破解,所以导致辅助程序泛滥。但现在情况不一样了。它在数据传输方面采用了更复杂更强壮的加密方式,因此你想通过解读数据报来获取游戏数值是难上加难,更别说想通过程序向服务器发送模拟的游戏数据了。”
“正如你刚才提到的,除了解读客户端接收到的数据包,还可以通过锁定关键游戏数据的虚存地址来获取游戏数据啊?”孙轶民脱口而出。
“虚存中存储的游戏数据也是经过加密转换的,不知道加密方式和密码,你根本就没办法去分析,还谈什么锁定内存地址?”老赵笑道。
孙轶民愕然。思索良久,又想到了一点,问道:“其实除了解读数据报和分析虚存地址,还有一种方法也可以获取数据,那就是通过子窗口句柄。比如说,我想让程序获取我的角色身上携带的金币数量,那么我可以先锁定包裹界面的子窗口句柄,然后通过句柄号调用api函数,就可以获取此子窗口上的任何数据。不是么?”
本章未完,点击下一页继续阅读。