注入模式
把 WPEHook.dll 注入目标进程,从 进程内部 挂钩 WinSock 收发函数。这是最贴近程序逻辑的抓包方式,本章走完从选目标到改包的完整链路。
EasyHook 把托管程序集注入目标进程 → 在目标进程内 Application.Run(InjectModeForm) → WPE 的界面显示在被注入的程序里,用 LocalHook 挂钩 wsock32.dll / ws2_32.dll / mswsock.dll 的收发函数。
目标已经在运行、也不需要抓启动阶段的包时,这六步就是全部流程。
01 · 选择注入目标
首页点「注入模式」后弹出「进程列表」对话框。
- 筛选进程列表:按进程名实时过滤,不区分大小写、子串匹配
- 进程表格:图标 / 进程名称 / 进程编号(PID)/ 路径。名称与 PID 两列可点表头排序,单击一行即选中
- 已选目标回显:为空时边框标红,选中后变绿显示
进程名 [PID] - 选择窗体:进入拾取模式 —— 鼠标悬停任意窗口会浮出「进程 / PID / 标题 / 路径」提示;左键点击目标窗口即选中并立刻注入;按 Esc 取消
- 选择程序:选一个尚未运行的
.exe。注入时走 CreateAndInject(先创建挂起进程再注入),可以 从程序启动的第一个包开始抓 - 刷新:清空两个输入框并重新枚举进程
- 注入:执行注入。成功后本对话框关闭,WPE 界面出现在目标进程里
程序会记住 最后一次成功注入的进程名,下次打开进程列表时若该进程正在运行会自动预选,省掉重新找的功夫。
三种选目标方式怎么挑
| 方式 | 适用场景 | 能否抓启动阶段 |
|---|---|---|
| 列表单击 | 目标已在运行,且知道进程名 | 否 |
| 选择窗体 | 不知道进程名,只知道是哪个窗口(多开、模拟器子窗口) | 否 |
| 选择程序 | 需要抓登录 / 握手等启动阶段封包 | 是 |
用「选择程序」注入后,目标进程处于 挂起 状态,看起来像卡死。必须点一次工具栏的 开始,程序内部才会调用 WakeUpProcess() 唤醒它。
02 · 主界面导览
- 左侧导航(11 项):封包列表 / 滤镜列表 / 发送列表 / 机器人列表 / 仓库列表 / 统计数据 / 文本对比 / 异或计算 / 编码转换 / 数据提取 / 系统日志。绿色角标是 实时条数
- 信息条:进程名 [PID] · 主窗口标题与句柄 · 探测到的 WinSock 版本 · 累计收发字节
- 封包列表:行底色即滤镜动作结果(金=替换、红=拦截、蓝=换包,见 配色表)。双击任意行 打开封包编辑
- 统计条:封包总数 / 滤镜执行 / 缓存区 / 过滤 / 八类函数计数
- 快捷列表:四个页签(滤镜 / 发送 / 机器人 / 仓库),抓包时不用切主菜单就能开关滤镜。双击一行打开对应编辑窗口
- 封包数据面板:选中行的十六进制编辑器(Be.Windows.Forms.HexBox),底部显示行列与字节位信息
- 菜单:7 项设置抽屉,从右侧滑出
- 折叠导航 / 明暗主题 / 显示设置 / 语言切换
信息条第三段如果只显示 WinSock(后面没有 1.1 / 2.0 / Microsoft),说明目标进程 还没加载任何 WinSock 模块——此时挂钩挂不上去,一个包都抓不到。先让程序产生一次网络行为,再重新注入。
03 · 开始抓包
- 先进 菜单 → 拦截设置,勾选需要的函数(见下节)。必须在点「开始」之前设置。
- 需要的话再进 过滤设置 缩小显示范围。
- 点 开始:挂钩生效;若目标是被挂起创建的,此时一并唤醒。
- 让目标程序产生网络行为,封包实时滚入列表。
- 点 停止 卸载全部钩子,目标程序恢复原状;点 清空 清空队列、列表、数据面板与全部计数器。
04 · 拦截设置
决定 挂哪些钩子,直接影响能抓到什么。
- Winsock 1.1(
wsock32.dll):send / sendto / recv / recvfrom - Winsock 2.0(
ws2_32.dll):send / sendto / recv / recvfrom + WSASend / WSASendTo / WSARecv / WSARecvFrom - MS 扩展(
mswsock.dll):WSARecvEx,跟随「WSA接收」 - 只有 被探测到的 WinSock 版本 对应的钩子才会真正挂上
挂钩是在点「开始」的 那一刻 按开关逐个创建的。开始之后再改拦截设置 不会生效,必须「停止」→ 改 →「开始」。
05 · 过滤设置(只影响显示)
- 过滤方式:
不显示= 命中条件的 不显示;只显示= 只显示命中条件的 - 六个条件,格式如下表。勾了但输入框留空,保存时会被拒绝
- 指定类别:勾选后展开类别复选框组,注入页 8 项、代理页 4 项
| 条件 | 格式 | 匹配方式 |
|---|---|---|
| 套接字 | 5164;5252 | 精确匹配,; 分隔 |
| 长度 | 0-99;100 | 支持区间与单值 |
| IP地址 | 1.1.1.1;8.8.8.8 | 精确匹配 IP 段,本机与远端任一命中即算命中 |
| 端口号 | 443;80 | 精确匹配端口段,同上 |
| 指定包头 | 01 00 0A;02 FF | 匹配封包 开头 |
| 指定内容 | 4A 5B;FF FF | 在整包十六进制串中 子串包含 |
06 · 列表设置
两个页签(注入 / 代理),各 10 个复选框,控制列表显示哪些列:
序号 · 时间戳 · 类别 · 套接字 · 本机地址 · 本机所属地 · 远端地址 · 远端所属地 · 长度 · 数据
关掉两个 「所属地」 列可以显著降低高频抓包时的开销——它们背后是 QQWry 离线库查询 + 国旗图标渲染。
07 · 查找封包
- 正则表达式 输入框
- 匹配目标:
查找文本= 把封包按 UTF-8 解码后的文本;查找十六进制= 按十六进制格式化后的字符串(形如16 03 01,带空格) - 起点:从索引 0 开始 / 从当前选中行继续
- 查找下一个:命中后列表滚动选中该行,并在下方 Hex 编辑器 高亮定位到匹配片段;该行 Hex 定位不到时自动跳下一条继续搜
示例:查找以 0x16 0x03 开头的 TLS 记录 → 选「查找十六进制」,填 ^16 03。全部搜完无结果时弹出「没有匹配的封包」。
08 · 封包编辑与重放
双击列表行,或右键 → 编辑。这是 手工改包 + 重放 的主战场。
- 使用套接字:默认取原封包的 socket,发送时用这个。填
0则走代理模式的 SunnyNet 通道(见下方说明) - 十六进制编辑器:可直接改字节。右键菜单 = 添加到发送 ▸ / 添加到滤镜列表 / 剪切 / 复制 ▸(文本、十六进制)/ 粘贴 ▸(文本、十六进制)/ 全选。光标移动会同步「递进位置」
- 发送方式:按次发送(指定次数)或连续发送(无限循环直到点停止);间隔设为 0 则不休眠
- 递进:每发一次就把指定字节 +步长。
位置必须小于封包长度,否则报「递进位置错误」;勾「进位递进」后溢出会向前面的字节进位,最多进位数个 - 实时统计:发送总数 / 成功 / 失败
- 发送 / 停止
- 保存:把编辑后的内容 写回列表中的这条封包(更新数据、长度、socket)并刷新数据面板
发送走的是哪条通道
| 条件 | 发送方式 |
|---|---|
使用套接字 > 0 | 按封包类别调用原生 send / sendto / WSASend 等 API 直接发出 |
= 0 且类别为 TCP_Req / TCP_Resp | 经 SunnyNet 通道发往服务端 / 客户端 |
= 0 且类别为 UDP_* / WebSocket_* | 同上 |
= 0 且类别为 HTTP_* / HTTPS_* | 不支持发送(恒返回失败) |
09 · 封包列表右键菜单
| 菜单项 | 快捷键 | 作用 |
|---|---|---|
| 编辑 | — | 打开封包编辑窗口 |
| 复制 | Ctrl+C | 把选中行以十六进制文本复制到剪贴板(多选时每行一条) |
| 添加到发送 ▸ | — | 子菜单列出所有发送项,把选中封包追加进去 |
| 添加到滤镜列表 | — | 用选中封包 自动生成一条滤镜,内容预填 |
| 添加到仓库 ▸ | — | 存入指定仓库 |
| 设置系统套接字 | — | 把该行 socket 设为全局系统套接字 |
| 查看数据修改 | — | 左右对照 原始封包 与 滤镜修改后封包 |
| 导出到Excel | — | 导出选中行(未选则全部)为 .xls |
| 添加到文本A / 文本B | — | 送到「文本对比」页做差异比较 |
| 全选 / 取消选择 | Ctrl+A | — |
抓到目标包 → 右键 添加到滤镜列表(自动填好搜索行)→ 双击滤镜改动作与修改行 → 打开开关。这是从「看到」到「改掉」最短的路径。
10 · 封包数据对比
右键 →「查看数据修改」,左右两个 Hex 视图:左边 原始封包数据 ( 长度 N ),右边 修改后封包数据 ( 长度 M )。用来确认某条滤镜到底改了哪几个字节。
11 · 本章故障排查
按顺序查:① WPE 是否管理员权限;② 目标是否有反作弊 / 反注入保护(有则改用 代理模式);③ 程序目录下 WPEHook.dll、EasyHook32/64.dll、EasyLoad32/64.dll 是否齐全;④ 压缩包是否「解除锁定」;⑤ 看系统日志里的完整异常。
① 信息条的 WinSock 版本是否为空;② 拦截设置对应函数是否勾选(改完要停止再开始);③ 底部「过滤 :」计数在涨说明被显示过滤挡掉了;④ 系统设置里的 极速模式 是否开着;⑤ 是否有滤镜的动作是「不修改 - 不显示」。
正常现象。CreateAndInject 创建的是挂起进程,点一次 开始 才会唤醒。