《英雄无敌》3完整版complete(英文)——免cd修改

查看 108|回复 10
作者:darkf   
[color=]一、概况
《英雄无敌》3,在是魔法门6取得巨大成功,又在《英雄无敌》2大热后,new world computing大力开发并完善的一款益智类策略游戏。最初版本《埃拉西亚的光复》(简称ROE有8个种族,城堡(Castle)、塔楼(Tower)、壁垒(Rampart)、要塞(Fortress)、据点(Stronghold)、地狱(Inferno)、墓园(Necropolis)、地下城(Dungeon),每个族有7个等级的兵种,兵种都有升级模式,加上6种中立兵种,ROE共有118种单位;而资料片《末日之刃》则增加了元素生物和一些中立生物,合计141种。第二个资料片《死亡阴影》(The Shadow of Death,简称SOD),发行于2000年3月31日。因为元素城的不平衡,在SOD中被取消了,不过单位的设计依然存在,此外游戏添加了7章新战役,新的传送门和7种新的特殊地形,以及12个组合宝物,可以说很多人玩大地图就是了收集宝物特别是组合宝物的快感,同时游戏还平衡修正了一些数值,增加了护城河伤害和战役难度选择。至此SOD共有141种兵,与上一个资料片完全相同。
接着,3DO公司又将三部合并成一个完整版(Complete Edition)进行了发行,本次免CD修改就是在该版本上进行的。
[color=]二、逆向过程
首先放进Die检测一下壳情况


h3-0.png (44.11 KB, 下载次数: 0)
下载附件
2024-9-2 18:58 上传

可知是没有壳的。
用OD打开程序


h3-1.png (110.58 KB, 下载次数: 0)
下载附件
2024-9-2 18:59 上传

自然先去搜索字符串


h3-2.png (79.42 KB, 下载次数: 0)
下载附件
2024-9-2 19:00 上传

情况不妙,居然没有搜索到,说明根据没有CD的提示字符串去寻找程序检查光驱的子程序,这条路径是不通的,得另想方法。
这时得祭出WinAPI了,与光驱有关的API,给下图的2个API打上断点


h3-3.png (138.33 KB, 下载次数: 0)
下载附件
2024-9-2 19:01 上传

检查一下断点情况,没错,正是所要的


h3-4.png (47.08 KB, 下载次数: 0)
下载附件
2024-9-2 19:02 上传

运行程序后,程序被断下


h3-5.png (66.77 KB, 下载次数: 0)
下载附件
2024-9-2 19:02 上传

跟进去,来到调用处


h3-6.png (109.24 KB, 下载次数: 0)
下载附件
2024-9-2 19:03 上传

此时,我的虚拟光驱是挂载的,所以,看到该API的返回值是eax=5,从注释来看,5正好是DRIVE_CDROM。


h3-7.png (117.86 KB, 下载次数: 0)
下载附件
2024-9-2 19:04 上传

接着run to return看看是否出现没有CD的提示以及是那个调用的这个子程序。结果没有提示出现,而来到了调用处。


h3-8.png (147.36 KB, 下载次数: 0)
下载附件
2024-9-2 19:05 上传

很显然,这个call就是检测CD的关键call了。撤掉前面对Drive的API断点,在此call处下断点。但在运行前,先看看程序后面有什么东西。显然这个程序的返回值先被保存到[69957C],后面接着的2个相同的call都是提示有问题的,会导致程序关闭的。


h3-9.png (120.9 KB, 下载次数: 0)
下载附件
2024-9-2 19:06 上传

在上面2个提示call之后,还将存在[69957C]里的那个子程序的返回值调出来,如果不为0的,将跳转;若为0的,还会在后面将5、6冲掉[69957C]里面的数值。


h3-10.png (163.13 KB, 下载次数: 0)
下载附件
2024-9-2 19:07 上传

如果关键call的子程序返回值不为0,将会跳转到这里(如图)


h3-11.png (190.99 KB, 下载次数: 0)
下载附件
2024-9-2 19:07 上传

这样,就可以在关键call的子程序返回值上动脑筋了。
首先,返回值5、6可以排除。
接着,把正确的play盘挂载上去,看看返回值是多少?结果是0


h3-12.png (129.39 KB, 下载次数: 0)
下载附件
2024-9-2 19:09 上传

再把虚拟光驱卸载,即没有光驱,结果是2


h3-13.png (116.86 KB, 下载次数: 0)
下载附件
2024-9-2 19:09 上传

再把虚拟光驱加载但挂载是非play盘,结果还是2


h3-14.png (115.28 KB, 下载次数: 0)
下载附件
2024-9-2 19:10 上传

再看该子程序中,有5种情况的返回值,分别是:
[Asm] 纯文本查看 复制代码0050C21C  |.  B8 03000000   mov eax,3
0050C23F  |.  B8 04000000   mov eax,4
0050C302  |.  33C0          xor eax,eax
0050C4D1  |.  B8 02000000   mov eax,2
0050C592  |.  33C0          xor eax,eax
至此,知道了eax的情况,大致有:0、2、3、4、5、6。
下面,先试试不调用这个子程序情况能否运行?即将call改成直接跳过。结果是程序中断。


h3-15.png (114.01 KB, 下载次数: 0)
下载附件
2024-9-2 19:12 上传

既然直接跳过不行,那就直接给eax赋值。先试试1。


h3-16.png (105.42 KB, 下载次数: 0)
下载附件
2024-9-2 19:13 上传

结果还是出现没有CD的提示,说明1不正确。再试试7,结果成功了。


h3-17.png (118.21 KB, 下载次数: 0)
下载附件
2024-9-2 19:14 上传

再试试8,也是可以的。


h3-18.png (104.63 KB, 下载次数: 0)
下载附件
2024-9-2 19:14 上传

说明大于6的返回值都是可行的。至此,免CD基本成功了。
[color=]三、不足之处
这样免CD后,由于游戏中有的资源(如:战役模式中的动画,应该是存在光盘上的,所以只有文字而没有动画了,还有就是失败后,被斩首的动画也没有)是存在光盘上,涉及这些资源的游戏调用,自然就调用不到了。
[color=]四、hex编辑软件直接修改
如果不想使用OD的,也可以直接使用hex类的编辑软件如:010Editor,进行直接修改。从前面的图片可知,要修改的命令是在004ED9A6地址的call 0050C1C0,将其改为:mov eax,7即可。
下面用010Editor打开heroes3.exe,选search工具栏里的go to


h3-19.png (160.91 KB, 下载次数: 0)
下载附件
2024-9-2 19:17 上传

在地址栏里输入000ED9A6,这个就是call 0050C1C0命令行的偏移地址,再回车


h3-20.png (137.42 KB, 下载次数: 0)
下载附件
2024-9-2 19:18 上传

来到这里,其中:E8 15 E8 01 00正是call 0050C1C0


h3-21.png (94.37 KB, 下载次数: 0)
下载附件
2024-9-2 19:18 上传

将其改成:B8 07 00 00 00,即mov eax,7即可,保存的程序就是免CD的了。


h3-22.png (92.06 KB, 下载次数: 0)
下载附件
2024-9-2 19:19 上传

[color=]五、资源下载
《英雄无敌》3complete版(英文)下载:
https://www.123pan.com/s/7jpKVv-7bjCh
《英雄无敌》3complete版免CD修改后的程序和win11可以直接运行的HD补丁下载:
https://www.123pan.com/s/7jpKVv-YZjCh

下载次数, 下载附件

xiangzz   

经典的游戏,一台电脑多个小伙伴一起玩!
wc614445720   

第一眼看免CD,我以为出了个技能免CD的,后来想想不对,这游戏就没有技能CD这个东西,再来一眼发现是那个CD
zjtzjt   

感谢分享,经典游戏
EssenceA1   

这个厉害,当年爱不释手的游戏
简单头脑   

这个是真经典的,当年都是不停的刷着玩。
nitian0963   

这个厉害,当年爱不释手的游戏
sunshinezero   

经典游戏 玩了好多年
坐久落花多   

当年挺喜欢H3的尤其是末日之刃,可惜后面的版本都不喜欢
dopey   

没玩过,有时间试试
您需要登录后才可以回帖 登录 | 立即注册

返回顶部