Deer Hunter 2005 光盘版补丁制作

atari公司的DeerHunter系列一直是我比较喜欢的游戏,射杀雄鹿并非这款游戏的乐趣所在。制作精美的大自然野外3D场景才是吸引我的地方。我玩的最新的版本是2005版,基于DriectX8的引擎。从最早下载到Demo,进入伊利诺斯州的树林,我就被茂密的树林惊诧了,因为相对于上一版2004版光秃秃的树木,这一版所有的林木,针叶的,阔叶的,棺木,还有蒿草,水草,材质制作的非常精美,已经看起来很有点真实感了。

不知不觉玩这款游戏都快四年了,不过最近两年很少玩了,昨日突然想起来它了,怀念起那片树林了,就想进去看看。但是一个的问题出现了,我把之前下载的游戏光盘的iso镜像文件不知道什么时候给删除了。虽然硬盘上还有完整的安装目录,但是进去之后不能建立游戏了。真衰,不知道以前啥时候硬盘紧张的时候头脑一糊涂就当作多余的东西给删除了。

没办法了,把IDA再调出来,看看能不能自己做个补丁吧,网上玩这个的人太少了,这个光碟镜像还是很早的时候用电驴下载的,现在肯定已经没有了。还是从弹出对话框的字符串入手,找到相关的函数。发现它的算法是这样的:首先枚举所有的Drive,判断其VoluneName是否等于"DH2005",然后在上面搜寻"/Data/data.spk",如果找到,则判断其DriveType是否为DRIVE_CDROM,并在上面搜寻一个特殊的名字很长的exe文件,(昨天的事,也没有留文档,现在想不起来了)。如果没有符合条件的就弹出对话框,提示插入CD-ROM,如果有,则正常进入。很有意思的是,之前搜寻到的路径,在下一步并没有作用,程序运行的还是在当前路径,所以光碟其实是没有用的,在运行的时候。

就针对以上几个判断,自己用工具制作了一个补丁,主要都是些跳转指令,将条件转移改成绝对跳转指令。其中有一条判断DriveType的返回值是否等于5(DRIVE_CDROM),将其修改为3(DRIVE_FIXED),就可以了。再次进入之后,发现大大的"Hunter"按钮终于又回来了!哈哈。

花了一个小时制作好补丁之后,心想既然已经度过代码了,不如干脆将其存档文件的格式也破解了算了。它的存档放在./game/profile/*.pro中,还是从字符串入手,找到含有"*.pro"的子串,查找其引用的地址,就找到了相关的函数,经过几番Step In, Step Over,终于找到了加密的核心算法:

就是一个不断变换的异或过程。加密解密都是用的同一个算法,用MFC重新实现了,转换了几个存档,对比后很完美。

但是现在虽然能明显的看到其内容了,却不能随意修改,因为其格式并不是固定的,而是用C++的流函数生成的,存储对象和存储对象之间的边界无法确定,所以很容易就出错,造成游戏无法读取进度。这方面需要深入了解游戏的内核,是在太费精力了,就到此为止了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值