CN
v2.5
WPE_TUTORIAL_V2 // 02_INJECT

注入模式

最新版教程

把 WPEHook.dll 注入目标进程,从 进程内部 挂钩 WinSock 收发函数。这是最贴近程序逻辑的抓包方式,本章走完从选目标到改包的完整链路。

// 一句话原理

WPE 把一个很小的 拦截模块 注入目标进程,挂钩 wsock32.dll / ws2_32.dll / mswsock.dll 的收发函数,抓到的封包送回 WPE 自己的窗口 显示。目标程序里 不会出现任何界面。

快速上手 // 注入模式六步

目标已经在运行、也不需要抓启动阶段的包时,这六步就是全部流程。

  1. 首页点 注入模式,在「选择注入方式」屏点第一张卡 选择进程,用弹出进程表上方的搜索框筛出目标(进程名 / PID / 路径都能搜)。
  2. 双击那一行(或选中后点页脚的「注入」)。附加成功后 界面留在 WPE 自己的窗口里——目标程序里不会出现任何界面。
  3. 进状态条右边的「设置 ▾ → 拦截设置」,勾上要挂钩的收发函数。默认全开,先别急着减。
  4. 包太多看不过来时,再进「设置 ▾ → 过滤设置」按端口 / 长度 / 内容缩小 显示 范围。
  5. 点状态条上的 开始拦截,操作目标程序产生网络行为,封包实时滚入列表。
  6. 双击目标行打开 封包编辑,改字节 → 点「发送」重放;确认规律后再把它固化成 滤镜。

01 · 选择注入目标

首页点「注入模式」后进入 选择注入方式 这一屏 —— 三张卡片对应三种找目标的办法,下面是上一次注入的记录。

01选择注入方式 · 三张方式卡 + 下方的「上次注入」记录。
WPE x64 选择注入方式:选择进程 / 选择窗体 / 选择文件 三张卡片与上次注入记录
  1. Method 01 · 选择进程:从正在运行的进程里挑一个。点开是一张可搜索的进程表(进程名 / PID / 路径三列,搜索同时匹配这三样 —— 同名的 svchost 只能靠路径分辨)。双击一行或选中后点页脚的「注入」;↑↓ 选行、Enter 注入。读数条上的 Procs 是当前枚举到的进程数
  2. Method 02 · 选择窗体:点下去 WPE 会 把自己最小化,你在屏幕上点一下目标窗口即可;按 Esc 取消。适合「不知道进程名、只认得那个窗口」的情形(多开、模拟器子窗口)
  3. Method 03 · 选择文件:从磁盘挑一个还没运行的 .exe,挂起启动、钩子就位后再唤醒 —— 这是唯一能抓到 启动阶段 封包的方式。选完还会让你填一次启动参数
  4. Last Injection(下方终端块):时间 / 方式 / 目标 / 路径四项;下面右端那颗「快捷注入」按同样的方式再来一遍,不用重新找。一次都没注入过时这里只写「还没有注入过」,按钮是灰的
  5. 进程表里 不会列出 WPE 自己
// 上次注入记得更全了

2.3 记的不只是进程名,而是 时间 + 方式 + 目标 + 完整路径 + 启动参数 五项,所以「快捷注入」能把上一次 原样 重放一遍(包括「选择文件」那条路的启动参数)。
⚠️ 它 不记 PID —— PID 会被系统回收,下次开机同一个号多半是别的进程。每次都按名字重新找。

三种选目标方式怎么挑

方式适用场景能否抓启动阶段
选择进程目标已在运行,且知道进程名否
选择窗体不知道进程名,只知道是哪个窗口(多开、模拟器子窗口)否
选择文件需要抓登录 / 握手等启动阶段封包是
// 关键

用「选择文件」注入后,目标进程处于 挂起 状态,看起来像卡死 —— 这是故意的,钩子要赶在它跑起来之前装好。必须点一次状态条上的 开始拦截,钩子装完之后程序才会唤醒它。

02 · 主界面导览

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

状态条上 WinSock 那块读数窗写的是目标进程里 已经加载了哪几个 WinSock 模块:1.1(wsock32)· 2.0(ws2_32)· MS(mswsock),可能同时出现。
显示成一条短横 — 就是 一个都没加载——那时钩子装不上去,一个包都抓不到。先让程序产生一次网络行为,再重新注入。
刚附加上就会显示,不用等点「开始拦截」。

下半部:快捷面板与十六进制面板

03快捷面板 · 六个页签,不离开这一屏就能启停规则。
WPE x64 快捷面板:滤镜 / 发送 / 机器人 / 仓库 / 解码器 / 取值器 六个页签与行内开关
  1. 六个页签 滤镜 / 发送 / 机器人 / 仓库 / 解码器 / 取值器,每行左边一个绿勾选框,点一下就启停那一条并立刻落库 —— 不用切到侧栏的对应页面;双击整行还直接打开它的编辑弹窗
  2. 右边那个数字是它的 执行次数;没启用的行整行压暗
  3. 页签旁边那枚青色键盘图标 说的是 全局快捷键当前作用在哪一份列表上(发送或机器人,二选一)。前 10 个快捷键依次执行那份列表的第 1~10 条,另外两个是「执行」「停止」,启停整份列表;那个二选一藏在「快捷键设置」里,本来按下去之前看不出来。12 个快捷键一个都没设时不出现这枚图标
  4. 右键还有整套菜单:整表组的「新增 / 全部启用 / 全部禁用」(滤镜 / 发送 / 机器人 另有「重置计数」,发送与机器人另有「执行 / 停止」),以及那一行的「置顶 / 上移 / 下移 / 置底 / 复制 / 删除」。面板里 不提供「导出」 —— 导出在各自的列表页里做
04十六进制面板 · 点一行封包,它的完整字节就在这里。
WPE x64 十六进制面板:标题栏、列号表头、偏移 / 字节 / 字符三栏
  1. 标题栏:序号 · 字节数 · 往返(从请求字节到拿到结果的耗时,不含本地渲染)· 改写后 / 改写前 分段 · 十六进制 / 文本 分段
  2. 改写后 / 改写前:被滤镜改过的封包,这两档能直接对照;不一样的字节标成琥珀色。没被滤镜动过的封包不出这一组,原地写着「未被滤镜改写」
  3. 每行放几个字节是按面板宽度算的,不是写死 16 —— 拖宽面板就多排几列(按 2 字节一组取整)。上面那条列号表头会跟着横向滚动,不会与正文错位
  4. 右边那一栏是「字符」,不是「文本」:它是 逐字节 的 Latin-1 显示,一个字节一格、与左边一一对齐。0x00–0x1F 与 0x7F–0x9F 显示成点,其余照字节值显示
  5. 右键菜单:添加到滤镜列表 / 添加到发送 ▸ / 添加到文本 A / 添加到文本 B,再加内建的复制文本 / 复制十六进制 / 全选。作用于 选中的那一段,没选就是整包(菜单项后面括号里的数字就是选中的字节数)
  6. 查找命中时,这里会 把命中的那几个字节圈出来
05文本页签 · 按 UTF-8 解码后的整段文字,自动换行、不横向滚。
WPE x64 十六进制面板的文本页签
  1. 与「字符」栏是 两件事:这里按 UTF-8 解整段,上面那一栏是逐字节的 Latin-1
  2. HTTP / HTTPS 那四类封包 默认就停在这一档(它们本来就是文本协议);其余类型默认十六进制。手动切过之后,换一条封包会重新按类型判一次
  3. 自动换行、不横向滚:这块面板只有小半屏高又是拿来读的,横着拖等于把刚看的那半句推走。没有空格的长串也能断行
  4. ⚠️ 查找命中的高亮只在十六进制那一档画得出来:文本这一档是一整块 <pre>,没有字节级的选区
  5. ⚠️ 中文游戏的封包多半是 GBK,这一档只按 UTF-8 解,那种包在这里会是乱码——用「字符」栏对着十六进制读,或复制出去用 编码解码工作台

03 · 开始抓包

  1. 先进状态条右边的「设置 ▾」→ 拦截设置,勾选需要的函数(见下节)。必须在点「开始拦截」之前设置。
  2. 需要的话再进 过滤设置 缩小显示范围。
  3. 点状态条上的 开始拦截:挂钩生效;若目标是被挂起创建的(「选择文件」那条路),此时一并唤醒。
  4. 让目标程序产生网络行为,封包实时滚入列表。
  5. 点 停止拦截 卸载全部钩子,目标程序恢复原状;点 清空 清空队列、列表、数据面板与 对应那一组计数器。

04 · 拦截设置

决定 挂哪些钩子,直接影响能抓到什么。

06拦截设置(注入模式)· 12 个函数开关,默认全开。
WPE x64 注入模式的拦截设置:Winsock 1.1 / 2.0 / WSA 三组共 12 个开关
  1. Winsock 1.1(wsock32.dll):发送 / 发送到 / 接收 / 接收自 —— 对应 send sendto recv recvfrom
  2. Winsock 2.0(ws2_32.dll):同样四个入口,现代程序走的多半是这一组
  3. Winsock 2.0 · WSA:WSASend / WSASendTo / WSARecv / WSARecvFrom —— 异步 I/O 用的那一族,网游很常见。「WSA接收」这一个开关还连带管着 mswsock.dll 的 WSARecvEx
  4. ⚠️ 64 位目标上不挂 WSARecvEx:为避免目标程序崩溃,64 位目标上跳过这一个入口,系统日志里会记一条,其余 12 个入口照常
  5. 关掉哪个入口,那个入口的封包就 既不进列表也不过滤镜。12 个开关会落库,也会立刻推给目标进程
  6. 底部那行琥珀提示只在 确实关掉了某个入口 时出现 —— 「抓不到包」十有八九是这里被关了
// 必看

挂钩是在点「开始」的 那一刻 按开关逐个创建的。开始之后再改拦截设置 不会生效,必须「停止」→ 改 →「开始」。

05 · 过滤设置(只管收不收,不改内容)

07过滤设置 · 先选过滤方式,再填条件;各条件之间是 AND 关系。
WPE x64 注入模式的过滤设置:过滤方式、六个条件、八个 WinSock 类别
  1. 过滤方式:「只显示命中的」或「不显示命中的」二选一 —— 同一套条件,正反两用
  2. 条件 共六项:套接字 / IP 地址 / 端口号 / 指定包头 / 指定内容 / 长度。勾了才生效,多项之间是 AND
  3. 类别:注入模式给的是 8 个 WinSock 类别(发送 / 发送到 / 接收 / 接收自 / WSA 各四个),与拦截设置那 12 个入口对得上;代理模式那边是 TCP / UDP 的请求与响应四类。2.2 之前这里错给成代理模式那四类,勾了也不会命中
  4. ⚠️ 勾了条件却 不填值 会被拦下来:放过去的话过滤会把所有包都滤掉,比报错难查得多
  5. 它 只管进不进列表,不改封包内容 —— 要改内容是 滤镜 的事
08同一屏在代理模式下 · 只有「类别」那一组不同。
WPE x64 代理模式的过滤设置:TCP / UDP 请求响应四个类别
  1. 过滤方式与六个条件 完全一样,差别只在最底下那一组 类别:代理模式出 TCP 请求 / TCP 响应 / UDP 请求 / UDP 响应 四项,注入模式出八个 WinSock 类别
  2. ⚠️ 2.2 之前这两组是串的:注入模式下出的是代理那四项,勾了也永远匹配不上。两套开关 各存各的,在一种模式里改不会影响另一种
  3. 「按类别过滤」那个总开关关掉时,四个类别一并压暗 —— 那时类别不参与判断

06 · 列表设置

只有一件事:列表显示哪几列。按当前模式存两套(注入模式与代理模式各一份,互不影响)。

09列表设置 · 七个可关的列,另外三个始终显示。
WPE x64 列表设置弹窗:显示哪些列
  1. 可关的七列:套接字 · 类型 · 客户端 · 客户端地 · 服务端 · 服务端地 · 长度
  2. 序号 / 时间 / 域名 / 数据始终显示,界面上那句灰字写明了理由——序号是取字节的钥匙,另外三个是这张表的意义所在
// 性能技巧

关掉两个 「所属地」 列可以显著降低高频抓包时的开销——它们背后是 QQWry 离线库查询 + 国旗图标渲染。

// 「自动清理」在封包列表的工具条上

它在 封包列表的工具条上(勾选框 + 条数),与它管的那张表摆在一起。超出条数后只删最旧的、保留最近 N 条。日志页的自动清理是 另一套,在日志页自己的工具条上,两者互不影响。

// 序号 / 时间 / 域名 / 数据不给关

弹窗里那句灰字写的就是这四列:序号是取字节的钥匙(点一行去拿它的完整内容就靠它),另外三个是这张表的意义所在。
⚠️ 注入模式的表里 本来就没有「域名」这一列(域名只有代理模式那条中间人链路才解析得出来),所以这一屏实际固定的是序号 / 时间 / 数据三列。
⚠️ 还有一处两边不一样:这七个开关的文字用的是 代理模式那套列名(客户端 / 服务端),而注入模式的表头写的是 本机地址 / 远端地址——同一列,两个叫法。

// 查找的两个小知识

① 十六进制查找不区分大小写,带不带空格都行:0A1B2C 与 0a 1b 2c 效果相同。
② 「查找下一个」会逐处走:一个包里有几处命中就停几次,走完才跳到下一条封包。

10查找封包 · 就在封包列表的工具条上(图中间那条)。
WPE x64 注入模式数据页,工具条中间是查找框
  1. 查找框:输入的是 正则表达式,不是纯文本
  2. 「十六进制 / 文本」分段按钮(查找框右边):决定拿什么去匹配。文本 = 把封包按 UTF-8 解码后的字符串;十六进制 = 连续的大写十六进制串
  3. 查找下一个:命中后列表滚到那一行并选中,下方十六进制面板 圈出命中的那几个字节。找到末尾会自己 回头再来一圈,转完一整圈还没有才报「没有匹配的封包」
  4. 要从头再来:改一下查找内容,或按 Esc / 点 × 清空 —— 游标会退回开头(2.2 去掉了单独的「从头查找」按钮,它没有一件「查找下一个」做不到的事)
  5. 工具条上其余几项:左边四个色块是滤镜动作的 配色图例(可点,就地改配色),右边是自动滚动与自动清理

示例:找以 0x16 0x03 开头的 TLS 记录 → 选「十六进制」,填 ^1603。

08 · 封包编辑与重放

双击列表行,或右键 → 编辑。这是 手工改包 + 重放 的主战场。

11封包编辑 · 上面一条信息栏,中间是十六进制编辑器,两侧是发送与递进。
WPE x64 封包编辑:套接字信息、发送方式、递进、十六进制编辑器
  1. 信息栏:使用套接字 / 类型 / 本机地址 / 远端地址 / 长度。套接字框旁边那颗「用系统套接字」一键填入全局那个值(没设过时是灰的);没有可用套接字时不能按原连接回发。
  2. 发送(左):「按次发送」填次数,或「连续发送」直到点停止;间隔为 0 就不休眠。下面实时显示发送总数 / 成功 / 失败
  3. 递进(右):每发一次就把指定 位置 的字节 +步长。勾「进位递进」后溢出会往前面的字节进位,最多进指定的位数 —— 序号字段就靠它
  4. 十六进制编辑器:可直接键入改字节。Insert 在「覆盖 / 插入」之间切换,标题栏右边那枚 描边胶囊 会显示当前是哪一种(绿=覆盖,琥珀=插入)—— 插入会把包撑长,所以它用更当心的颜色
  5. 右边那一栏是字符,不是「文本」:它是 逐字节 的 Latin-1 显示,一个字节一格、与左边的十六进制一一对齐。要看解码后的整段文字请用十六进制面板的「文本」页签,那边才按 UTF-8 解
  6. 右键菜单:添加到滤镜列表 / 添加到发送 ▸ | 剪切 / 复制文本 / 复制十六进制 / 粘贴文本 / 粘贴十六进制 | 全选(这里是可编辑的,所以比只读的十六进制面板多了剪切与粘贴)
  7. 保存 把改动写回列表里的这一条封包;取消 什么都不改

发送走的是哪条通道

条件发送方式
使用套接字 > 0按封包类别调用原生 send / sendto / WSASend 等 API 直接发出
= 0没有可用于按原连接回发的套接字
= 0 且类别为 UDP_* / WebSocket_*同上
= 0 且类别为 HTTP_* / HTTPS_*不支持发送(恒返回失败)

菜单项按屏幕上的顺序列在下面。没有键盘快捷键——这张表上 Ctrl+C / Ctrl+A 都不接管,一律走右键。选中若干行之后,菜单项后面的括号里会写着条数。

菜单项作用
编辑打开封包编辑窗口。只编辑第一条——编辑器一次只装一个包
查看数据修改并排对照 改写前 与 改写后
复制把选中行以十六进制文本复制到剪贴板(一行一条)
添加到文本 A / 添加到文本 B送到「文本对比」页做差异比较,整体替换 那一侧的内容并切过去
添加到发送 ▸子菜单列出所有发送项,把选中封包追加进去;一条发送都没有时这一项是灰的
添加到滤镜列表用选中封包 自动生成一条滤镜,内容预填。只用第一条,所以这一项不带条数
添加到仓库 ▸存入指定仓库;一个仓库都没有时是灰的
设置系统套接字把该行的套接字设为全局「系统套接字」。⚠️ 该行套接字是 0(HTTP / HTTPS / WebSocket 那几类就是)时会被拒绝,不会把已经设好的值抹成 0
导出到 Excel导出选中行为 .xls;一行都没选就是导整张表,所以不选也能点
全选 / 取消选择选中集的两个入口(这张表没有「选中」勾选框,选中走单击 / Ctrl / Shift)
// 高频组合技

抓到目标包 → 右键 添加到滤镜列表(自动填好搜索行)→ 双击滤镜改动作与修改行 → 打开开关。这是从「看到」到「改掉」最短的路径。

10 · 封包数据对比

右键 →「查看数据修改」,左右对照 改写前 与 改写后,用来确认某条滤镜到底改了哪几个字节。

12查看数据修改 · 上面并排对照,下面逐处列出来。
WPE x64 查看数据修改:改写前 / 改写后并排视图与差异表
  1. 顶上一行是 序号 · 原始封包数据 N 长度 · 修改后封包数据 N 长度——两个数不一样就说明滤镜改变了包长。没被滤镜动过时这一行直接写「改写前后逐字节相同,没有滤镜动过这个封包」
  2. 并排视图:左「改写前」右「改写后」,不同的字节标成琥珀色。它与 文本对比 页用的是同一套比较方式:滤镜的「替换」改变了长度时,两栏照样对得齐,只标出真正变化的那一段
  3. 长度变了照样对得齐:插入 / 删除的那一侧用占位格顶住,所以右栏的偏移会比左栏差几个字节,而两栏 继续并排对应
  4. 差异表:序号 / 位置 / 字节数 / 变更类型 / 原值 / 新值。点一行滚到上面那一处;变更类型有修改 / 新增 / 删除三种
  5. ⚠️ 「字节数」那一列可能写成 4 → 3:表示这一处改写前后的长度不同
  6. 原值 / 新值 封顶 24 字节,多的写「… +N」——滤镜整包替换时一块就是几千字节,铺开读不了

11 · 本章故障排查

// 注入失败

按顺序查:① WPE 是否管理员权限;② 目标是否有反作弊 / 反注入保护(有则改用 代理模式);③ 程序目录下 WPEHook.dll、EasyHook32/64.dll、EasyLoad32/64.dll 是否齐全(被安全软件删掉时,重新运行一次启动器会自动补回来);④ 到 系统日志 看那一条完整的错误信息 —— 界面提示里只显示第一行。

// 注入成功但抓不到包

① 状态条上的 WinSock 版本是否为空(刚附加上就会显示,不用等点拦截);② 拦截设置对应函数是否勾选;③ 统计格里的 已过滤 在涨,说明被「过滤设置」挡掉了;④ 系统设置里的 极速模式 是否开着(它只数数、不显示封包,但滤镜照常工作);⑤ 是否有滤镜的动作是「不显示」。

// 用「选择文件」注入后目标卡死

正常现象。那条路创建的是 挂起 进程,点一次状态条上的 开始拦截,钩子装完才会唤醒它。