ce查找:搜索当前血量218OD查找:OD附加,先点运行让它跑起来
CTRL+G,00456448
来到00456448血的地址是ESI+25C,搜索左面[]中ESI的值,不要搜索右面EDX
向上查找ESI
ESI是从ECX来的,在这里按F2下断
看看对不对,要是对血值发生变化会被自动断下
成功断下后在命令:后面添加ddecx+25c(因为血是ESI+25C,ESI是从ECX来的所以ESI+25C=ECX+25C)
来到当前血量
DA十六进制换成十进制是218
证明ECX是对的,继续找ECX的值
两段代码之间会出现NOP
在高级语言中这两段代码叫做函数
NOP将2个函数分开,一般在OD中函数以PUSH开始RETN结束
因为在本段代码没有找到ECX,在向上找就是其他函数代码了,那样找起来会很麻烦,所以来到本段代码头部,看看还没有CALL
点击004563A0(代码头部)发现有个CALL,右键前往这个CALL
如果这里没有CALL,在CALL这个位置下端,运行OD,让血值发生变化自己断下,看看返回值,然后记录下来在排除查找
前往这个CALL,来到
来到EAX发现是个跳转,所以要往回跳
右键点击跳回
跳到00454B71
一直向上来到头部没找到ECX,发现EAX这里有个调用,不过没有CALL,所以在这里下断,运行,到游戏里动一下让它自动断下
取消断点,要不在这个断点又被断下了,看到了返回到……这个调用
在第一个返回到,点右键,点在反汇编窗口中跟随
然后运行OD
让游戏动一下
没被断下,继续向上查找ECX,发现ECX是的值是从EAX来的
向上找EAX,没找到,发现函数代码中部有个CALL
进入这个CALL看看
命令:DD[EAX+24]+25C在[EAX+24]这行代码下端
在命令行按回车
发现当前血是对的,取消断点在让OD运行起来
向上dd[[ecx+8