注入模式
把 WPEHook.dll 注入目标进程,从 进程内部 挂钩 WinSock 收发函数。这是最贴近程序逻辑的抓包方式,本章走完从选目标到改包的完整链路。
WPE 把一个很小的 拦截模块 注入目标进程,挂钩 wsock32.dll / ws2_32.dll / mswsock.dll 的收发函数,抓到的封包送回 WPE 自己的窗口 显示。目标程序里 不会出现任何界面。
目标已经在运行、也不需要抓启动阶段的包时,这六步就是全部流程。
01 · 选择注入目标
首页点「注入模式」后进入 选择注入方式 这一屏 —— 三张卡片对应三种找目标的办法,下面是上一次注入的记录。

- Method 01 · 选择进程:从正在运行的进程里挑一个。点开是一张可搜索的进程表(进程名 / PID / 路径三列,搜索同时匹配这三样 —— 同名的
svchost只能靠路径分辨)。双击一行或选中后点页脚的「注入」;↑↓ 选行、Enter 注入。读数条上的Procs是当前枚举到的进程数 - Method 02 · 选择窗体:点下去 WPE 会 把自己最小化,你在屏幕上点一下目标窗口即可;按 Esc 取消。适合「不知道进程名、只认得那个窗口」的情形(多开、模拟器子窗口)
- Method 03 · 选择文件:从磁盘挑一个还没运行的
.exe,挂起启动、钩子就位后再唤醒 —— 这是唯一能抓到 启动阶段 封包的方式。选完还会让你填一次启动参数 - Last Injection(下方终端块):时间 / 方式 / 目标 / 路径四项;下面右端那颗「快捷注入」按同样的方式再来一遍,不用重新找。一次都没注入过时这里只写「还没有注入过」,按钮是灰的
- 进程表里 不会列出 WPE 自己
2.3 记的不只是进程名,而是 时间 + 方式 + 目标 + 完整路径 + 启动参数 五项,所以「快捷注入」能把上一次 原样 重放一遍(包括「选择文件」那条路的启动参数)。
⚠️ 它 不记 PID —— PID 会被系统回收,下次开机同一个号多半是别的进程。每次都按名字重新找。
三种选目标方式怎么挑
| 方式 | 适用场景 | 能否抓启动阶段 |
|---|---|---|
| 选择进程 | 目标已在运行,且知道进程名 | 否 |
| 选择窗体 | 不知道进程名,只知道是哪个窗口(多开、模拟器子窗口) | 否 |
| 选择文件 | 需要抓登录 / 握手等启动阶段封包 | 是 |
用「选择文件」注入后,目标进程处于 挂起 状态,看起来像卡死 —— 这是故意的,钩子要赶在它跑起来之前装好。必须点一次状态条上的 开始拦截,钩子装完之后程序才会唤醒它。
02 · 主界面导览

- 左侧导航:按 Data / Rules / Tools / System 四组排列,共 12 页。右端的数字是实时计数(封包条数、滤镜条数、日志条数…)。与代理模式的布局一致
- 折叠侧栏:左侧导航右上角那颗按钮把整条侧栏折成 图标栏(只留图标与角标),再点一下展开 —— 窄屏、或只想看数据时很有用
- 状态条:状态灯 + 状态字(已断开 / 已附加 / 拦截中)· 目标(进程名 +
#PID · x64/x86)· WinSock(已加载的模块)· 丢弃(只在不为 0 时出现,红色);右端依次是「专注列表」「开始拦截 / 停止拦截」「清空」「设置 ▾」 - 专注列表:状态条右端的切换按钮。开启后收起统计格、下半部与丢包提示,把高度让给封包表;状态条与常用操作仍在,再点一次恢复
- ⚠️ 没有「断开」按钮:退出程序时会自动把钩子从目标里摘掉,所以 换一个目标 = 重开一次 WPE。目标进程自己退出时这一屏不会清数据,只在上方挂一条提示,抓到的封包照样能看、能导出
- 统计格(7 × 2):第 1 列是总计与滤镜执行,第 2–5 列 上下成对(发 ↔ 收:Send↔Recv、SendTo↔RecvFrom、WSASend↔WSARecv、WSASendTo↔WSARecvFrom),第 6 列是待入列与已过滤,第 7 列是字节数与实时速率
- 工具条(从左到右):四个色块是滤镜动作的配色图例(替换 / 换包 / 拦截 / 仅显示,点一下就地改这一组的配色)· 查找框 ·「十六进制 / 文本」·「查找下一个」·「自动滚动」·「自动清理 + 条数」
- 封包列表:列宽可拖、双击表头分隔线恢复默认。命中滤镜的行整行着色,颜色与左边的图例一一对应
- 下半部:左边是快捷面板(滤镜 / 发送 / 机器人 / 仓库 / 解码器 / 取值器 六个页签,可直接勾选启停),右边是十六进制面板 —— 点一行封包就在这里看它的完整字节
- 设置 ▾ 里是注入模式的 7 个设置:过滤 / 拦截 / 列表 / 快捷键 / 备份 / 远程管理 / 系统
- 标题栏:最左边是 返回启动页(注入模式特有),不必关掉程序就能回首页重新选模式或改设置;往右依次是齿轮(软件设置)、图钉(窗口保持最前)与窗口按钮
状态条上 WinSock 那块读数窗写的是目标进程里 已经加载了哪几个 WinSock 模块:1.1(wsock32)· 2.0(ws2_32)· MS(mswsock),可能同时出现。
显示成一条短横 — 就是 一个都没加载——那时钩子装不上去,一个包都抓不到。先让程序产生一次网络行为,再重新注入。
刚附加上就会显示,不用等点「开始拦截」。
下半部:快捷面板与十六进制面板

- 六个页签 滤镜 / 发送 / 机器人 / 仓库 / 解码器 / 取值器,每行左边一个绿勾选框,点一下就启停那一条并立刻落库 —— 不用切到侧栏的对应页面;双击整行还直接打开它的编辑弹窗
- 右边那个数字是它的 执行次数;没启用的行整行压暗
- 页签旁边那枚青色键盘图标 说的是 全局快捷键当前作用在哪一份列表上(发送或机器人,二选一)。前 10 个快捷键依次执行那份列表的第 1~10 条,另外两个是「执行」「停止」,启停整份列表;那个二选一藏在「快捷键设置」里,本来按下去之前看不出来。12 个快捷键一个都没设时不出现这枚图标
- 右键还有整套菜单:整表组的「新增 / 全部启用 / 全部禁用」(滤镜 / 发送 / 机器人 另有「重置计数」,发送与机器人另有「执行 / 停止」),以及那一行的「置顶 / 上移 / 下移 / 置底 / 复制 / 删除」。面板里 不提供「导出」 —— 导出在各自的列表页里做

- 标题栏:序号 · 字节数 · 往返(从请求字节到拿到结果的耗时,不含本地渲染)· 改写后 / 改写前 分段 · 十六进制 / 文本 分段
- 改写后 / 改写前:被滤镜改过的封包,这两档能直接对照;不一样的字节标成琥珀色。没被滤镜动过的封包不出这一组,原地写着「未被滤镜改写」
- 每行放几个字节是按面板宽度算的,不是写死 16 —— 拖宽面板就多排几列(按 2 字节一组取整)。上面那条列号表头会跟着横向滚动,不会与正文错位
- 右边那一栏是「字符」,不是「文本」:它是 逐字节 的 Latin-1 显示,一个字节一格、与左边一一对齐。
0x00–0x1F与0x7F–0x9F显示成点,其余照字节值显示 - 右键菜单:添加到滤镜列表 / 添加到发送 ▸ / 添加到文本 A / 添加到文本 B,再加内建的复制文本 / 复制十六进制 / 全选。作用于 选中的那一段,没选就是整包(菜单项后面括号里的数字就是选中的字节数)
- 查找命中时,这里会 把命中的那几个字节圈出来

- 与「字符」栏是 两件事:这里按 UTF-8 解整段,上面那一栏是逐字节的 Latin-1
- HTTP / HTTPS 那四类封包 默认就停在这一档(它们本来就是文本协议);其余类型默认十六进制。手动切过之后,换一条封包会重新按类型判一次
- 自动换行、不横向滚:这块面板只有小半屏高又是拿来读的,横着拖等于把刚看的那半句推走。没有空格的长串也能断行
- ⚠️ 查找命中的高亮只在十六进制那一档画得出来:文本这一档是一整块
<pre>,没有字节级的选区 - ⚠️ 中文游戏的封包多半是 GBK,这一档只按 UTF-8 解,那种包在这里会是乱码——用「字符」栏对着十六进制读,或复制出去用 编码解码工作台
03 · 开始抓包
- 先进状态条右边的「设置 ▾」→ 拦截设置,勾选需要的函数(见下节)。必须在点「开始拦截」之前设置。
- 需要的话再进 过滤设置 缩小显示范围。
- 点状态条上的 开始拦截:挂钩生效;若目标是被挂起创建的(「选择文件」那条路),此时一并唤醒。
- 让目标程序产生网络行为,封包实时滚入列表。
- 点 停止拦截 卸载全部钩子,目标程序恢复原状;点 清空 清空队列、列表、数据面板与 对应那一组计数器。
04 · 拦截设置
决定 挂哪些钩子,直接影响能抓到什么。

- Winsock 1.1(
wsock32.dll):发送 / 发送到 / 接收 / 接收自 —— 对应sendsendtorecvrecvfrom - Winsock 2.0(
ws2_32.dll):同样四个入口,现代程序走的多半是这一组 - Winsock 2.0 · WSA:
WSASend/WSASendTo/WSARecv/WSARecvFrom—— 异步 I/O 用的那一族,网游很常见。「WSA接收」这一个开关还连带管着mswsock.dll的WSARecvEx - ⚠️ 64 位目标上不挂
WSARecvEx:为避免目标程序崩溃,64 位目标上跳过这一个入口,系统日志里会记一条,其余 12 个入口照常 - 关掉哪个入口,那个入口的封包就 既不进列表也不过滤镜。12 个开关会落库,也会立刻推给目标进程
- 底部那行琥珀提示只在 确实关掉了某个入口 时出现 —— 「抓不到包」十有八九是这里被关了
挂钩是在点「开始」的 那一刻 按开关逐个创建的。开始之后再改拦截设置 不会生效,必须「停止」→ 改 →「开始」。
05 · 过滤设置(只管收不收,不改内容)

- 过滤方式:「只显示命中的」或「不显示命中的」二选一 —— 同一套条件,正反两用
- 条件 共六项:套接字 / IP 地址 / 端口号 / 指定包头 / 指定内容 / 长度。勾了才生效,多项之间是 AND
- 类别:注入模式给的是 8 个 WinSock 类别(发送 / 发送到 / 接收 / 接收自 / WSA 各四个),与拦截设置那 12 个入口对得上;代理模式那边是 TCP / UDP 的请求与响应四类。2.2 之前这里错给成代理模式那四类,勾了也不会命中
- ⚠️ 勾了条件却 不填值 会被拦下来:放过去的话过滤会把所有包都滤掉,比报错难查得多
- 它 只管进不进列表,不改封包内容 —— 要改内容是 滤镜 的事

- 过滤方式与六个条件 完全一样,差别只在最底下那一组 类别:代理模式出
TCP 请求 / TCP 响应 / UDP 请求 / UDP 响应四项,注入模式出八个 WinSock 类别 - ⚠️ 2.2 之前这两组是串的:注入模式下出的是代理那四项,勾了也永远匹配不上。两套开关 各存各的,在一种模式里改不会影响另一种
- 「按类别过滤」那个总开关关掉时,四个类别一并压暗 —— 那时类别不参与判断
06 · 列表设置
只有一件事:列表显示哪几列。按当前模式存两套(注入模式与代理模式各一份,互不影响)。

- 可关的七列:套接字 · 类型 · 客户端 · 客户端地 · 服务端 · 服务端地 · 长度
- 序号 / 时间 / 域名 / 数据始终显示,界面上那句灰字写明了理由——序号是取字节的钥匙,另外三个是这张表的意义所在
关掉两个 「所属地」 列可以显著降低高频抓包时的开销——它们背后是 QQWry 离线库查询 + 国旗图标渲染。
它在 封包列表的工具条上(勾选框 + 条数),与它管的那张表摆在一起。超出条数后只删最旧的、保留最近 N 条。日志页的自动清理是 另一套,在日志页自己的工具条上,两者互不影响。
弹窗里那句灰字写的就是这四列:序号是取字节的钥匙(点一行去拿它的完整内容就靠它),另外三个是这张表的意义所在。
⚠️ 注入模式的表里 本来就没有「域名」这一列(域名只有代理模式那条中间人链路才解析得出来),所以这一屏实际固定的是序号 / 时间 / 数据三列。
⚠️ 还有一处两边不一样:这七个开关的文字用的是 代理模式那套列名(客户端 / 服务端),而注入模式的表头写的是 本机地址 / 远端地址——同一列,两个叫法。
07 · 查找封包
① 十六进制查找不区分大小写,带不带空格都行:0A1B2C 与 0a 1b 2c 效果相同。
② 「查找下一个」会逐处走:一个包里有几处命中就停几次,走完才跳到下一条封包。

- 查找框:输入的是 正则表达式,不是纯文本
- 「十六进制 / 文本」分段按钮(查找框右边):决定拿什么去匹配。
文本= 把封包按 UTF-8 解码后的字符串;十六进制= 连续的大写十六进制串 - 查找下一个:命中后列表滚到那一行并选中,下方十六进制面板 圈出命中的那几个字节。找到末尾会自己 回头再来一圈,转完一整圈还没有才报「没有匹配的封包」
- 要从头再来:改一下查找内容,或按 Esc / 点 × 清空 —— 游标会退回开头(2.2 去掉了单独的「从头查找」按钮,它没有一件「查找下一个」做不到的事)
- 工具条上其余几项:左边四个色块是滤镜动作的 配色图例(可点,就地改配色),右边是自动滚动与自动清理
示例:找以 0x16 0x03 开头的 TLS 记录 → 选「十六进制」,填 ^1603。
08 · 封包编辑与重放
双击列表行,或右键 → 编辑。这是 手工改包 + 重放 的主战场。

- 信息栏:使用套接字 / 类型 / 本机地址 / 远端地址 / 长度。套接字框旁边那颗「用系统套接字」一键填入全局那个值(没设过时是灰的);没有可用套接字时不能按原连接回发。
- 发送(左):「按次发送」填次数,或「连续发送」直到点停止;间隔为 0 就不休眠。下面实时显示发送总数 / 成功 / 失败
- 递进(右):每发一次就把指定 位置 的字节 +步长。勾「进位递进」后溢出会往前面的字节进位,最多进指定的位数 —— 序号字段就靠它
- 十六进制编辑器:可直接键入改字节。Insert 在「覆盖 / 插入」之间切换,标题栏右边那枚 描边胶囊 会显示当前是哪一种(绿=覆盖,琥珀=插入)—— 插入会把包撑长,所以它用更当心的颜色
- 右边那一栏是字符,不是「文本」:它是 逐字节 的 Latin-1 显示,一个字节一格、与左边的十六进制一一对齐。要看解码后的整段文字请用十六进制面板的「文本」页签,那边才按 UTF-8 解
- 右键菜单:添加到滤镜列表 / 添加到发送 ▸ | 剪切 / 复制文本 / 复制十六进制 / 粘贴文本 / 粘贴十六进制 | 全选(这里是可编辑的,所以比只读的十六进制面板多了剪切与粘贴)
- 保存 把改动写回列表里的这一条封包;取消 什么都不改
发送走的是哪条通道
| 条件 | 发送方式 |
|---|---|
使用套接字 > 0 | 按封包类别调用原生 send / sendto / WSASend 等 API 直接发出 |
= 0 | 没有可用于按原连接回发的套接字 |
= 0 且类别为 UDP_* / WebSocket_* | 同上 |
= 0 且类别为 HTTP_* / HTTPS_* | 不支持发送(恒返回失败) |
09 · 封包列表右键菜单
菜单项按屏幕上的顺序列在下面。没有键盘快捷键——这张表上 Ctrl+C / Ctrl+A 都不接管,一律走右键。选中若干行之后,菜单项后面的括号里会写着条数。
| 菜单项 | 作用 |
|---|---|
| 编辑 | 打开封包编辑窗口。只编辑第一条——编辑器一次只装一个包 |
| 查看数据修改 | 并排对照 改写前 与 改写后 |
| 复制 | 把选中行以十六进制文本复制到剪贴板(一行一条) |
| 添加到文本 A / 添加到文本 B | 送到「文本对比」页做差异比较,整体替换 那一侧的内容并切过去 |
| 添加到发送 ▸ | 子菜单列出所有发送项,把选中封包追加进去;一条发送都没有时这一项是灰的 |
| 添加到滤镜列表 | 用选中封包 自动生成一条滤镜,内容预填。只用第一条,所以这一项不带条数 |
| 添加到仓库 ▸ | 存入指定仓库;一个仓库都没有时是灰的 |
| 设置系统套接字 | 把该行的套接字设为全局「系统套接字」。⚠️ 该行套接字是 0(HTTP / HTTPS / WebSocket 那几类就是)时会被拒绝,不会把已经设好的值抹成 0 |
| 导出到 Excel | 导出选中行为 .xls;一行都没选就是导整张表,所以不选也能点 |
| 全选 / 取消选择 | 选中集的两个入口(这张表没有「选中」勾选框,选中走单击 / Ctrl / Shift) |
抓到目标包 → 右键 添加到滤镜列表(自动填好搜索行)→ 双击滤镜改动作与修改行 → 打开开关。这是从「看到」到「改掉」最短的路径。
10 · 封包数据对比
右键 →「查看数据修改」,左右对照 改写前 与 改写后,用来确认某条滤镜到底改了哪几个字节。

- 顶上一行是 序号 · 原始封包数据 N 长度 · 修改后封包数据 N 长度——两个数不一样就说明滤镜改变了包长。没被滤镜动过时这一行直接写「改写前后逐字节相同,没有滤镜动过这个封包」
- 并排视图:左「改写前」右「改写后」,不同的字节标成琥珀色。它与 文本对比 页用的是同一套比较方式:滤镜的「替换」改变了长度时,两栏照样对得齐,只标出真正变化的那一段
- 长度变了照样对得齐:插入 / 删除的那一侧用占位格顶住,所以右栏的偏移会比左栏差几个字节,而两栏 继续并排对应
- 差异表:
序号 / 位置 / 字节数 / 变更类型 / 原值 / 新值。点一行滚到上面那一处;变更类型有修改 / 新增 / 删除三种 - ⚠️ 「字节数」那一列可能写成
4 → 3:表示这一处改写前后的长度不同 - 原值 / 新值 封顶 24 字节,多的写「… +N」——滤镜整包替换时一块就是几千字节,铺开读不了
11 · 本章故障排查
按顺序查:① WPE 是否管理员权限;② 目标是否有反作弊 / 反注入保护(有则改用 代理模式);③ 程序目录下 WPEHook.dll、EasyHook32/64.dll、EasyLoad32/64.dll 是否齐全(被安全软件删掉时,重新运行一次启动器会自动补回来);④ 到 系统日志 看那一条完整的错误信息 —— 界面提示里只显示第一行。
① 状态条上的 WinSock 版本是否为空(刚附加上就会显示,不用等点拦截);② 拦截设置对应函数是否勾选;③ 统计格里的 已过滤 在涨,说明被「过滤设置」挡掉了;④ 系统设置里的 极速模式 是否开着(它只数数、不显示封包,但滤镜照常工作);⑤ 是否有滤镜的动作是「不显示」。
正常现象。那条路创建的是 挂起 进程,点一次状态条上的 开始拦截,钩子装完才会唤醒它。