/*
作者:紫色溟渊
时间:2010-12-4     1:00
说明:仅供学习交流,请勿用于非法用途,欢迎转载!
 
*/
 
找网游的寻路CALL可以说思路很简单,很清晰。
 
一般网游都有寻路系统,打开寻路系统,选择一个坐标(10,10),点击一下鼠标,让人物走到指定位置。鼠标点下的这一瞬间,(10,10)这个坐标也写入到内存中的某一个地方,也可能不是(10,10)这个坐标,因为网游作者可能不是按游戏界面上显示的坐标来计算的,可能是鼠标点击的坐标,当然这个鼠标点击的坐标和(10,10)肯定有一定的关系。当这个坐标写入内存之后,可以拿出CE扫描游戏的内存,搜索坐标,找到X或者Y的地址,然后在OD里面下断点,一般下硬件写入断点。然后打开大地图,在(20,20)点一下,这个时候基本上游戏会断下来。然后,到附近查找,分析出寻路CALL。
 
寻路CALL最基本代码:
InBlock.gifpush    x;
InBlock.gifpush    y;
InBlock.gif
InBlock.gifcall road ;
 
至少一个坐标,和一个CALL函数。
 
当然就《争霸天下》这款游戏的话,我找寻路CALL的时候,用CE搜索内存,始终都没有找到大地图上显示的坐标,这个时候我静下来想了想,可能坐标不是DWORD类型,可能是TEXT类型的。慢慢的研究,我发现这2种方法都找不到大地图上显示的坐标,(10,10),我试着换了一种方法,我在OD里面下断点bp send,这个可是万能断点,我在点鼠标寻路的时候,游戏断下来,我查看STACK,找到游戏进程代码处,发现坐标果然是被加密了,并且点击的时候和鼠标点击的坐标有关,并不是游戏里面大地图上显示的坐标(10,10)。
 
InBlock.gif//寻路CALL
InBlock.gif0047EC51     .    6A 01                 push 0x1
InBlock.gif0047EC53     .    6A FF                 push -0x1
InBlock.gif0047EC55     .    51                        push ecx
InBlock.gif0047EC56     .    8B0D DC1E5200 mov ecx,dword ptr ds:[0x521EDC]
InBlock.gif0047EC5C     .    52                        push edx
InBlock.gif0047EC5D     .    E8 AE03FFFF     call client.0046F010
InBlock.gif0047EC62     .    8B0D DC1E5200 mov ecx,dword ptr ds:[0x521EDC]
InBlock.gif0047EC68     .    50                        push eax
InBlock.gif0047EC69     .    E8 3215FFFF     call client.004701A0
InBlock.gif
InBlock.gif0046F010    /$    8B81 80000000 mov eax,dword ptr ds:[ecx+0x80]
InBlock.gif0046F016    |.    8A90 DC000000 mov dl,byte ptr ds:[eax+0xDC]
InBlock.gif0046F01C    |.    84D2                    test dl,dl
InBlock.gif0046F01E    |.    B0 01                 mov al,0x1
InBlock.gif0046F020    |.    77 06                 ja short client.0046F028
InBlock.gif0046F022    |.    8A81 A0010000 mov al,byte ptr ds:[ecx+0x1A0]
InBlock.gif0046F028    \>    C3                        retn
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif//-------成功测试
InBlock.gifpush 0x1
InBlock.gifpush 0xffffffff
InBlock.gifpush 0x1400    ;y     十进制80
InBlock.gifpush 0x1400    ;x     十进制80
InBlock.gifmov ecx,[0x521edc]
InBlock.gifcall 0x0046f010
InBlock.gifmov ecx,[0x521edc]
InBlock.gifpush eax
InBlock.gifcall 0x004701a0
InBlock.gif
 
这个CALL其实找出来有大几天了,今天抽个时间整理整理。