如何完成一个简单封包功能辅助--总结

如何完成一个简单封包功能辅助--总结

揭秘封包辅zhu外G:利用系统发包函数,定位功能Call(一)

断点发包函数定位功能Call (下断 ctrl+F9)

捕捉用户键盘消息——》技能相关的几个函数——》告诉服务器我要释放某某技能 
一款网络游戏角色释放一个技能,大概就是上面这种流程

游戏要与服务器通讯,必须要使用到系统的几个发包函数,分别是WSASend send sendto
当然这个技巧我们知道,游戏厂商也非常清楚。一个破绽暴露所有的功能,怎么可能不处理?一般通过两种方式处理:

1.重写系统发包函数。

2.线程发包。

 

揭秘封包辅助外G:处理游戏多线程发送封包(三)

1.线程发包。
现象:无论做什么动作断下,调用关系都是一样的。
原理:把发送封包的责任交给了一个子线程——俗称线程发包
方法:主线程与子线程会访问固定地址的全局变量。全局变量存储的是封包内容,而且子线程会调用发包函数把 封包内容发送出去。
而我们已经知晓了发包函数,无非就是WSASend send sendTo,而封包内容会作为参数传入函数中,只要我们在OD中对这个参数溯其来源,自然可以找到那个不变的地址或者结构。

 

揭秘封包辅助外G:处理游戏重写发包函数(二)

2.CRC检测
现象:下断崩溃。
原理:因为F2断点实际上是修改了程序代码了——把选中的一段指令替换成 int3,所以程序执行到断点处才会断下,自然也有可能被检测到。
方法:硬件断点。 

3.重写系统发包函数。(你不是要在系统函数上下断吗?3个函数都不断,看你怎么办)
现象:怎么折腾三个系统发包函数,就是没啥反应。
原理:很可能是游戏重写了发包函数,不走那三个系统API了,自然我们就断不到了。
方法:其实发包函数里面代码写法90%都是固定的,我们自己也能玩,无非就是把send或者其他系统发包函数代码重新抄了一份,
想发包的时候我不调用send了,我调用我自己的发包函数,基本上某鹅的游戏都喜欢玩这一招。其实WSASend send sendTo这三大发包函数,
都需要调用一个更底层的系统函数WSPSend,那么重新实现的发包函数必然也要调用WSPSend,所以我们只要定位到WSPSend,在其头部下断,
使用我们的老朋友Ctrl+F9就可以返回到调用它的发包函数,管它是自己实现的 还是 调用系统的。那么如何定位?Ctrl+G WSPSend?没用,
因为这个函数本来就不是给我们调用的,我们应该调用WSASend send sendTo。很简单,随便找一个能发包的程序(三大发包函数能断下的那种),
去它的发包函数里面找一找就OK了,因为WSPSend在同一台电脑上的地址是相同的, 并不会因为进程的不同就变化无常。


揭秘封包辅助外G:封包外G初体验(四)

捕捉用户键盘消息——》技能相关的几个函数——》告诉服务器我要释放某某技能
一款网络游戏角色释放一个技能,大概就是上面这种流程。那比如我们找到了游戏的技能Call 调用它释放技能,会是什么样子?
会变成这样:
技能相关的几个函数——》告诉服务器我要释放某某技能

组包--》加密--》发包 
游戏要发送一个封包,通常都要走这么一个流程。

组包完成后,封包数据会通过函数一层一层传递,函数怎么传递数据到另外一个函数?没错,当然是通过参数。那么我们是不是能够在发包处下断,
使用传统手艺Ctrl+F9逐层返回所有经过的Call(函数),通过分析他们的参数内容,来找到明文的封包内容?正确!
喊话功能 或者 说聊天功能,我们喊话一串“11111111111111”断下,它在封包内容里面就是一串 31 31 31 31 31 31....

1.通过自己发包,试探变态功能
2.走自己的代码通过send()系统发包函数发送封包实现功能,这样就避开了游戏领空的地雷,所以只要是完美的封包辅助90%稳稳的很安心。

你可能感兴趣的:(Windows逆向)