线程发包的应用非常广泛,往往用来防止分析明文包。而跳出线程发包的原理则是不断的在包的来源上下写入断点,就可以调到线程外的内存拷贝函数中。
首先我们来到send函数处下F2断点,并观察函数的参数变化(如图)
通过ALT+K可以发现每一次下断的返回都是固定的,而且数量非常少,这说我们我们是在线程里的(如图)
在包内容上下写入断点,再次做发包动作游戏断在了一个内存拷贝的函数中(如图)
多次执行到返回后来到一个公共CALL和功能CALL相邻的函数处(如图)
到函数内部的头部进行观察发现这里可以断到游戏的大部分发包函数,并且其参数是明文的(如图)
我们发现这个函数的参数是存放在ecx的结构体中的,以喊话功能为例,我们可以看到这里确实是由喊话明文的,而结构中的其他偏移则代表的是喊话的一些条件和玩家等等(如图)
如果不想调用这里的函数,也可以选择执行到返回去调用外层的函数,一般来说外层的函数都要比明文包要容易分析的一些。