我们想通过发包函数,来找到明文包,一般都是通过走路函数进行下断的,因为下F2断点之后直接点击游戏窗口可以让操作延时降到最低,但是有些游戏通过走路下断是无法得到与其他函数公用的带有明文的函数的。以《天堂2》为例我们来对send及喊话函数进行分析。
首先在send函数上下F2断点并进行走路,游戏断下,这时我们观察send函数的返回地址(如图)
执行到返回后可以得到调用send函数的代码,而在这里下断之后,做其他的动作游戏是不会断下的(如图)
接下来我们通过喊话功能在send头部下断,游戏断下后,我们发现send函数的返回地址发生了变化(如图)
执行到返回后我们来到了一个被VM的函数中,这里想直接通过快捷键执行到返回是很难的(如图)
于是我们通过堆栈窗口中跟随EBP,直接返回到栈底处,这样就可以看到返回地址所在的位置(如图)
直接回车来到返回函数中,这里进行下断之后喊话功能会断下(如图)
进入函数内部后发现这里的函数头部是被VM的,不过我们在这里下断是可以断到游戏中大部分函数的(如图)
下面回到喊话函数处,对函数进行分析,发现这里的参数非常简单,其中的第一个参数来源于[engine.dll+BD6694]+48,第四个参数是存放喊话内容的结构体,编码方式是UNICODE型,第五个参数是喊话类型,其余两个函数是常量。(如图)
这样我们就讲游戏的喊话函数分析完了,而在这里进行调用显然要比send处调用容易的多。这里关键就在于当无法通过走路功能进行分析的时候,能否想到通过其他的功能进行尝试。