一个计算机爱好者的不完整回忆(四十)做过的一些“外挂”

来源:互联网 发布:超市必买清单知乎 编辑:程序博客网 时间:2024/04/28 21:11

  上个月末出差回家,女儿很高兴。由于处在暑假期间,她的冰姐姐也不用上学,所以女儿也就不去幼儿园了,和她冰姐姐在家玩。还好,我家有三台电脑,一台我的笔记本,一台刚配的台式机,还有一台快8年了的台式机,正好一人玩一台。女儿和她冰姐姐玩一个游戏叫摩尔庄园2,回家好几天我都没陪女儿玩电脑,所以那天女儿让我陪她玩摩尔庄园2我就答应了。摩尔庄园2、摩尔庄园跟洛克王国之类的应该差不多,大游戏里面会包含很多小游戏以及宠物养成,女儿玩小游戏前几关还可以,后面就略有一点难了,我就帮她过了好几关。第二天,她和她冰姐姐就给我注册了一个账号,主要是为了我回到大连后可以和她一起在网上玩做迷藏——我女儿发明的玩法,一个人随便躲到某个场景中,另一个人去找。
  既然女儿给注册了,那就玩玩吧。摩尔庄园2刚刚上线两三个月,上面游戏很少,我花了几天把一个类似泡泡龙的游戏打翻了,后来女儿打电话指点我,一步一步让我申请成为画家,培养画家的游戏主要是找不同(类似于找茬游戏)和根据提示图片在场景中找到该物品(提示图片就是缩小版的物品图片)。既然女儿让我玩,我就玩玩吧,发现想得高分还真不太容易,看得眼睛都花了。于是,发挥计算机爱好者的优势,做一个辅助软件吧。
  当天就做了一个初级版本,可以根据左侧的提示找到场景中的物品了,算是一个半自动的版本——当时我没打算做成全自动的版本,我只需要按1~5几个数字键(左侧同时最多提示五个物品),程序会自动根据我按的数字去找对应的物品。这个半自动版本主要功能就是完成了数据的录入,会根据玩家自己寻找到的物品记录位置,下次就会自动找到。当我把数据收集全了,基本上这关也玩过了好多遍了,最后完全收集全了之后我就玩一次完美的,拿到最高分就换到下一关。过了没两天,摩尔庄园搞活动,经验翻倍,于是,决定做一个全自动的版本,只需要把程序运行后什么就都不用管了,程序会自动判断当前关卡是那一关,自动调取数据完成。这个改造其实不难,一天搞定,整个软件实际花费的时间加一起也就两天左右。
  之所以这个“外挂”做得这么快,是因为其中用到的技术都是现成的。首先是获取当前窗口的位置,然后抓图,然后判断这张图是在整个游戏流程的哪一步,根据不同步骤取不同位置的图案进行比对,执行相应的操作。所谓的操作也就是控制鼠标移动点击或者键盘输入,这些技术都是好多年前我就用过的,直接拿来用就可以了。包括根据截取的图片寻找特征点生成脚本命令以及执行这些脚本命令的代码都是现成的。
  细想一下,这类控制鼠标键盘的程序我做过还真不少,我一直不觉得我做的算是外挂,跟真正的外挂相比差得太远,只能算是一个鼠标键盘控制程序,不过为了说起来方便,后面还是用外挂来称呼。我做过的第一个外挂应该是针对一个flash游戏——动物园管理员,跟宝石迷阵一样,可以交换两个图案,如果交换后形成三个相同图案在一条直线上就会消掉。当时用的是Delphi做的,应该说我的大部分这类外挂都是用Delphi做的。第一次做的时候没有任何借鉴,完全是自己想的,先把抓图、获取窗口位置、控制鼠标键盘的技术搞定,然后就是如何判断图案是什么,最后我就用一个点或者几个点的颜色来判断——如果高手做外挂应该是直接获取内存中的数据,更准确快捷——但我没这个实力。反正最后是把这个外挂给做出来了,虽然实现的方式自己觉得不那么帅,但是最终效果非常完美。这直接奠定了我以后所有这类外挂的形式,就是全都是抓图,然后根据抓取的图片进行分析,然后控制键盘鼠标进行模拟人的操作,也就直接导致了我不可能做出大型游戏的外挂。很多人见到我做的小游戏外挂都让我帮他们做一个他们玩的网游的外挂,我都是跟他们讲我做不出来——一是我自己不玩网游,二是知道做这类外挂极度需要技术,要做好的外挂至少得会加密解密封包的数据,这不是俺擅长的。可能我花个一两年好好研究一下也许有可能入门,不过我觉得我坚持不下去,也许觉得研究这个性价比太低:)
  第二个这类的外挂应该是阿达连连看3.0,唯一增加了一点让我有兴趣的代码就是如何判断某两个图片是否只折转两次相连。
  后来姐夫玩联众上面的拼图,当时联众提供了一个单人版本,玩这个单人可以获取经验值,于是又做了一个玩这个单人版本的外挂,不过这个实在没啥技术含量,连智能都没有,就是拿起一个图片挨个位置尝试,成功就换下个。
  去年建行搞了一个E路通游戏,很无聊的类似于大富翁的游戏,主要是做广告,宣传他们的网络银行,每天大概要重复近百次游戏才能达到当日积分上限,所以就做了一个自动玩这个游戏的软件,这个外挂是用C#做的,就学习C#来说,这些技术大部分都算是新的——至少代码都是要重新写,而且Delphi的代码基本上都没有什么借鉴作用。
  算上刚刚做完的这个摩尔庄园2的,一共应该是五个游戏的外挂。实际上,针对游戏我做的键盘鼠标控制程序不多,而针对平时工作或某些繁琐操作所做的键盘鼠标控制程序则非常多。比如,我们单位民品用了一个他们开发的文档管理系统,但是操作非常麻烦,填个晒图单还得一个一个输入,我们经常一出就是几十张图纸文件,一个一个填写非常累,而且他们那个系统还不稳定,如果你操作时间超过20分钟几90%几率会出错。于是我就做了一个软件,可以自动提取文件名和文件编号,然后自动填写到他们那个系统中,人工一个小时的工作用我的这个软件5分钟就搞定。其中用到的主要就是键盘和鼠标控制的技术。我做的很多人一起玩windows自带的空档接龙,其实主要也是靠控制键盘鼠标来完成的选关、开始、结束的。
  应该说控制键盘和鼠标是我从用VB开始就很需要的一个功能,能控制鼠标和键盘操作那么就可以模拟人的操作了,在很多时候很有用,很有用。
  说到外挂了,还应该说到我做过的一个网页触发器,也是由一个网页游戏的外挂开始的。
  原来在雷傲论坛中有一个插件叫百万富翁,就是类似于开心辞典的答题应用。我不是为了赚论坛中的虚拟钱币做这个外挂的,纯属研究技术——因为当时论坛中有一个比武插件有bug,想赚钱太容易了,简直就是想赚多少就赚多少。而且我也说过,我对各种积分都不太感冒。言归正传,这个外挂其实技术上也没多复杂,用了一个Webbrowser控件,在这个控件中去打开论坛,这样就可以获得整个html的代码了,然后就很容易提取到题目,然后到题库中找到正确答案,根据正确答案所在的选项发送一个该单选框的点击的消息就OK了。当然了,也跟抓图类似,你得找到这个网页的特征来判断当前处于什么页面,这样才能准确的执行相应的命令。
  后来,同事在单位的局域网中也架设了一个论坛,里面有一个宠物游戏,可以打怪升级,升级后获得能力点数,可以升级到体力、力量、速度等,升到一定等级后还可以转生。于是我就想做一个外挂。不过这时候我就想了,我不能遇到一个这样的需求就单独做一个外挂,应该做一个通用的基础的外挂,于是就做了网页触发器。Delphi有一个非常好的控件——PascalScript,这是一个脚本控件,你可以在程序运行后在文本框中输入代码由程序解释运行,难能可贵的是这些脚本代码可以访问已经编译完的函数以及窗体中的控件等,算是可以与静态编译的代码完全融为一体。于是,我就写了访问网页中各种元素的过程、函数,以及一些可能用到的键盘、鼠标、窗体等相关的函数,针对不同的应用只需要写一些很简单的脚本就可以完成各种操作。大概只需要几十行的脚本就可以完成根据级别去不同的地点打怪、升级、升级后点数分配、吃药疗伤等操作。算是很成功的完成了这个宠物游戏的外挂。后来为了玩开心网注册马甲,我还用这个网页控制器自动帮我注册信箱——需要自己输入验证码,其余的都自动完成。这个网页控制器其实还远未完善,但是后来没有什么需求了,也就扔在那里了,也还真有些可惜。
  说到开心网,忽然想到还做过一个开心网停车的外挂,不过这个外挂的核心代码不是我写的,是网上有人公布的,我只是改了改,并且做了一个比较好看的界面而已。
  在用Delphi的时候,还做过一个键盘鼠标记录器,就是把用户操作的步骤都记录下来,然后可以回放回去,也可以修改记录下来的数据,结合上一些控制的函数完成很多功能。我做这个软件的时候还不知道有按键精灵,后来我接触到早期版本的按键精灵功能还不如我这个软件多呢,当时的想法其实跟现在的按键精灵所做的很是一致,不过这就是差距啦,人家可以做到现在这样,我就绝对做不到,不是技术的问题。

  不管怎么说,键盘鼠标的控制是我做的软件中应用很广的一类。
  我做了这么多所谓的外挂,除了给姐夫用的那个外,剩下的都是我自己用的,而且基本上爽了两天后就不玩了,做外挂编程有乐趣,用外挂玩游戏只不过为了看一下成果自己得意一下。其实大家看完后就知道,这也算不得什么真正外挂,没啥技术含量。不过能解决问题,总还是不错的。