免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:47.x86游戏实战-VEHHOOK封包函数
上一个内容里把进图相关的函数都给进行了hook(拦截)获取了它们的入参(给函数的数据),本次就来分析这些入参
之前在 46.x86游戏实战-DXX封包实现进入地图房间 找到了进入有怪物地图(进入副本)的代码,并且成功进入了副本,但是进入副本只能手动点到副本选择界面之后才可以进入副本,本次就来找怎么进入副本选择界面
首先打开OD并且附加游戏并且来到公共call
然后在公共call打断点
![]()
然后通过打开副本选择界面触发断点
![]()
然后取消断点
![]()
然后按CTRL+F9,它给0x1127D60传了一个0xF,然后调用了0x1127EC0然后就发送了数据包,然后使用wctool.exe模拟这段代码
![]()
所以通过wctool.exe模拟这段代码,可以正常进入选择地图界面,那么问题来了,它是怎么知道副本有哪些的
![]()
然后经过测试发现,这个游戏某些副本只能在某个区域才有,比如a区域的副本有af1、af2、af3,b区域的副本有bf1、bf2、bf3,如果在b区域模拟上方的代码就会是bf1、bf2、bf3,如果在a区域模拟上方的代码就会是af1、af2、af3,所以接下来要找怎么瞬移到a区域或b区域,也就是找切换地图的代码,然后回到OD,还是在公共call打断点,这次通过切换地图触发(移动也会触发切换地图这里要多搞几次避免分析半天分析的是移动的代码)
通过切换地图触发断点
![]()
取消断点
![]()
然后按CTRL+F9,按完CTRL+F9之后就来到了下图位置
![]()
然后接下来观察下图红框函数的参数
![]()
上图红框中的函数在上一个内容里已经被HOOK过了
![]()
所以接下来通过wctool.exe注入我们的dll,注入之后启动hook,然后来到Dbgview.exe观察打印的参数,首先启动HOOK之前关闭OD,如果不关闭OD我们的dll没法正常hook,没法正常的原因是我们的HOOK会让OD认为成是它的断点,关闭OD后点击下图红框启动HOOK
![]()
启动完来到游戏进行切换地图(切换到可以选择副本地图)的操作,然后通过观察Dbgview.exe,看到它们的入参
![]()
然后换一个副本选择地图进入看看它的入参有什么不同
![]()
它俩不同的地方
![]()
然后下图的来数据猜测是坐标
![]()
然后下图的俩数据猜测是地图id
![]()
通过切换大量地图做对比,最终发现,如下图E是区域的id
![]()
然后区域里的地图id
![]()
然后下图红框的两个应该分别是x、y坐标,然后其它的就不知道了
![]()
可能随便传就行,接下来写代码测试,并且尝试push的值随便写
pushad push 0x26 mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1127D60 call eax push 0xE mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1128550 call eax push 0x2 mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1128550 call eax push 0x1E mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1128580 call eax push 0x10F mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1128580 call eax push 0x5 mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1128550 call eax push 0xE mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1128580 call eax push 0x1 mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1128580 call eax mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1127EC0 call eax popad
切换地图代码说明:x、y坐标当切换地图之后会把角色放到0x1128580指定的坐标位置
![]()
然后切换到有副本选择地图、然后调用副本显示界面、然后调用进入副本的代码,这一套下来就完成了不管在什么地方都可以进入指定副本的功能
完整代码:wctool里的数字默认都是十六进制,如果不加0x就放到c++里它会认为是十进制的数
pushad // 切换地图 push 0x26 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1127D60 call eax push 0xE mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128550 call eax push 0x2 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128550 call eax push 0x1E mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128580 call eax push 0x10F mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128580 call eax push 0x5 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128550 call eax push 0xE mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128580 call eax push 0x1 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128580 call eax mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1127EC0 call eax // 进入副本选择界面 push 0xF mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1127D60 call eax mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1127EC0 call eax // 进入副本 push 0x10 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1127D60 call eax push 0x68 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128580 call eax push 0 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128550 call eax push 0 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128550 call eax push 0 mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1128550 call eax mov eax, 0x1127EC0 call eax popad // 进入副本选择界面 pushad push 0xF mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1127D60 call eax mov ecx, 0x1AEB6E4 mov ecx, [ecx] mov eax, 0x1127EC0 call eax popad