暗黑破坏神(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尼拉塞克钥匙的功能,其他怪物添加基本都是类似,技术上完全没有问题。 |