怎么使用三大系统发包函数,无脑Ctrl+F9 定位游戏的功能函数(Call),只需要我们找到游戏使用哪一个发包函数与服务端通信,就相当于得到了游戏的全套功能。太容易了,肯定不会让我们这么轻易的快乐 ~ 所以一般都对发包函数做了一些处理。 比如,我们通常喜欢在发包函数头部下断,可能厂商会在头部做一些处理,加一些CRC检测啊,让我们下断就崩溃。因为F2断点实际上是修改了程序代码了——把选中的一段指令替换成 int3,所以程序执行到断点处才会断下,自然也有可能被检测到。 右键选中代码处——》断点——》硬件执行,效果差不多但是硬件断点不修改代码。 但是硬件断点只能同时存在四个,使用完不要忘记及时清除。 或者让我们在头部下断 断不下来,遇见这种情况可以先试试往下面一点的代码处下断,看看它断不断。但是如果咱们怎么折腾三个系统发包函数,就是没啥反应。那很可能是游戏重写了发包函数,不走那三个系统API了,自然我们就断不到了。哇靠,它重写了发包函数诶。那我们怎么知道它的发包函数是啥,怎么去找到它?怎么去下断?不能再愉快的Ctrl+F9了,难受~! 听起来好像很牛 X 的样子,其实也就那样。其实发包函数里面代码写法 90% 都是固定的,我们自己也能玩,无非就是把 send 或者其他系统发包函数代码重新抄了一份,想发包的时候我不调用 send 了,我调用我自己的发包函数,基本上某鹅的游戏都喜欢玩这一招。 既然我们知道了原理,自然就有了破解之法。其实 WSASend send sendTo 这三大发包函数,都需要调用一个更底层的系统函数 WSPSend ,那么重新实现的发包函数必然也要调用 WSPSend ,所以我们只要定位到 WSPSend ,在其头部下断,使用我们的老朋友 Ctrl+F9 就可以返回到调用它的发包函数,管它是自己实现的 还是 调用系统的。 那么如何定位?Ctrl+G WSPSend?没用,因为这个函数本来就不是给我们调用的,我们应该调用WSASend send sendTo。 很简单,随便找一个能发包的程序(三大发包函数能断下的那种),去它的发包函数里面找一找就OK了,因为WSPSend在同一台电脑上的地址是相同的, 并不会因为进程的不同就变化无常。下面我们以口袋西游为例,OD工具附加,Ctrl+G跳到send函数区域,我们可以看到里面调用了非常多的系统函数,其中一个Call 寄存器的函数就是WSPSend。系统不同可能略有不同,win7可能是 call dword ptr [eax+64] 在上面call指令上下断点,按F7单步步入,来到了WSPSend函数内部,同理不同系统可能略有不同。 然后我们把函数地址复制下来。 7269DE70 6A 3C push 0x3C 7269DE72 68 C0196B72 push mswsock.726B19C0 7269DE77 E8 30D3FEFF call mswsock.7268B1AC 7269DE7C 33DB xor ebx,ebx 7269DE7E 895D D8 mov dword ptr ss:[ebp-0x28],ebx 7269DE81 8D45 C4 lea eax,dword ptr ss:[ebp-0x3C] 后面寻找游戏使用的发包函数,只需要Ctrl+G 填入WSPSend地址,跳入在其头部下断,Ctrl+F9就可以返回到游戏使用的发包函数,不管它是不是自己重新实现了发包函数。 这样我们又能愉快的Ctrl+F9啦,是不是很简单?你可能说这有啥?这算个啥?厂商程序员都是吃干饭的么? 所以就有了更绝的处理方式——线程发包,有可能和重新实现发包函数混合使用,老千层饼了~ o(* ̄▽ ̄*)ブ 程发包处理方式,略有些复杂咱们下回见分晓~!
|