今天从朋友那里拿了个《抗日-血战上海滩》的游戏,当然是D版的了,安装后开始游戏,居然提示要插入光盘,真垃圾~~~~
本想做个光盘镜象文件吧,但一看硬盘的空间又不够了,算了,还是自己破吧~~~~
一看是国产游戏,感觉还简单一些了~~~~
拿出W32Dasm加载,搜索请“插入《血战上海滩》CD”,居然没有找到,只找到有一个“cdFile”真郁闷~~~~
那就看看他到底是要检测光盘呢,还是要读光盘上的数据呢?
拿出Filemon开始监视光盘,运行游戏后马上退出了,查看Filemon记录,发现游戏要读取以下目录文件
\autorun\zh-cn\epie.JPG
\data_cn\title.bmp
\preconfig\options_l.ini
\AutoRun.exe
\setup.dll
(怎么读这么多?真讨厌~~~~)
再看看对驱动器卷标有没有关联,把这几个要读取的文件copy到硬盘上做了一个光盘镜象文件,不是很大,才几百KB,卷标随便起了一个,用虚拟光驱加入并运行游戏,发现可以玩了,看来和光盘的卷标没有联系了。
我又用Ollydbg打开了程序,在00401645处显示有cdFile字符
00401640 |. 68 C0735B00 PUSH shanghai.005B73C0 ; ASCII "file_count"
00401645 |. 68 B8735B00 PUSH shanghai.005B73B8 ; ASCII "cdFile"
0040164A |. 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
0040164E |. E8 AD230000 CALL shanghai.00403A00
00401653 |. 84C0 TEST AL,AL
00401655 |. 75 1B JNZ SHORT shanghai.00401672
在TEST指令后紧跟JNZ指令,不用说一定有猫腻,在00401655处设置断点运行,没有发现错误提示,我又断点设置到00401657处运行,程序中断在0040181A,弹出错误提示,在Ollydbg右下角发现以下内容:
0012FDCC 00000000 |hOwner = NULL
0012FDD0 00B42810 |Text = "请插入《血战上海滩》CD"豉瘰呔T呐T??瘰
0012FDD4 00B405B0 |Title = "错误"血战
0012FDD8 00000000 \Style = MB_OK|MB_APPLMODAL
好了,什么也不用多说了,开始改吧~~~~~
我用RTA2修改了以下代码:
00401655 |. 75 1B JNZ SHORT shanghai.00401672
修改成:
00401655 |. 75 1B JZ SHORT shanghai.00401672
保存并退出,运行游戏发现正常了,不用读取光盘了,至此破解算是结束了,最后再做一个文件补丁就OK了~~~~
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)