一个外行游戏辅助作者的写挂经历
涨姿势,了解一下同做编程的其他人们的生活
关注NBE好长一段时间了。看到前一段时间,有一个游戏辅助作者同行发的连载系列文章《一个苦逼游戏辅助开发人员的自述》,真得是深有感触,所谓外行看热闹,内行看门道,看看评论,有人说他是在吹牛逼,有人说他是靠自己想象力天马行空乱写,我也只能是“微微一笑”呵呵!因为我也算是个外行!
今天,我也来分享一下写游戏辅助的点滴历程,是微微一笑,还是呵呵,都无怕所谓了。
对于游戏辅助行业而言,我属于“外行”。我本身算得上比较“老”的一代程序员了,赶上了2000年互联网泡沫的尾声。在学校的时候就喜欢搞一点黑客、破解什么的,但仅仅是出于兴趣爱好。毕业之后,一直从事软件开发相关的工作,做过网络游戏,开过互联网公司,眨眼间,在软件行业里面混了十几年了。兴趣原因,经常混迹于当时的看雪学院、小榕软件、绿盟论坛等,膜拜各路大神的时候,也在默默的积累技术。
最早准备写辅助是当时玩完美的游戏,完美世界、诛仙之类的网游。现在的游戏辅助基本框架也都是在那个时候积累下来的。因为搞传统软件研发养成的习惯,辅助框架写的质量还算可以,并且文档什么的也比较规范,算是给现在的工作打下了比较好的基础,很多东西都可以重用。当时有一个本地的游戏工作室想让我给他们专职做辅助,但是考虑到种种因素,没有答应,后来辅助的开发进度也一拖再拖,最后也逐渐不好意思和他们联系了。再后来,工作越来越忙,也就把这个事情放下了。
再后来,朋友的朋友找到我,希望给他开发辅助,当时有一搭没一搭的聊,因为自身收入还不错,所以也就没有很上心。再后来,碍于朋友的面子,加上对方一催再催,只好答应对方。
对方是一个不算大的网络游戏工作室,大约有60台E3+32G电脑主机,在当时算是不错的配置了。游戏工作室老板A是一个非常聪明能干的小伙子。
A从辅助代理商人那里买的游戏辅助,但是因为游戏工作室不大,所以价格、服务等方面都不能让A满意。因为很久不碰辅助的东西了,并且当时要做的游戏J3我也没有玩过,所以我让A给我了一份他正在用的辅助。经过分析之后,感觉能做,于是开始动工。
当时的J3是有宏接口的,并且出金思路主要围绕试炼副本和帮会钓鱼,所以核心功能很容易就完成了,先让A跑起来。在当时,J3已经是被很多游戏工作室称为夕阳游戏了,开服时间太长了,但是A认为,J3是点卡游戏,生命周期本身就会相对较长,并且,如果出金思路正确,可以在做上至少1年。现在看,当时A的思路是非常正确的,因为,现在已经过去了一年半多了,他们依然还在围绕J3做。
核心跑起来之后,游戏工作室需要大量的人工去看机器,并且,因为J3自身的优化的问题,单机的多开受到了极大的限制。围绕人工问题,我又制作了控制台,可以同时监控本机各个窗口的角色、等级、状态、红蓝、地图/位置、背包、金钱、体、精、帮贡等一系列信息,这样,游戏工作室员工只需要看一眼控制台,就可以了解本机的所有窗口的挂机情况。
围绕效率问题,我彻底修改了挂机方式,通过降低渲染帧数的方式,把帧数降低到了30秒一帧,基本上算是解决了CPU占用过高的问题。基本上前面提到的E3机器可以开48开没有什么压力。这次的修改大约陆陆续续用了我半年的时间。
至此,辅助的整体框架已经和最初的设计天差地别了。最初仅仅是要制作一个简单的插件,通过修改游戏客户端的资源包加载到客户端就可以了。但是现在,已经变成了一个主控台,通过主控台自动批量启动、自动登录,支持卡位报警、能够运行自定义脚本、能够定时运行命令、能够定时关闭客户端(每周1周4停服维护),然后针对客户端能够进行锁屏,能够进行游戏内自定义脚本调试、录制等等等等……
一切看上去那么美好,我都深深的为自己的伟大创举而内牛满面……
然而,2014年暑假期间,相信做J3的朋友都不会忘记,J3开始大面积封停。那段时间,基本上起一批封一批,起了就封、再起再封。A和他朋友的游戏工作室损失惨重。那段时间也恰巧碰上我的工作也很忙,只能晚上熬夜调试,找问题、找方案。基本上那段时间每天只能睡三四个小时,其余的时间,要么做公司的事情,要么在调试辅助。
整整2个月的时间,处于崩溃的边缘。因为严重睡眠不足,上下班路上开车,半个月三次事故,其中有两次发生在4天内,也就是刚从4S店把车提出来的第二天,就又来了一次事故。所幸都是刮擦和追尾事故,也没有碰上对方是豪车,前后两个保险杠都换过了,喷漆也免不了。
期间,不止一次想要放弃,毕竟自己的工作收入也不错,加上这么多年的打拼,也算是衣食无忧了,真没有必要这么拼命了。然而,A和他朋友的游戏工作室已经都切换到了我的辅助,我有退路,他们却没有退路。
思量再三,只能坚持。终于,通过分析客户端和网络封包,找到了J3上报的检测数据,找到了规则,就很简单了,APIHook,把异常部分跳过去就OK了,对于无法跳过的规则,简单粗暴的重启客户端重登录即可,毕竟无法处理的几率比较低,好几天才能碰到一次。终于,经过几次调整之后,总算是稳定了。
美美的睡了两三个周之后,问题又来了,J3又开始进行无节操的封停了。检查之后发现,客户端的检测规则没有变化,那么问题只能是出在服务器端了。因为在座APIHook的时候,我已经对本机硬件序列号、MAC地址、局域网IP等信息都做了处理,那么服务器端能够检测的只能是公网IP了,应该是通过类似于对网吧IP段做白名单,个人的同一个IP如果同时登录的客户端过多的话,就会进入封停判定。我让A去尝试同IP登录上限,同时开始考虑应对方案。
因为A的机器前边是48开或者多的挂到50开,而Windows自身又没有机制能够对多个网卡进行可定制的分流,所以这个多IP的方案又让我犯了难……
考虑再三,我让A直接使用市面上的IP代理软件先跑起来。跑了大概有2个周的时候,A告诉我,还会有封停。初步考虑IP代理可能会一个IP卖给多个游戏工作室,从而导致封停问题。
至此,没有退路和借口的我又开始了漫漫的熬夜的日子。其实解决方案倒也简单,我自制了个路由器的ROM,让路由器充当代理服务器,然后在本地使用LSP劫持了通讯的函数,通过自己写的代理客户端完成通讯,通讯时按照配置选取通过那个代理服务器通讯。虽然各种不完美,但总算是能够稳定的跑起来了。
测试没有问题之后,A和他的朋友们开始批量采购定制的路由,批量拉网线。据说光A自己就新增了近600条网线。
A的游戏工作室规模越来越大,管理也越来越复杂。在完成了定制路由之后,休息了没几天的我又被A要求想办法降低人工。
没办法,顾客就是上帝……
于是,我又制作了网络控制台,可以监控多台机器上的角色,同时能够进行一些简单的维护工作,像重启客户端、发送命令什么的都可以在网络控制台上。又是一个多月的熬夜,终于算是稳定运行了。至此,A的160多台机器,只需要3个员工就可以轻松维护,时不时还能休个假、聚个餐什么的。
而我,因为长时间的熬夜,身体被严重透支,头晕、耳鸣、神经衰弱,腰椎和颈椎也都出现了问题。严重的一次,左手拿了一杯水,硬生生的给抖的洒了一地,死活没法送到嘴里。当时正好快年底了,从公司请了年假,带着老婆孩子省内逛了一圈,玩了大概半个月,身体才逐渐好了一点。
休整回来后,陆陆续续完善了一些功能。像11月份更新后出售需要确认、4月份版本更新后神行的过图问题等等,都是一些小的调整。比较大的改动是做了自动合成萤石的功能,后来合成萤石不需要跑洗炼台了,辛辛苦苦做的半仙罗盘、试炼台寻路什么的也就都没有什么用处了。
运行到今年,刚过春节,A又找到我,说出金效率随着金价的降低,需要调整了,否则游戏工作室开始没有利润了。
于是乎,又一次开启熬夜模式,比较凑巧的是,公司也恰好在这时开始一个重要项目的合作,前期的准备工作交给我来完成。熬夜,熬夜再熬夜……
经过把试炼和钓鱼功能完全推翻重写,终于能够做到5000分装备的号平均4分30秒左右试炼通过,全部用来打试炼的话,每天大概能打330封到350封信,配合每晚的钓鱼活动,只需要极少量的副本就能把精力完全消耗光。
就在前几天,新版本更新后五行石合成界面变了,不能合成五行石了,又进行了简单的调整。
林林总总,也算是在游戏辅助这个圈子里做了几年了。
这是一个严重透支体力精力的工作。在这几年里,身体每况愈下,到现在已经算得上是浑身是病了。如果按照投入产出比来说的话,也没有大家想象的那么划算。我现在的工作,每年能拿个小20万,加上年底分红,也能有个10几20万吧,并且基本上每年都能够上一个台阶。而写游戏辅助,付出的要比工作更多,虽然看上去一年也能有个几十万的收入,但是真的是太累太累了。
我有的时候就在想,如果我拿写游戏辅助的这些精力放在工作上,或者再重新创业,应该不会比现在做辅助收益少。但是无奈,上了这条船,游戏工作室一帮人还在指望着我,只能再坚持一段时间了。
大约2个月前,我也和A也进行了一次长聊,虽然没有直接说不想开新项目了,但我告诉他,应该考虑一下双项目并行,不要把宝全押在J3上面了,我真的累了。
我估计J3再做1年应该没有大问题,但是,J3结束之后,我不想再继续写辅助了。毕竟也老大不小了,体力和精力都跟不上了,游戏辅助这个行业还是年轻人的天下。
对于想入行的,在NBE徘徊的年轻人,我想说,这个行业其实没有那么难,同时也没有那么美好。技术层面如果要开发精品的话,还是得靠C/C++来支撑。如果是需要赶暴利期的话,那就随意了,什么开发快用什么,像什么E语言什么的,虽然我没有学过,但是可以肯定它学起来很容易。入门很简单,网上有大批的教程。
学习游戏辅助制作,还是需要有比较全面的知识的。比如常见的系统API什么的,肯定是要熟悉的,而如果是注入式的内挂的话,各种注入方式、各种Hook技术也是必须要会的。比如,我的这个辅助,算不上完美、也算不上强大,里面用到的技术我简单的把想到的罗列一下:
一套自己的网络框架,能够处理客户端和控制台之间的各种消息通讯,同时也用在了单机控制台和网络控制台之间的通讯上;
一套自己的Hook引擎,用于在关键点挂接,比如帧数优化、反和谐等。这里面采用的方式有Jmp跳转方式的inline-hook、调试中断(包括int3中断和硬件中断),其他的还有内存访问中断等;为了配合上下文信息的获取,还有调用堆栈的处理等;
一套自己的DLL加载器,通过DLL加载器,彻底隐藏注入的DLL,避免被扫描到;
一套自己的资源打包、解包管理,将一些文本、脚本等文件进行打包处理,提高破解门槛;
一套自己的特征码扫描引擎,能够根据特征码自动扫描出exe和dll里面的基址、偏移等信息,减少游戏新版本更新后的基址查找工作量。通过它,我基本上能够做到开服前更新基址;
一套自己实现的socket代理客户端,能够改变制定进程的网络访问路径;
一套基于lua语言的脚本引擎,能够解析并执行自定义命令及其参数,带有分支、循环等特性,同时能够自定义变量、自定义函数等;
暂时就想到这些,有的内容写的时间也比较久远了,很多东西都需要翻文档或者代码才能想起来了。
如果有别的出路的话,先考虑去工作吧,这个行业的艰辛超过你的想象。虽然我走的算是一路顺风顺水,但是这些和A的支持、天时地利都分不开。
不要小看一个简单的辅助软件。要知道辅助对于Bug的容忍度要远远低于普通的项目软件。要知道,一旦游戏辅助商业化之后,同时运行的数量和持续时间,都远远大于普通的商业软件。
正是因为长时间、大批量的运行,程序的任何缺陷都会被放大。比如试炼中的推石头关卡,有百分之一的几率会失败,那么,在A的游戏工作室里面160台机器同时运行,就相当于同时运行7000多个窗口,每个窗口每天大约通关320次,其中推石头关卡出现的几率是4/9,也就是所有的机器里面推石头关卡会出现近100万次,失败大约1万次,如果每次失败增加通关时间2.5分钟的话,相当于为整个游戏工作室浪费了25000分钟,这相当于单号打试炼通关5500次,游戏工作室的利润,就这么被浪费了。
可能会有童鞋质疑,比如J3能不能做,能做的话利润太低什么的,做过童鞋的可以帮我回应一下,我没有做过游戏工作室,没有概念。我只能给出几个基本的数据:
钓鱼进行了加速,基本上鱼儿上钩那个消息一到,就开始了下一次甩杆动作了,省掉了收杆动作,具体的钓鱼次数我没有统计;
试炼之地只打第一层,4500分装备大约4分40秒,5000分装备大约4分30秒,6000分装备大约4分20秒,这都是比较保守的数字;
每条网线跑8个窗口,A那边的网费比较便宜,每条线每个月30左右;
游戏工作室需要员工3人,加上A自己出货交易;
基本上能够做到平价炼号,不赚不亏(脚本+满级号组队带,有工具配合);
声明:我不卖辅助,不带队,不收徒弟,我只是一个外行游戏辅助外挂作者,今天与各位写辅助的同行分享一下自己的经历而已。身心俱疲,前言不搭后语,见谅。就说这些吧,诸君见仁见智,有意见使劲拍砖。