暗黑破坏神(DIABLOII 1.11B)BOT制作(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LingLingQI_Leon/article/details/70216831

(一)浅谈暗黑BOT

暗黑破坏神(DIABLOII)是十几年前暴雪推出的一款经典网络游戏,是网络游戏的开山经典之作,很多玩家都是从大菠萝1.09时代开始玩起,从1.09时代的神器WF到1.10的符文之语TP+、无线电法师,DIABLO带给我们无数乐趣,游戏、物品、技能设计堪称经典。DIABLO推出的同时就有很多辅助的外挂工具同时出现,最出名的当属MapHack和HackMap地图外挂,能够实现自动打开地图,自动辅助显示一些物品,自动指路等等非常有用的功能,此外就是一些自动化打怪MF的工具称之为BOT,从DIABLO 1.09时代到现在的1.13,陆续出现过MMBOT、D2JSP、KPBOT等很多BOT工具,到后期出现的D2NTBot,非常健壮,功能十分强大。本人也有过数次挂BOT被BAN的经历,BOT虽然给DIABLO具有很大的伤害,有了BOT基本也就失去打神器的动力,但是BOT也是DIABLO粉丝的一大兴趣所在。

作为有十几年经历的DIABLO玩家,一直以来却没有仔细研究过BOT和MapHack的工作原理。期间也有过使用按键精灵等鼠标模拟软件制作一些登陆、建游戏等辅助的小工具,也有用按键精灵编写的KP Bot,但是按键精灵这类软件只能模拟鼠标键盘操作,不能读取利用游戏的内部数据结构,因此局限是非常大的,不能或者很难实现一些复杂的功能,比如复杂一点地图的找路,基本是实现不了的。最近再次回归暗黑,在国内一著名的私服完了一个多月,再次萌生使用BOT的念头,也不再满足按键精灵实现的小功能。由于D2NT一类的BOT虽然非常强大,但是基本只支持1.12后的DIABLO版本,现在国内的私服基本都是1.11B的版本,适合1.11的BOT现在已经很难找到,再加上人到中年,最近单位工作比较闲点,虽然是十几年前的程序了,兴趣所在还是决心仔细研究一下MapHack的原理。

MapHack是十几年前国外一个名为MousePad(鼠标垫)的牛人最初编写的,截获了Diablo程序内部100多个函数的地址,还有大量的内部数据结构,再次对MousePad的非凡逆向工程能力表示钦佩!后来国内Sting对HackMap进行了修改推出了HackMap。MapHack的初期版本是开源的,MapHack2.24版本的源代码在很多网站上还能找到(下面的网站可以下载:http://extreme-gamerz.org/diablo2/viewdiablo2/hacksdiablo2)。MapHack的工作原理在Sting的博客中有详细的介绍,不在赘述,简单讲就是找到内部一些有用的函数地址,利用这些函数地址我们可以实现两种功能:一是可以我们自己写的外挂程序直接调用,比如利用内部的发送数据包函数,模拟向服务器发数据包实现诸如TP、与NPC交互、释放魔法、复活PET等等几乎所有功能,二是可以把一些函数的最初几个命令修改为call或者jmp,跳转到我们自己的函数,从而修改游戏的一些功能,类似windows的HOOK技术,Sting的博客称之为旁路。利用这种HOOK技术,可以修改游戏的一些功能,比如可以支持只显示有用的物品、支持地面物品一直显示等,MapHack上的这类功能就是这么实现的。BOT里面可以HOOK游戏的发送和接受数据包函数,并用OutputDebugString输出到DebugView中,对于解析游戏数据包非常有用,还可以通过截获服务器端数据包判断游戏的一些状态。

虽然已不再从事技术工作七八年时间了,还好基础还在,经过细心研究,最终总算大概搞明白MapHack的大致结构和内部数据结构的大概含义。由于没有任何文档和资料介绍,而且十几年前的源代码,开始时编译都是大问题,研究十分幸苦。不过结果还好,经过一个多月的调试再加上编写新软件,最终算是成功实现了自己的BOT,与现在流行的D2NT一类的BOT相比,可以算是一个小型的D2NT BOT了,只是对场景怪物的支持没有D2NT的全面罢了,其他基本类似了,可以实现自动喝药水、血少自动退出、任何场景可以实现自动找路TP、城内走路具有一定的健壮性、自动购买药水和卷轴、自动发现装备损坏程度自动修复装备、支持PET功能、自动复活PET,支持自定义捡取并识别物品、物品识别支持对加技能、加力量、ED、FCR、加某一类角色的技能等等基本所有有用的属性(因此可以设置只捡取如暗金项链里的4r=30的马拉,只捡取dex20的乌鸦戒指,只捡取绿色项链里的tlx),可以完美实现A1安达利尔、A2督瑞尔、KP和打A1女伯爵、A2召唤者、A5尼拉塞克钥匙的功能,其他怪物添加基本都是类似,技术上完全没有问题。

至此实现这么一个BOT已经远超我的预期,而且根据BOT功能的需要,自己还成功找到了游戏客户端中另外两个需要用到的函数地址,修改了MapHack源码上的一处数据结构错误。不过使用BOT的后果还是一样的,老玩家都知道,长期挂BOT没有不被发现的,果然没多久战网停权里就有了我的全部账号名单。也好,可以好好休息一下,再次对DIABLO说再见了。为了记录此次研究的成果,特意将相关技术文档记录在此,如果大家感兴趣,可以把源码整理一下放上来。

应大家要求,把bot放上来,供参考测试,出现的任何问题不要与我联系,我也不负责修改bug。

春节期间重新改进了部分代码,修改了BOT经常出错的bug,改进发送数据包功能,下面是最新版本。

链接:https://pan.baidu.com/s/1nqW3Mbb_a9EL1K6dsZM5Tw
提取码:1k97
复制这段内容后打开百度网盘手机App,操作更方便哦

没有更多推荐了,返回首页