玩逆向,第一件事情要干什么?我想应该是确定它使用那个系统发包函数与服务器沟通。
为什么?不想讲太多花里胡哨的道理。举一个单机游戏和网络游戏,释放技能流程的例子。
单机:捕捉用户键盘消息——》技能相关的几个函数——》直接释放了某某技能
联机:捕捉用户键盘消息——》技能相关的几个函数——》告诉服务器我要释放某某技能
有没有看出什么?
或许不够立体,来写一些伪代码。
按键监听函数{
。。。。。
技能相关函数();
。。。。
}
技能相关函数{
。。。。。
系统发包函数(); // 告诉服务器我要释放某某技能
。。。。。
}
在网络游戏中必须要和服务端通讯,服务器才能把人物的行为动作,同步到其他玩家的客户端上。
而要与服务器通讯,必须要使用到系统的几个发包函数,分别是WSASend send sendto。(向服务端发送一个装有数据的包裹)
根据上面的一些例子我们知道,大家都感兴趣的释放技能函数内部会调用系统发包函数。
那么我们找到游戏使用的发包函数,在函数头部利用工具下一个执行断点(程序走到断点处会停下),那么是不是就可以利用堆栈中函数调用留下的信息,寻找到调用发包函数的技能函数?
PS:堆栈中有调用函数保存的返回地址
原理我们知道了,来看一个小实例。PS:实例中使用的游戏为自己搭建的私服口袋西游。
首先,需要找到游戏使用那个系统发包函数,非常简单——需要使用工具OD,使用OD附加上游戏。
按快捷键Ctrl+G,输入发包函数的名字 要注意大小写,