说明:本章所用的版本是1.10b,创建新号,进入游戏,踩小站截图如下。
08.png (585.87 KB, 下载次数: 2)
下载附件
2020-7-27 11:23 上传
废话不多说,开搞,老规矩,吾爱专用版od开起来:
01.png (103.47 KB, 下载次数: 2)
下载附件
2020-7-27 11:24 上传
带上参数-w表示窗口化运行,方便我们进行调试。
进入游戏后,按下ALT+E快捷键,进入d2common.dll空间,然后鼠标右键选择查找所有参考文本串:
02.png (118.78 KB, 下载次数: 2)
下载附件
2020-7-27 11:24 上传
然后再鼠标右键,在d2common.dll的所有文本字符串里搜索“waypoint”,也就是小站的英文名:
03.png (99.89 KB, 下载次数: 0)
下载附件
2020-7-27 11:24 上传
04.png (16.99 KB, 下载次数: 2)
下载附件
2020-7-27 11:24 上传
注意不要区分大小写!
结果搜索以后,我们找到了这个字符串集中出现的区域:
05.png (81.17 KB, 下载次数: 1)
下载附件
2020-7-27 11:25 上传
鼠标双击第一行进入源代码,然后经过比较这上下的几个函数,正好第一个函数最复杂,看起来也最像是小站逻辑判断:
06.png (98.83 KB, 下载次数: 3)
下载附件
2020-7-27 11:25 上传
经过分析源代码,上面都是些参数合法性判断,真正的精华,在最后return之前的那一块:
07.png (91.61 KB, 下载次数: 1)
下载附件
2020-7-27 11:25 上传
我们在retn 0x8这里下个断点,然后让游戏角色走过去踩小站,这里就会被断下来,我们狂按F9直到调用完成,记录下此时的寄存器内容
然后,我们再换一个小站全开的角色,重复上面的过程,也记录下最终的寄存器内容:
09.png (20.3 KB, 下载次数: 2)
下载附件
2020-7-27 11:25 上传
很明显不对,最终存放返回值的EAX结果不同!!!
这就为我们接下里的工作指明了方向!
我们聚焦到retn之前这段代码,看看EAX的结果是怎么产生的:
10.png (33.98 KB, 下载次数: 3)
下载附件
2020-7-27 11:26 上传
一眼看出,EAX的结果会受到ESI和EDX的共同作用,所以我们还是在retn这行下断点,重复上面的过程,不同的这次我们要小心一些,不要狂按F9,要停在最后一次调用结束的位置,截图如下:
11.png (20.12 KB, 下载次数: 1)
下载附件
2020-7-27 11:26 上传
果然,EDX的结果一样,但小站全开角色的ESI却是FFFF,基本搞定,漂亮!
我们找到mov si,word ptr ds:[edx+eax*2],修改为硬编码即可:
12.png (35.39 KB, 下载次数: 2)
下载附件
2020-7-27 11:27 上传
14.png (21.77 KB, 下载次数: 1)
下载附件
2020-7-27 11:29 上传
然后再让人物去踩一下小站看看效果:
13.png (576.52 KB, 下载次数: 1)
下载附件
2020-7-27 11:29 上传
完美搞定!下一章,我会讲一下怎么结合这两篇教程的方法,在尽量不修改原版dll的情况下,通过补丁的方式集成小站全开功能。
1.10纯净绿色版:链接:https://pan.baidu.com/s/1WBoba90trYnqRQxCt5pGQQ 提取码:efwt
变态角色存档:链接: https://pan.baidu.com/s/1fzaNBNFWiPG9GCOebIH6jg 提取码: kphp