找回密码
 注册帐号
查看: 2592|回复: 1

全面剖析网络游戏发送封包原理及编程实现办法!

[复制链接]
发表于 2017-5-24 21:55:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册帐号

×
玩过网络游戏封包的都应该知道常用的封包工具有WPE、封包助手。这个工具的原理就是向网络游戏注入DLL,然后发送封包。
网络游戏和它的服务器建立通讯,就是靠这唯一的一个socketid进行通讯。
获取socketid的方法:(不完整欢迎补充)
  • hook send api拦截一个封包,这样我们就知道了socketid。
  • 查找内存地址,生成的socketid应该都是储存在游戏的内存中的,我们获取到基址和偏移即可直接读取这个数值。

其实发送封包原理很简单,就是利用send api向游戏发送封包。
我们先看下send api的申明:
Private Declare Function Send Lib "ws2_32.dll" Alias "send" (ByVal hSocket As Long, Buf As Any, ByVal BufLen As Long, ByVal Flags As Long) As Long
参数共有4个:
  • hSocket:就是获取到的游戏的socketid
  • Buf:封包内容
  • BufLen :封包大小
  • Flags:标识符,通常为0

我们先用封包助手拦截下封包,如图:

封包助手拦截的封包

今天为了给大家直观的演示怎么用代码编写出这个功能,我自己写了一个DLL,然后注入了游戏。
注入游戏后,弹出自己的窗口界面,利用send api发送封包。
VB6.0编写的DLL发送游戏封包代码:
Dim i As Integer, Data() As Byte ‘’‘定义变量
s = Split(Text2, "-") ''处理封包成字节数组
ReDim Data(UBound(s) + 1) ’‘重新定义数组大小
For i = 0 To UBound(Data) - 1
Data(i) = CByte("&H" & s(i))
Next
Send Val(Text3), Data(0), UBound(Data), 0 ’‘利用send发送封包
效果图:

效果图

提醒:必须注入游戏后,才可以利用send api发送封包哦,否则不会成功的!

欢迎来到安全之家
悄悄告诉你善用本站的【 搜索 】功能,那里可能会有你要找的答案哦

0

主题

1

回帖

1

积分

练气

发表于 2020-8-24 17:40:35 | 显示全部楼层
请问哪有源码,新手想研究一下。谢谢!
欢迎来到安全之家
悄悄告诉你善用本站的【 搜索 】功能,那里可能会有你要找的答案哦
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

Archiver|sitemap|小黑屋|手机版原版|安全之家

GMT+8, 2025-4-4 18:50 , Processed in 0.062824 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表