思路:通过send断点然后对send的data参数下写入断点找到游戏里面的技能或者攻击call
进入游戏先选好一个怪物(之所以要先选好是因为选怪也会断,如果直接左键打怪的话就会断几次)
断下来后对参数下硬件写入断点
硬件断点断下来后先取消硬件断点,然后按ctrl+f9返回到上一层,每返回一层就做好标记和断点,多返回几层然后正常运行游戏
正常运行游戏后即便没有打怪也有几个断点在不断的断下来,取消这几个断点,然后打怪
打怪的时候这个函数断下来了,参数如下
6个参数中4个是固定不变的,还有个155是我们之前找到的怪物的ID,至于0还不知道是什么东西,我们用下技能试试
第一个参数应该就是技能ID了,在代码注入器中调用试试,ECX先写死
调用成功,调用代码如下:
push 0xBF800000 push 0xBF800000 push 0xBF800000 push 0x154 push 0xffffffff push 0x1a6 mov ecx,0x206F8508 call 0x0053A6B0
现在只要找到ECX的基址就行了
我们在这个call下断,观察来源,或者直接从CE中搜索
来自esi,现在继续找esi来源
是来自上层的ecx,所以我们跳转到上一层看看
来自esi
又是来自上一层的ecx
这里是个虚函数,而且会一直断,所以在调试器中不好分析,我们直接在CE中搜索ECX的值试试
对这两个地址下断试试
继续搜索222b4e50
对这几个地址下访问断点
有好几都有访问,一个一个分析,先分析0C这个
继续搜索04B1CE40
直接就出来基址了,后面的也不用继续浪费时间分析了,ECX的基址是: [[[00645800]+0c]+160],我们把代码改一下,测试一下
push 0xBF800000 push 0xBF800000 push 0xBF800000 push 0x154 push 0xffffffff push 0x1a6 mov ecx,dword ptr ds:[0x00645800] mov ecx,dword ptr ds:[ecx+0xc] mov ecx,dword ptr ds:[ecx+0x160] call 0x0053A6B0
测试是OK的