第61章:外挂原理
老赵刚才提到的外挂一词也激起了孙轶民的好奇。关于游戏外挂,自打孙轶民进入公司与老赵共事以来,通过耳濡目染也大致有个概念上的了解。毕竟老赵的岗位负责了《天问》工程的服务器安全这一块。
但是关于外挂程序实现的具体细节,他并不是特别清楚。此时便好奇跟老赵打听了起来:“你给我科普一下看,游戏外挂具体是如何工作的?篡改服务器上的数据吗?”
“严格上说确实是这样,”老赵解释道,“对于网游来说,外挂程序准确的定义指通过黑客手段串改服务器游戏数据,或者利用游戏设计上的漏洞实现诸如穿墙,瞬移之类的非法操作,从而为玩家谋取利益的作弊程序或软件。从本质上讲,她就是一种黑客攻击软件,是非法的。但是这种程序只存在于网游刚刚流行的那个时代。如今随着网游安全技术的不断提升,这样的外挂程序基本上不存在。”
“哦?是吗?”孙轶民一脸疑惑的望着老赵。
老赵慢条斯理的继续解释道:“现在市面上流传的大多数所谓外挂,其实根本不算真正意义上的外挂,它顶多只能叫做游戏辅助程序。因为它不能篡改服务器数据,也不会对服务器造成损害或增加额外的负担。它的作用是帮助玩家提高游戏操作的效率,速度,从而占据优势。比如说一些辅助城西可以代替玩家手动操作,从而提高角色的行动速度与精准性,等等。这些辅助程序一定程度上造成了对其他玩家的不公平,因此作为网游运营者来说,对此还是要反对与杜绝的。”
孙轶民琢磨了老赵这一番话,大致明白了其中的含义。想来,自己近日在计划着手制作的一个可以在醉风月中操作他的霸王角色自动战斗的程序,也并不属于什么非法外挂,而是一种辅助程序而已。因为孙轶民根本没有想过要去黑游戏服务器或者篡改数据,他只是希望借助这一辅助程序来提升操作速度与战斗效率。
但是这个工程他目前只完成了一小部分——用程序代替手指自动按键的功能,剩余关键部分如何实现,他还没开始好好琢磨。今日是个不错的机会,他想借此好好请教一下老赵,看看是否能在技术方面获得一些有用的信息。
“那你能不能说说,现在那种游戏辅助程序,具体是如何工作的呢?”孙轶民问。
“目前的辅助程序分两种,”老赵重新坐了下来点上烟,缓缓吐出一口深灰色的烟气之后,他解释道:“其中第一种是最原始的模拟按键程序,这种工作原理很简单,无非是用程序向游戏窗口传送虚假的按键信息,从而代替手工按键。它不能解读从游戏服务器返回的信息从而判断游戏角色自身的状态与各种属性数值,只能傻乎乎的按照设定好的顺序发送虚拟按键,仅此而已。说白了,他的作弊效果非常有限,对游戏造成的不公平性也不大。对于这种,我们一般都不太去管。”
孙轶民暗想,这种辅助程序功能确实连菜鸟程序员都会都会,自己昨晚就做出来了。然而对于他的远大目标来说,这并没什么卵用。
“那第二种呢?”孙轶民问。
“另一种就比较高端了,技术含量也比较高。它可以解读游戏客户端接收到的数据,或者从客户端程序虚存中读取各种游戏数据,然后从这些数据中解译出各种游戏信息,比如角色当前的生命值,技能冷却状态,自己的增益或受控状态等等。然后根据这些信息,让程序操纵游戏角色随机应变,作出合适的动作或操作。举个简单的例子来说:辅助程序会判断自身角色的剩余生命值是否低于某个阈值,如果是,那么自动服用生命恢复药剂。”
“那么辅助程序如何操纵角色动作?”孙问。
“有些辅助程序可以伪造数据报发送给服务器,从而可以取代游戏的客户端直接操作角色行动。但是这种制作难度高,而且很容易被发现,一旦被发现角色就容易被封号。所以现在大多数的外挂都是通过向游戏客户端发送模拟的按键信息的方式来驱动角色的动作,也就是说,客户端必须存在。这种操作方式从本质上不属于非法操作,因此比较难被监测到。”
“那你们是如何防范这些辅助程序作弊的呢?”孙轶民用右手柱起脑袋,望着老赵,好奇的问。
对此,老赵耐心的解释了一番:“对于第二种,最关键的措施就是对于传输的数据进行加密了,加密方式越高级越安全。就现在而言,基本上没人能够破解这种传输方式的,所以,这种外挂的制作难度非常高。对于第一种的话,只能从客户端着手,让客户端程序检测收到的按键信息是否虚构,但这个其实很难预防,因为聪明的程序员完全可以把窗口消息模拟的真假难辨。不过我们还有另外一种方法,那就是扫描客户端所在电脑的进程列表,找出市面上常见的那种按键外挂的进程名称,上报给服务器就行了。”
“加密?难道以前的游戏都是明码传输数据的?”孙问。
“嗯。以前的网游数据传送方式基本不加密,或者加密方式非常简单,很容易被人破解,所以导致辅助程序泛滥。但现在情况不一样了。它在数据传输方面采用了更复杂更强壮的加密方式,因此你想通过解读数据报来获取游戏数值是难上加难,更别说想通过程序向服务器发送模拟的游戏数据了。”
“正如你刚才提到的,除了解读客户端接收到的数据包,还可以通过锁定关键游戏数据的虚存地址来获取游戏数据啊?”孙轶民脱口而出。
“虚存中存储的游戏数据也是经过加密转换的,不知道加密方式和密码,你根本就没办法去分析,还谈什么锁定内存地址?”老赵笑道。
孙轶民愕然。思索良久,又想到了一点,问道:“其实除了解读数据报和分析虚存地址,还有一种方法也可以获取数据,那就是通过子窗口句柄。比如说,我想让程序获取我的角色身上携带的金币数量,那么我可以先锁定包裹界面的子窗口句柄,然后通过句柄号调用API函数,就可以获取此子窗口上的任何数据。不是么?”
“呵呵,你能想到的,我们反外挂部门都想到了。构建客户端界面采用windows子窗口?那是老古董的网游设计师的做法了。现在的网游界面除了一个主窗口,在其内部没有任何一个子窗口。所有的对话框,文本框,都是采用GDI函数画出来的,明白么?唯一你能得到的,是游戏主窗口的句柄号,但那没有任何意义。”
原本对于制作战斗辅助程序信心满怀的孙轶民,此时忽然遭到了沉重的打击。可以想见,醉风月的运营方,肯定也做了这样的防范措施。看来自己的宏大目标只能停留在构想状态了,根本无法付诸实施。
而老赵的总结也从侧面证实了这一点:“事实上通过采取这些防范措施,现在市面上真正牛逼的网游辅助程序已经很少见。现在市面上有的辅助程序,无非就是一些按键精灵之类的软件,虽然有些先进一些可以自助写按键脚本,但本质上还是盲人摸象类型的。对玩家的实际帮助不大,对游戏造成的危害也不大,基本上属于第一种。”
孙轶民点了点头。沉默了一会儿,抬起头问道:“按你刚才所说的,市面上流行的辅助外挂因为进程名称的关系容易被发现。那么如果一个懂得编程的玩家,自己设计一款自己专用的辅助软件,不在市面上流传,对于你们来说,还是很难发现它的。”
“这是没错。”老赵说道,“但这无关紧要,如果只是一个玩家在用外挂,对游戏整体上影响不大。我们也不会刻意去对付。”
孙轶民又问:“那么你在工作过程中,有捕获过类似第二种那么厉害的外挂么?”
“从来没有,因为这难度太高了。”老赵答道。
孙轶民点头沉默,此时老赵仰起头一脸好奇的望着孙轶民,问道:“咦,你问那么多做什么?难道你也要做外挂?”
孙轶民笑掩饰:“纯属好奇。”
老赵起身掐灭了烟蒂,提起公文包离开了。孙轶民也收拾了一下,带着一些失落的情绪,步出了办公室。
老赵的讲解给了它很大的打击,但此时他心中仍然有些不服与不甘。他想:“回家我再试试,或许事情并没有老赵说的这么难。”
出门的时候,再次碰到了黎允儿,站在公司大门口似乎在等人。没多久,远处一个头发染成爆炸式红色看不清楚容颜的瘦弱男子,骑着一辆摩托出来到停车场中,抬头望这边忘了一眼。摆了个奇异的手势。
黎允儿随机兴冲冲的跑去,跨上摩托车后座,绝尘而去。
孙轶民看得一脸讶异,问老赵:“这谁啊?”
“他男朋友啊,好像是刚换的。”老赵不假思索道。
“这小小年纪的小屁孩谈什么男朋友,现在的女孩子啊,真是不可思议。”孙轶民感慨道。
“小孩的世界咱们理解不了,有代沟也是正常的。我家那女儿在学校都有了喜欢的小男生了。”老赵笑道。
“你女儿几年级。”孙问。
“六年级,小学。”