【续】《英雄无敌》3完整版complete(英文)——免CD修改(完美版)

查看 151|回复 11
作者:darkf   
[color=]一、前言
在前一篇文章中,介绍了《英雄无敌》3的complete(英文)版的免CD制作,但那是一副仓促之作,破解得很粗糙,留下了很大的不足!
《英雄无敌》3完整版complete(英文)——免CD修改


h3-0.png (84.94 KB, 下载次数: 0)
下载附件
2024-10-15 01:21 上传

由于《英雄无敌》3的一些过场动画,是放在光盘上,通过程序加载时,再把这些资源加载到内存的,因此,程序中对光盘信息的处理远较其它游戏复杂,而前文对程序调式不足,只是仓促绕过光驱检测,而在光驱上的资源也因此完全舍弃,自然程序中就缺少了一些动画资源,导致那次的免CD留下了不小的遗憾!而我又是一个强迫症者,这种不“完美”总是如鲠在喉,于是便有了这次完美版免CD。
[color=]二、准备工作
准备工作有两项:
1、 挂载《英雄无敌》3的play盘,把其中的Heroes3目录复制到电脑游戏安装目录里(我为了偷懒,把目录名称Heroes3改成了H3)


h3-0-2.png (68.97 KB, 下载次数: 0)
下载附件
2024-10-15 01:22 上传

2、 用hex编辑软件(如:010Editor)打开游戏程序,来到02D0处,输入如下图所示数值


h3-0-3.png (57.06 KB, 下载次数: 0)
下载附件
2024-10-15 01:23 上传

保存好就可以逆向了。
[color=]三、逆向修改过程
首先要说明一下,修改的一个非常重要的注意事项:修改的子程序一定不是“通用”子程序,即这个子程序只在此处调用,否则是不能修改的,切记!
在前文中已经找到了加载光驱的子程序了,即004ED650,关键call在004ED9A6处的call 0050C1C0。用X32dbg打开刚刚添加数值的游戏程序,直接在004ED650处下断点,并运行(前文已经把这个call修改成了mov eax,7了,把它还原成call 0050C1C0)


h3-0-4.png (127.58 KB, 下载次数: 0)
下载附件
2024-10-15 01:24 上传

步入这个子程序。一路向下,在50C293处,遇到了跳转,自然是不能跳的,将其改成不跳。


h3-0-5.png (70.27 KB, 下载次数: 0)
下载附件
2024-10-15 01:25 上传

接着来到50C2AA处,光驱检测后,要是eax为5就是有光驱,但是免CD自然是没有的,eax=1,所以这里的跳转自然也不能让其自由地跳了。


h3-0-6.png (164.6 KB, 下载次数: 0)
下载附件
2024-10-15 01:26 上传

接着在2B4处看到上面的call返回的结果应该是注册表中的游戏光驱信息,这个自然是不能再使用的,要把它改成我们在前面准备的第二个的那个地址,即004002D0,采用“先”直接修改eax(等后面一起考虑如何修改代码)


h3-0-7.png (230.19 KB, 下载次数: 0)
下载附件
2024-10-15 01:27 上传

向下接着看到判断eax值并跳转或者输入值,这里的输入值本来应该跳过的,这样正好拿来修改代码。做法是跳转到下一行,将下一行改为给eax赋值004002D0


h3-0-8.png (141.63 KB, 下载次数: 0)
下载附件
2024-10-15 01:28 上传

改成这样


h3-0-9.png (140.11 KB, 下载次数: 0)
下载附件
2024-10-15 01:28 上传

再向下到2CD这行时,程序又给eax赋给注册表内的值。


h3-0-10.png (158.63 KB, 下载次数: 0)
下载附件
2024-10-15 01:29 上传

因此这里又要修改eax的值。考虑到这里命令码数不够用,所以要三行全部变动。具体:将2D0行提升到2CD处,将2CD和2D3行的5个码合并成赋值命令,改成如下:


h3-0-11.png (126.74 KB, 下载次数: 0)
下载附件
2024-10-15 01:30 上传

这样再一路下来发现这个子程序没有问题了,返回到004ED650中。紧接着在4ED9B0处进入598210这个子程序。在21E和223处,24C和251处,遇到前面同样的事,将提供的地址再次赋给eax,修改如下


h3-0-12.png (131.68 KB, 下载次数: 0)
下载附件
2024-10-15 01:31 上传

接着在5DF处再次遇到赋值注册表值


h3-0-13.png (121.59 KB, 下载次数: 0)
下载附件
2024-10-15 01:32 上传

考虑到后面606处,再次调用局部变量[ebp-10]里的注册表值,因此这里对命令作个大调整,即把我们的地址赋给edi,同时修改[ebp-10]里的值为我们的地址,这样后面再赋值就不是注册表值,而是我们提供的地址了。最后改成如下


h3-0-14.png (145.26 KB, 下载次数: 0)
下载附件
2024-10-15 01:32 上传

至此全部改完。
[color=]四、测试
打开游戏,选战役模式


h3-0-15.png (1.01 MB, 下载次数: 0)
下载附件
2024-10-15 01:33 上传

开始动画出现


h3-0-16.png (561.91 KB, 下载次数: 0)
下载附件
2024-10-15 01:34 上传

让英雄战败导致游戏失败


h3-0-17.png (317.78 KB, 下载次数: 0)
下载附件
2024-10-15 01:35 上传

[color=]五、下载
https://wwzd.lanzoup.com/ixJR32ck1vxa

下载次数, 下载附件

cao777   


☆木木可可★ 发表于 2024-10-15 08:29
谢谢楼主的不懈努力,我也很喜欢这些老游戏,尤其是2005年前的一些游戏,画面比起现在的虽然粗糙,但是制作 ...

画面虽然看起来粗糙 其实配色 布局 可一点都不比现在的差 甚至比现在更好
当时很多都是手工画的 当时的美工水准 风格也都和咱们的口味相投
不像现在的美工都是计算机搞的 花里胡哨的 一点没有美的感觉
其实除了操作手感 别的都比现在的好 就这个操作手感(比如跟手感觉等体感)比现在要差些
darkf
OP
  


zxsbk 发表于 2024-10-15 17:44
下载了程序不知道怎么打开

光有这个出现不行的,你要下载我第一次免CD那篇里的下载链接中的游戏光盘镜像文件,用虚拟光驱挂载后安装游戏,再把这篇里下载的主程序放到你游戏安装目录里,以后就不用加载CD镜像就能直接玩
EssenceA1   

感谢分享经典
Lty20000423   

非常经典的一款游戏
tzblue   

记得99年开始玩Hero3,相比2代有巨大提升,直到现在有时还玩一会。感谢楼主分享!
lighterleon   

感谢楼主分享,想当年整宿玩儿,慢慢的回忆
wqipk   

很详细,收获颇多。
tydzjing   

要是能汉化就好了
rlx2003   

没想到我们玩过的英雄3是经历了这么麻烦的破解,真厉害
您需要登录后才可以回帖 登录 | 立即注册

返回顶部