作为最近非常火爆的一款PC端网游,《流放之路》在发包函数和协议加密上做了一些处理,我们来简单的分析一下。
简单的处理线程后,加载上OD,我们发现在WSASend,send,sendto函数上下断点,游戏并不会断下,说明游戏对发包函数进行了改写,于是我们到更内侧的WSPSend头部下断,发现游戏可以断下。执行到返回,来到一个和send函数代码很像的函数(如图)
观察发现这里并没有用到线程发包,所以可以很容易的返回到外部的功能函数,以喊话功能为例(如图)
图中函数内部会调用发包函数,而分析其参数和寄存器后发现并没有喊话相关的明文出现,或许是明文内容藏在某些偏移内,不容易发现(如图)
堆栈中出现的喊话明文通过改写后,无法改变实际的喊话内容。于是我们到内部分析发包函数的参数来源,看最后出现明文的位置是哪里(如图)
通过图中的注释可以看出明文协议是在call dword ptr [edx+4]处被加密的。分析明文的来源,发现外层的ecx+130里存放的明文,并没有通过push进行传参。分析加密函数内部,得到加密代码的来源(如图)
分析密匙来源后即可通过调用函数来对明文协议进行加密,并通过发包函数实现大部分功能。