/*
作者:紫色溟渊
时间:2010-12-4 1:00
说明:仅供学习交流,请勿用于非法用途,欢迎转载!
*/
找网游的寻路CALL可以说思路很简单,很清晰。
一般网游都有寻路系统,打开寻路系统,选择一个坐标(10,10),点击一下鼠标,让人物走到指定位置。鼠标点下的这一瞬间,(10,10)这个坐标也写入到内存中的某一个地方,也可能不是(10,10)这个坐标,因为网游作者可能不是按游戏界面上显示的坐标来计算的,可能是鼠标点击的坐标,当然这个鼠标点击的坐标和(10,10)肯定有一定的关系。当这个坐标写入内存之后,可以拿出CE扫描游戏的内存,搜索坐标,找到X或者Y的地址,然后在OD里面下断点,一般下硬件写入断点。然后打开大地图,在(20,20)点一下,这个时候基本上游戏会断下来。然后,到附近查找,分析出寻路CALL。
寻路CALL最基本代码:

push x;

push y;


call road ;
至少一个坐标,和一个CALL函数。
当然就《争霸天下》这款游戏的话,我找寻路CALL的时候,用CE搜索内存,始终都没有找到大地图上显示的坐标,这个时候我静下来想了想,可能坐标不是DWORD类型,可能是TEXT类型的。慢慢的研究,我发现这2种方法都找不到大地图上显示的坐标,(10,10),我试着换了一种方法,我在OD里面下断点bp send,这个可是万能断点,我在点鼠标寻路的时候,游戏断下来,我查看STACK,找到游戏进程代码处,发现坐标果然是被加密了,并且点击的时候和鼠标点击的坐标有关,并不是游戏里面大地图上显示的坐标(10,10)。
//寻路CALL 
0047EC51 . 6A 01 push 0x1

0047EC53 . 6A FF push -0x1

0047EC55 . 51 push ecx

0047EC56 . 8B0D DC1E5200 mov ecx,dword ptr ds:[0x521EDC]

0047EC5C . 52 push edx

0047EC5D . E8 AE03FFFF call client.0046F010

0047EC62 . 8B0D DC1E5200 mov ecx,dword ptr ds:[0x521EDC]

0047EC68 . 50 push eax

0047EC69 . E8 3215FFFF call client.004701A0


0046F010 /$ 8B81 80000000 mov eax,dword ptr ds:[ecx+0x80]

0046F016 |. 8A90 DC000000 mov dl,
byte ptr ds:[eax+0xDC]

0046F01C |. 84D2 test dl,dl

0046F01E |. B0 01 mov al,0x1

0046F020 |. 77 06 ja
short client.0046F028

0046F022 |. 8A81 A0010000 mov al,
byte ptr ds:[ecx+0x1A0]

0046F028 \> C3 retn



//-------成功测试 
push 0x1

push 0xffffffff

push 0x1400 ;y 十进制80

push 0x1400 ;x 十进制80

mov ecx,[0x521edc]

call 0x0046f010

mov ecx,[0x521edc]

push eax

call 0x004701a0

这个CALL其实找出来有大几天了,今天抽个时间整理整理。
转载于:https://blog.51cto.com/mingyuanlove/440568