andersgong 发表于 2020-7-27 11:32

《OD陪你玩暗黑2》之小站全开

大家好,距离本系列的上一篇“《OD陪你玩暗黑2》之运动员入场”(https://www.52pojie.cn/thread-1225270-1-1.html)已经过去了好几天,今天我们来看一看怎么解决一个新人很困扰的问题:跑图。对,就是跑图,尤其是不开任何插件的情况下,迷宫地图能把人累趴下,因此,本章我们就来手把手的教你怎么在dll里用逆向的思路来开图。
说明:本章所用的版本是1.10b,创建新号,进入游戏,踩小站截图如下。


废话不多说,开搞,老规矩,吾爱专用版od开起来:

带上参数-w表示窗口化运行,方便我们进行调试。

进入游戏后,按下ALT+E快捷键,进入d2common.dll空间,然后鼠标右键选择查找所有参考文本串:

然后再鼠标右键,在d2common.dll的所有文本字符串里搜索“waypoint”,也就是小站的英文名:

注意不要区分大小写!

结果搜索以后,我们找到了这个字符串集中出现的区域:


鼠标双击第一行进入源代码,然后经过比较这上下的几个函数,正好第一个函数最复杂,看起来也最像是小站逻辑判断:


经过分析源代码,上面都是些参数合法性判断,真正的精华,在最后return之前的那一块:


我们在retn 0x8这里下个断点,然后让游戏角色走过去踩小站,这里就会被断下来,我们狂按F9直到调用完成,记录下此时的寄存器内容
然后,我们再换一个小站全开的角色,重复上面的过程,也记录下最终的寄存器内容:

很明显不对,最终存放返回值的EAX结果不同!!!
这就为我们接下里的工作指明了方向!

我们聚焦到retn之前这段代码,看看EAX的结果是怎么产生的:


一眼看出,EAX的结果会受到ESI和EDX的共同作用,所以我们还是在retn这行下断点,重复上面的过程,不同的这次我们要小心一些,不要狂按F9,要停在最后一次调用结束的位置,截图如下:

果然,EDX的结果一样,但小站全开角色的ESI却是FFFF,基本搞定,漂亮!

我们找到mov si,word ptr ds:,修改为硬编码即可:



然后再让人物去踩一下小站看看效果:


完美搞定!下一章,我会讲一下怎么结合这两篇教程的方法,在尽量不修改原版dll的情况下,通过补丁的方式集成小站全开功能。

1.10纯净绿色版:链接:https://pan.baidu.com/s/1WBoba90trYnqRQxCt5pGQQ 提取码:efwt


变态角色存档:链接: https://pan.baidu.com/s/1fzaNBNFWiPG9GCOebIH6jg 提取码: kphp

andersgong 发表于 2020-9-15 18:04

callme_lt 发表于 2020-9-15 16:32
这种操作是不是只适合单机版的,如果战网的能检测出来吗

现在的战网基本都自带小站全开了,即使没有全开一般也有分享的踩点号,当然,我说的不是暴雪的战网:lol

a910673331 发表于 2020-7-27 12:42

好老的游戏了

BUG606 发表于 2020-7-27 12:47

哈哈 有意思,学到了

国际豆哥 发表于 2020-7-27 12:53

牛叉学到了

zqj899 发表于 2020-7-27 12:54

进来学习一下

myao5230 发表于 2020-7-27 13:16

以前玩过,现在没时间玩了。谢谢

得条毛 发表于 2020-7-27 13:25

牛啊老大学习下谢谢啦~~~~~~

pec1987 发表于 2020-7-27 13:31

只为进来给大佬加个分!点个赞!

andersgong 发表于 2020-7-27 13:49

pec1987 发表于 2020-7-27 13:31
只为进来给大佬加个分!点个赞!

感谢,我也是初学者,不是大佬{:1_892:}

岂是善类 发表于 2020-7-27 14:16

感谢分享
页: [1] 2 3 4 5 6
查看完整版本: 《OD陪你玩暗黑2》之小站全开