| 修改众 |
08-03-03 08:16 |
[attachment=2042]
作为普通的RPG游戏,都有生命,魔法,经验 之类的基本要素。 修改的也就是这些东西。
看完老长的还不让跳过过场动画后,总算有了第一场战斗。 按照习惯,看了看自己的生命,60。 于是选择2bytes,然后挨打,再找减少后的生命值。 结果0个 ........
没有结果?嗯。。。那好吧,等会再改 1般第一场战斗都很轻松,为了让玩家适应操作。 果然,战斗结束后,NPC给了传送站和手机。(开玩笑,不过给的道具功能就是这样 存档点可以补满血,存档,还可以在各个存档点之间传送。(嗯...RPG游戏不都是这样吗 存档。 随便跑跑看看,练练提示中的技能。不停按攻击就是普通连击(嗯,操作感还不错 怪物的智商比较低,当然,刚开始遇到的怪也不会很强
好了,习惯了操作,那么开始认真改
既然准确数值没有结果,那就用模糊搜索。 就用经验值吧,因为通常这个数据的处理方式都比较固定。 杀1个怪经验就增加1些,杀了5个怪后,结果就剩下100个左右了 还有100个结果啊,不过这个场景的怪却只剩下最后1个了 如果是动态地址,换场景后经验地址可能会改变。 那就先看看这100个结果吧
前10几个结果是绿色的? (CE中绿色地址表示基地址,全局变量 那就看看这几个基地址。将0,4,8,c结尾的基地址都加入列表 (0,4,8,c结尾的才是1个4byte内存的开始位置 只有3个地址。其中第1个和第3个和经验看起来关系不大,数值上没什么明显的联系之处。 第2个地址是 11xxxxxx,看起来应该是个浮点数,那好,在数据类型上双击,将4bytes换成float 于是数值变成了非常接近经验值的1个小数。
哦~有门!经验值难道是浮点数? 将经验值改大点吧,加个0好了。 回到游戏,发现人物立刻就升级了。 就是它了,这就是经验值的地址。(第一次碰到用浮点数保存经验值的,又长见识了
既然经验是静态地址,那其他能力想必也都是静态地址。 做过游戏的人都知道,经验值通常在人物能力数组中,和hp,mp都不会太远。 而数组在内存中都是连续存放的,所以其他能力应该就在经验值附近。
打开内存查看,定位到经验值地址上 然后上下看看附近的地址。 果然,附近有很多值得注意的东西 如图 [attachment=2043]
将这些结果都保存到列表中,然后转换为浮点数,和人物的能力对比 于是知道了这些就是生命,魔法,攻击,防御。
将生命改为999看看吧。 回到游戏,发现生命值没变化,还是60。 .......看来生命值会被什么改变 在生命值地址上右键,"find out what writes to this address" 得到这个代码 0040c863 - 89 0d cc 6e 6f 00 - mov [006f6ecc],ecx 其中ecx是生命值的浮点数值
打开汇编窗口,定位到0040c863 上下看看,如图 [attachment=2044]
原来会读取006f8088 这个地址的值写入生命值中 将006f8088的值改为70的话,生命值应该也会变成70才对。 修改为70,发现hp变成50了。 疑疑疑?怎么反而少了? ......看来有什么地址还在向006f8088写入数值
在006f8088上右键,"find out what writes to this address" 得到这个代码 0040c73c - d9 1d 88 80 6f 00 - fstp dword ptr [006f8088] 打开汇编窗口,定位到0040c73c 上下看看,如图 [attachment=2045]
不过很抱歉,浮点指令我还不太熟悉,所以不能解释这条指令到底是如何影响hp的。 不过可以看出和hp上限有关
用同样的方法,看看影响STR的代码。 会找到 基础str和 str增加量 只需要修改str增加量就可以改变攻击力
而且观察str增加量地址的附近,会发现装备和物品地址都在那里。 也就是说修改物品也是可以的。
给个修改后的图,感兴趣的各位可以自己去研究研究。
[attachment=2046] |
|