首先在CE中根据0 1以及是否勾选移动开关开找到鼠标移动这个flag
然后在按下F5找出是什么访问了这个地址
注意:
按下F5之后,进程会直接访问这个地址,但是这段代码并不是我们想要的,我们想要的是,移动之前的判断,所以我们需要让人物移动一下,然后在找到另外一段代码
wow.exe+32B702:
0072B6FB - 75 25 - jne wow.exe+32B722
0072B6FD - A1 F408BD00 - mov eax,[wow.exe+7D08F4]
0072B702 - 39 50 30 - cmp [eax+30],edx <<
0072B705 - 74 1B - je wow.exe+32B722
0072B707 - D9EE - fldz
EAX=182DBC80
EBX=287F46E0
ECX=287F46E0
EDX=00000000
ESI=0525FA64
EDI=00000000
EBP=0525F9C4
ESP=0525F9BC
EIP=0072B705
First seen:23:50:50
Last seen:23:50:50
0072B705 | 74 1B | je wow.72B722 | 判断zf标志位,如果为1则跳转
0072B707 | D9EE | fldz | 寻路功能开始
0072B709 | 51 | push ecx |
0072B70A | D91C24 | fstp dword ptr ss:[esp],st(0) |
0072B70D | 8955 F8 | mov dword ptr ss:[ebp-8],edx |
0072B710 | 8955 FC | mov dword ptr ss:[ebp-4],edx |
0072B713 | 8B55 08 | mov edx,dword ptr ss:[ebp+8] |
0072B716 | 52 | push edx |
0072B717 | 8D45 F8 | lea eax,dword ptr ss:[ebp-8] | eax=ebp-8
0072B71A | 50 | push eax | eax是一个地址 32bit系统下占8个字节
0072B71B | 6A 04 | push 4 |
0072B71D | E8 DEBCFFFF | call <wow.sub_727400> | 移动/寻路功能 内平栈 4个参数
分析一下移动call的参数:
-
0x4
-
八个字节的一个地址
-
坐标的地址
-
最后一个参数暂时可以先把他固定
0x287F46E0每次启动游戏都会改变,后面会去找这个参数来源
下面使用代码注入器来测试移动call:
sub esp, 0x100
push 0x291547C0
lea edx, [esp+0x50]
mov dword ptr ss:[edx], 0xDEE8046A
mov dword ptr ss:[edx+0x4], 0x8BFFFFBC
mov dword ptr ss:[edx+0x8], 0x04C25DE5
push edx
lea ebx, [esp+0x20]
mov dword ptr ss:[ebx], 0x0
mov dword ptr ss:[ebx+0x4], 0x0
push ebx
push 0x4
mov ecx, 0x291547C0
call 0x00727400
add esp, 0x100
上面代码使用代码注入器可以成功注入并移动,但是在最开始测试的时候出现了一点问题,导致一直注入不成功,原因是调用的call中使用到了ecx这个寄存器,即寄存器传参,我并没有传入这个参数导致程序崩溃

超级版主
