a.1 什么是线程循环发包
线程发包是指在游戏一个循环线程中进行发送函数的封包。
在分析不同游戏的时候发现有的游戏 bp sead进行发包函数断点后
OD中按下Alt+K健查看堆栈返回信息列表时,发现自己明明是进行不同的动作发包断点游戏被断下后,堆栈返回信息却发现每次都是一样的信息这种情况!
这是因为遇见的这种情况的游戏,它采用的发包方式,这种发包方式情况不像“流线型发包”方式,而是采用线程循环中发包。
一般的游戏发包过程大致如下
游戏采用这种线性发包方式,只需要先bp send 进行系统发包 断点 游戏里操作完断下后只需要ctrl+f9直接返回每一层即可到达想要找的关键动作 功能 CALL 。这种发包方式的游戏CALL很容易找,例如武林外传和诛仙2。
现在很多老游戏和新游戏都采用了一种新的发包方式“线程循环发包”,这种发包方式。用“线型发包”方式已经无法找到。
现在普遍很多新游戏发包过程大致如下
这种线程循环发包与真正的功能CALL是独立的,所以如果要分析这种方式发包的游戏就得从发包的数据跟随找数据来源。
a.2 线程发包CALL分析方法
先了解下系统ws2_32.dll 库里的 send 函数结构
再来看一下此函数在OD中的反汇编
再看看OD堆栈窗口
因为我们要从数据的来源分析,所以就需要跟着 send函数的data参数开始着手分析。
--------------------------------------------------------------------------
“天龙八部”就是采用这种线程循环发包方式的游戏。现在拿它演示一下。
喊话动作断下后的 堆栈 列表信息
选怪动作断下后的 堆栈 列表信息
世界唯一不变的就是变化,世界唯一可能的就是不可能。
评论