本文主要是介绍9.游戏中真正的无敌,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上一个内容:8.什么是HOOK
在 7.封装读写游戏数据的功能2 中写是无限循环给生命值的内存地址赋值达到无敌的效果,这个方式有很大的弊端比如如果怪物的攻击力很高我们碰一下我们就得死这样的情况无限赋值也没用了,所以给内存写值的方式实现的无敌是一种假无敌,真正的无敌是拦截触发hp-伤害的代码,把这个代码改为hp-0或者把hp-0的指令删掉,或者略过这个hp-伤害这个代码。
然后生命值的内存偏移是CEF18(exe文件到内存中32为程序都是以0x400000开始这个是固定的,血量是0x4CEF18,0x4CEF18-0x400000=0xCEF18),然后通过CheatEngine来实现hp-伤害这个代码的略过
然后让怪物打一下
然后选中sub [esi+10],edi 再点击显示反汇编程序
删除指令的方式鼠标双击1位置,然后在2位置写汇编指令,现在要写的汇编指令是NOP,可能点了确定之后还会有一个弹框,直接点否
然后原本的sub [esi+10],edi删掉,删掉的做法是把它写成NOP,在汇编里nop表示没有指令,处理器在执行到nop时什么都不会做然后执行下一行,由于sub [esi+10],edi占用了三个字节所以它显示的是三个nop
然后把sub改为add这样每次怪物攻击时我们就会加血
如果想hp-0这样需要一块新的内存空间,原本空间只有sub [esi+10],edi它的三字节这样是无法实现hp-0的,每个程序都会有一块nop空间,我们可以利用它也可以自己申请一块空间
通过上面改完汇编代码会发现我们也打不死怪物了。通过追踪血量修改的地方,找到的代码,改了之后我们也打不死怪物了,可以推断出角色打怪物与怪物打角色,怪物与角色是用的同一个函数同一个类不同的变量。
这篇关于9.游戏中真正的无敌的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!