DXBALL2 打砖块游戏 简单分析修改
本帖最后由 spcspcspcspcspc 于 2020-9-9 16:24 编辑周末闲来无事,偶然发现 [原创]DXBALL2 修改版(含776关) win10完美运行!好经典的游戏,仿佛回到了当年。。。貌似帖子里的链接失效了{:1_926:},上度娘 http://www.downxia.com/downinfo/283775.html 可下载。(感谢网友的提醒,又试了一下,原帖资源依然有效{:1_918:},两个地址都能下,游戏是一样的。)
哟,大神还制作了好多版本:
那就省事了,打开 Fairdell HexCmp2 软件,第一个文件选DXBall2.exe,第二个文件选DXBall2 无限命.exe,文件->保存不同部分为文件,输入文件名:无限命.txt,保存
打开“无限命.txt”发现00004A50 处 48 代码改为90,打开OD载入DXBall2.exe,ctrl+G 跳转,点offset ,输入00004A50,OK。
00405650|.48 dec eax 改为了 00405650 90 nop应该是死亡后减掉生命的代码被nop掉了。
同样的操作 找到火球的代码 00405339 FF05 B8845200 inc dword ptr ds:
以DXBall2 无限命满天星版.exe为基准加入火球功能,操作如下:
WinHex软件打开无限命满天星版.exe,发现OD的00401000和WinHex的00000400地址为程序开始位置,所以火球地址00405339 减去401000加上400(都是十六进制计算哦!)等于4739。
ALT+G转到偏移量,填写4739,确定。
光标位置修改为FF 05 B8 84 52 00,保存。打开测试会发现开局自带火球了。
--------------------------------------------第一阶段“偷代码”结束----------------------------------------------------------------
同样用比对文件方法找到满天星版代码为00409843 /0F85 310C0000 jnz 0040A47A 和 00409850 /0F85 240C0000 jnz 0040A47A
就以这两个地址开始分析:
OD载入 跳到00409850地址,向下翻。。。一直翻。。。。忽然眼前一亮:
00409C7F|.83FF 14 cmp edi,0x14 ;Switch (cases 0..14)
0~14做判断?14翻译成十进制就是20,来看一看游戏开始时的界面:
正好20个星星功能块,巧合吗?那么再往下看看:
0是life? 1是level?
这就对的上了吧,哈哈!经过一番分类整理,翻译,猜想。。。。。整理成下表:
第一列序号,第二列OD中对应代码,第三列OD中的注释,第4列自己的猜想,第5列官方解释,最后是图标。
开始测试:我用"无限命火球版"进行测试,因为满天星的太多看不请。
00409C8F 直接改为 jmp 00409C96
就是所有星星改为加生命的星星。
运行测试,发现所有图标改成了+1,但是功能没改,那么这个跳转应该是图标的代码,还得继续找{:1_926:}。。。
我猜想功能的代码和图标的应该形式一样,OD重开程序,OD中右键-查找-所有分支。
发现了吗,第六行和第八行都是0~14做判断,第八行 00409C7F 是刚才分析的,那就进第六行看看呗!
同样 00407040 改为 jmp 00407047
运行测试,发现图标啥样的都有,但是功能都是加命了,每吃一个,右上角的挡板多一个,看来找对位置了{:1_918:}。
分裂星星代码C 位置:004072B9 > \E8 02E5FFFF call DXBall2_.004057C0 ;Case C of switch 00407037
死亡星星代码D 位置 0040734C > \E8 DFE2FFFF call DXBall2_.00405630 ;Case D of switch 00407037
直接改为 jmp 004072B9 就是死亡改为分裂
修改后代码:0040734C E9 68FFFFFF jmp DXBall2_.004072B9
0040734C-401000+400=674C,WinHex软件打开一阶段中改好的火球满天星版本,ALT+G转到偏移量,674C,确定,改为 E9 68 FF FF FF。
打开测试发现不在害怕骷髅头了{:1_918:}。
--------------------------------------------第二阶段“改星星”结束----------------------------------------------------------------
但是!小球分裂的太多!太多!太多!卡死了。。。还得继续努力!!!
打开火球版,祭出神器Cheat Engine,搜索数据1,因为开始就一个小球,慢慢打,吃到分裂球后按“P”键暂停,搜索数据2,然后多找几次找到小球数量的地址0052AEA4
多次实验发现这个地址是固定的,又省事啦:lol!
回到OD,004072B9 > \E8 02E5FFFF call DXBall2_.004057C0 ;Case C of switch 00407037
就是分裂球的代码位置,记下代码 call004057C0 ,还有下一行地址 004072BE 。
拖到程序最后,找到空代码的地方:
地址为00431536,回到分裂球位置004072B9 改为jmp 00431536
修改后代码:004072B9 /E9 78A20200 jmp DXBall2_.00431536
00431536处修改代码如下:
00431536 A1 A4AE5200 mov eax,dword ptr ds: 从52AEA4地址加载小球个数。
0043153B BA 50000000 mov edx,0x50 小球数量50个,实际效果为最多50*2=100个,可自行修改数量。
00431540 3BC2 cmp eax,edx 比较数量。
00431542 0F8F 1B5DFDFF jg 00407263 当前小球数量大于50个则跳到火球代码处,否则向下运行。也可以调到别的代码,自行修改。
00431548 E8 7342FDFF call 004057C0 分裂的第一步用来跳转了,此处来补全分裂代码第1步。
0043154D E9 6C5DFDFF jmp 004072BE 跳回到分裂代码第2步。
--------------------------------------------第三阶段“限制小球数量”结束----------------------------------------------------------------
经过一天折腾,发现 4增强火焰砖块、D 直接死亡、13八球连环,必须改为分裂,
4增强火焰砖块不改的话会一直分裂,比消除的还快,死循环了。
D 直接死亡必须改。
13八球连环不改的话也是会无限小球直接卡死,也可以增加数量限制,直接改掉更省事。
其他的看自己喜好,表格中标黄的我都改了。
终于写完了,实际在分析调试的时候一不留神各种出错,调试的时候还是多记录,多备份。
媳妇问我:你这样玩游戏还有意思吗?
我:,程序员的快乐你不懂!
有网友留言说希望楼主有空整个挂啊,这游戏超级想看某些画面的
我说个简单的办法吧
打开CE
加载5274E0地址,这个地址是关卡的数值
修改数据就可以跳关
不知道想看的是哪个画面?欢迎留言讨论! 好吧,果然修改才是程序员的乐趣,而不是游戏本身{:1_918:} 沙发~是乐趣。 {:1_909:}牛逼从不v{:1_904:} 程序员的思维也是很独特的平时生活中就能看出来 做的不错,鼓励就一下
谢谢分享,学习了. 教程简单明了。谢谢楼主分享 学习了!谢谢楼主! 哈哈哈哈,程序员的快乐媳妇当然不懂啦{:1_918:}