免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:44.x86游戏实战-C++实现吸怪加秒杀
想分析发包,那就要尽量的排除干扰,想排除干扰就要从发包少的地方入手,发包少的地方比如登录游戏时选择游戏频道或选择角色这样的地方发包才少,因为这种地方没有进游戏所以发包肯定会特别少。
首先来到游戏选择频道的位置
然后打开OD并附加到游戏,然后来到公共call位置(找公共call看29.x86游戏实战-XXX发包函数),如下图,
然后在公共call位置打断点
然后打完断点来到游戏,点击选择频道,通过选择频道断下来
然后取消断点
然后按CTRL+F9,然后就会来到下图位置
然后在桌面新建一个文本文档(.txt文件),新建完从下图红框位置,也就是按完CTRL+F9之后的位置开始
使用鼠标滚轮往上滑,选中代码(按着shift键然后鼠标左键单机代码就可以选中多行了),最好一直选中到函数头部,有些函数很长就尽量多选中一点
然后鼠标右击选中的部分,然后选择复制到剪切板
然后粘贴到新建的文本文件中
然后回到OD按F9,让游戏运行起来,然后来到游戏选择角色界面,然后再次在公共call位置打断点,让它通过选择角色断下来,下图是通过选择角色触发的断点
然后取消断点
然后按CTRL+F9
这里还是新创建一个文本文档(.txt后缀的文件),然后复制选择角色的代码
然后粘贴到刚刚创建的文本文档中
然后再找个喊话(还是在公共call打断点,让它通过喊话断下来,然后取消断点,然后按CTRL+F9,然后多选中几行代码,然后复制到剪贴板,然后粘贴到创建的文本文档中)
然后对比它们三个共同点
然后看到下图相同颜色框起来的地址挨得很近,但是也看不出什么来,然后感觉选择角色比较全,所以接下来让选择频道和喊话分别与选择角色做对比
然后来到OD,然后CTRL+G到选择频道
上图弹框点击了确定之后来到选择角色的函数里
然后开始对比,首先选择角色调用了0x1127D60和0x1128550,接下开始在选择频道函数里往上翻,要时刻注意里面有没有 0x1127D60和0x1128550 这俩东西
然后看到选择频道里也调用了0x1128550
然后往上翻了一会,看到选择频道也调用了0x1127D60,然后0x1127D60也是跟选择角色一样,在0x1128550之前调用的
然后选择角色再与喊话做比较,然后看到喊话也调用了0x1128550函数
然后喊话也调用了0x1127D60,0x1127D60在0x1128550之前调用,现在猜测0x1127D60是一个构建数据包头的函数
然后0x1127D60就一个参数
然后喊话给它传的参数是0x11
选择频道给它传的是1
选择角色给它传的是4
然后现在也看不出什么别的了,选择角色、选择频道、喊话还是比较复杂的,还要找一找有没有简单点的
然后发现游戏里有个决斗场的按钮,点击决斗场触发的公共call,CTRL+F9之后回来到下图位置,它还是0x1127D60,但是比上面三个位置少调用了函数,所以下图位置就很简单
然后写汇编代码进行测试,然后发现它可以正常打开决斗场,现在就可以确定0x1127D60就是得到一个数据包的
然后带着这个思路去尝试选择角色,选择角色多调用了一个0x1128550,这应该是获取选择角色的信息,并且拼接数据包,拼接到从0x1127D60里得到的数据包头
接下来看看0x1128550的入参是什么,也就是esi的值是什么,来到OD然后CTRL+G跳转到选择角色的函数里,打断点,如下图
然后游戏来到选择角色界面,然后选择一个角色触发上方的断点,然后看esi的值是什么,如下图esi的值是1,刚刚选择的角色是角色列表中的第二个角色,现在猜测esi是角色在列表中的位置,列表序号从0开始
然后接下来选择第一个角色触发断点,如下图它确实是0了
然后写代码测试,执行之后可以正常进入游戏
pushad push 4 mov ecx,0x1AEB6E4 mov ecx,[ecx] mov eax,0x1127D60 call eax mov ecx,0x1AEB6E4 mov ecx,[ecx] push 1 mov eax,0x1128550 call eax mov eax,0x1127EC0 call eax popad
其它的(选择频道、喊话)后面在搞,比较复杂后面在搞