CN
v2.1.7
WPE_TUTORIAL_V2 // 01_START

起步与概念

Tutorial Rev · 2.1.8 beta

本章覆盖 安装启动首页三种入口多开数据库,以及贯穿全书的 核心概念。读完这一章,你会知道自己该走注入模式还是代理模式。

// 关于本教程

本教程按 2.1.8 beta 版整理,界面为全新的 AntdUI(左侧导航 + 明暗主题)。
2.1.x 界面示意图为按实际布局绘制的 结构图(同款赛博配色),红圈序号与下方图例一一对应。
仍在使用 1.0.0.36 老版本?请下载 旧版教程 PDF

快速上手 // 十分钟跑通第一次抓包

先照着走一遍,把「能看到封包」这件事跑通;每一步背后的原理,本章与后面几章会逐个拆开。

  1. 以管理员身份 运行 WinsockPacketEditor.exe,进入首页的三张卡片。
  2. 挑一条路:抓普通桌面程序 / 模拟器走 注入模式;要 HTTPS 明文、或要抓手机与另一台电脑走 代理模式
  3. 注入模式:在弹出的进程列表里选中目标进程,点「注入」,WPE 界面会出现在目标程序内。
    代理模式:先到「菜单 → 代理设置」勾上 启用 SOCKS5 代理(默认端口 1080),保存。
  4. 设置拦截范围:「菜单 → 拦截设置」勾上要挂钩的收发函数(注入模式)或 TCP / UDP 的请求与响应(代理模式)。这一步必须在点「开始」之前完成,开始之后再改不生效。
  5. 点工具栏「开始」,让目标程序产生一次网络行为,封包就会实时滚进列表。
  6. 双击任意一行 打开封包编辑窗口,改几个字节后点「发送」,就完成了一次最小闭环的抓包 → 改包 → 重放。

系统要求

项目要求
操作系统Windows 10 / 11 · Server 2019 / 2022(推荐 x64
运行库.NET Framework 4.8
权限必须管理员权限。非管理员启动时会自动以 runas 重启自身
目标程序32 位 / 64 位均支持,按目标进程位数自动选择注入模块
数据存放SQLite,默认 C:\WPE64DB\<版本号>.db
部署方式单文件绿色版:压缩包解压后只有一个 exe,双击即用,无需安装、无自动更新

下载与安装

WPE x64 是 单文件绿色版:压缩包里只有一个 exe,不需要安装、不写注册表、不进「添加或删除程序」。想换个位置放,整个 exe 拖走即可;不想要了,删掉 exe 与数据库目录就干净了。

  1. 下载压缩包:到 下载中心 选最新版,走 蓝奏云百度网盘 任一渠道(百度网盘需要提取码,页面上有)。
  2. 先解除锁定:在下载得到的压缩包上右键 →「属性」→ 勾选底部的「解除锁定」→ 应用。这一步在解压之前做,见下方警告。
  3. 解压到任意目录:里面就一个 WinsockPacketEditor.exe。放桌面、放 D 盘、放 U 盘都行,路径尽量别带中文与空格
  4. 双击运行:不是管理员会弹 UAC,选「是」即可(见 首次启动)。若系统弹出 SmartScreen 的「Windows 已保护你的电脑」,点「更多信息」→「仍要运行」。
// 一定要先解除锁定

从网上下载的压缩包会被 Windows 打上 Zone.Identifier 标记。如果先解压再解锁,标记已经跟着落到 exe 上了,注入时大概率报 STATUS_INTERNAL_ERROR (Code: 15)。忘了做也能补救:在解压出来的 exe 上右键「属性 → 解除锁定」,或直接删掉重新来一遍。

// 运行库

需要 .NET Framework 4.8。Windows 10 1903 及以后的版本已内置,一般不用管;若启动时报缺少运行库,到微软官网下载 .NET Framework 4.8 运行时装上再试。

怎么升级到新版本

没有自动更新——软件不会自己联网检查版本,也不会弹升级提示。换新版就是重新走一遍上面的流程:

  1. 下载中心 看更新日志,确认这一版有你要的东西。
  2. 下载新压缩包 → 解除锁定 → 解压出新的 exe。
  3. 关掉正在运行的旧版(注入模式下先「停止」并退出被注入的程序),再运行新 exe。
  4. 旧版的 exe 可以直接删掉,也可以留着——两个版本的 exe 放在一起并不冲突。
// 换版本 = 换一个空数据库

配置存在 C:\WPE64DB\<程序集版本>.db 里,文件名跟着版本走。所以升级后打开新版,滤镜、发送、机器人、代理账号这些会是空的——数据没丢,只是在旧版本的那个 .db 里。
要把配置带过去:在旧版 用「备份设置」导出 .sb到新版 再导入。建议每次升级前都顺手导一份。

首次启动

  1. 双击启动,非管理员时会弹出 UAC 提权对话框,选择「是」——程序会退出并以管理员身份重启。
  2. 当前为 beta 版,会弹出提示框「这是一个测试版程序」,点 知道了 继续。
  3. 进入 首页,在这里选择工作模式。

首页 · 三个入口

01首页界面 · 无边框窗口,三块可点击卡片 + 外链区 + 右上角工具。
WPE x64 - 首页 中文 ZH-CN 主题 — □ ✕ 5 WPE x64 Winsock Packet Editor 注入模式 以注入进程的方式来拦截封包 EasyHook · 挂钩 WinSock API 1 代理模式 以代理服务端的方式来拦截封包 SOCKS5 + HTTP MITM 2 多开设置 配置数据库的路径以实现软件多开 SQLite 路径切换 3 了解更多 官方网站 软件使用教程 GitHub Gitee 问题 & 反馈 6 4 点击卡片任意位置即可进入对应模式
  1. 注入模式:点击后弹出「进程列表」对话框,选目标并注入 → 第 2 章
  2. 代理模式:点击后首页关闭,直接进入代理模式主窗口 → 第 3 章
  3. 多开设置:切换 SQLite 数据库路径,实现多套互不干扰的配置(见下节)
  4. 三张卡片 整块都是热区,标题、副标题、图标点哪里都能进
  5. 语言(中文 / English)与明暗主题开关,切换即时生效
  6. 外链区:官方网站 / 软件使用教程 / GitHub / Gitee / 问题反馈
// 注意

官网地址不可达时,程序会自动改用备用 IP http://101.132.222.195,因此断网环境下点击外链可能无响应属正常现象。

多开设置(数据库)

WPE 的 全部配置——系统设置、滤镜、发送、机器人、仓库、代理账号、映射、黑白名单、WPC 服务器与公告——都存放在 同一个 SQLite 文件 里。因此:

切换数据库路径 = 换一整套独立配置 = 实现多开。

02多开设置对话框 · 必须在 选择模式之前 设置。
多开设置 数据库路径 : D:\WPE_A 选择路径 1 数据库名称 : 2.1.8.0.db(只读,跟随程序集版本) 2 如需多开软件,请在每次选择模式前设置不同的 [ 数据库路径 ] 数据库路径下如果没有当前版本号的文件,则系统会自动创建一个空的数据库 3 保存 退出 4
  1. 数据库路径:默认 C:\WPE64DB。点「选择路径」用文件夹对话框挑目录
  2. 数据库名称:只读,固定为 <程序集版本>.db,例如 2.1.8.0.db换版本会自动换库
  3. 界面原文提示
  4. 点「保存」后立即在该路径下建库建表,并提示「多开设置已保存」

多开操作步骤

  1. 首页 → 多开设置,把路径改为 D:\WPE_A,保存。
  2. 回首页选择模式,此后所有配置读写都指向新库。
  3. 要开第二份:再启动一个 WPE 实例,路径改为 D:\WPE_B,保存后再选模式。
// 原理

注入模式的库路径是 随注入参数传进目标进程 的(InjectionParameters.DataBasePath),所以注入端和宿主端读写的始终是同一个库,不会串。

核心概念 · 两种模式怎么选

能力注入模式代理模式
原理EasyHook 注入 + WinSock API Hook自建 SOCKS5 服务器 + SunnyNet MITM
界面宿主目标进程内WPE 自己的进程
抓包类别发送 / 接收 / 发送到 / 接收自 / WSA*TCP、UDP、HTTP(S)、WebSocket 的请求与响应
HTTPS 明文✗ 拿到的是加密字节 内置 CA 中间人解密
需要目标配合不需要,但可能被反作弊拦截需走代理(或用驱动强制接管)
端口 / 域名映射✓ 本地映射 / 远程映射
账号体系 / 防火墙✓ 代理账号 + 黑白名单
改包 / 重放✓ / ✓✓ / ✓(HTTP(S) 类不支持重放)
// 选型建议

目标是 普通桌面程序 / 模拟器 → 优先注入模式,数据最贴近程序逻辑。
目标 有反注入保护、需要抓 HTTPS 明文、或要抓 移动端 / 其他机器 → 走代理模式。

核心概念 · 封包是怎么到界面上的

抓到的封包不会直接塞进界面,中间隔着一层 消息队列,这是软件能扛住百万级封包不卡死的关键。

03封包处理流水线 · 理解这张图,就能解释「缓存区」数字和「极速模式」。
Hook / 代理线程 消息队列 MQConcurrentQueue 出队定时器每 tick 一条 界面列表 入队 出队 显示 滤镜引擎改包 / 拦截 先改包,后入队 过滤设置只挡显示,不改数据 队列长度 = 界面「缓存区」数字 极速模式:跳过整条入队链路,只累加计数
  • 界面上的 缓存区 数字就是队列里堆积的条数。持续增长 = 渲染跟不上抓包速度,参考 性能调优
  • 极速模式(系统设置)会完全跳过入队,界面不显示任何封包,但 滤镜照常工作——用于只改包不看数据的高压场景

核心概念 · 「过滤设置」不是「滤镜」

这是新手最容易踩的坑,两者名字像,作用完全不同:

过滤设置(Leach)滤镜(Filter)
作用对象只影响界面显示影响真实网络数据
是否改包是(替换 / 换包 / 拦截)
生效时机出队入列表时Hook / 转发时
典型用途只看某个端口 / 某个长度的包改数值、屏蔽心跳、自动应答
入口菜单 → 过滤设置左侧导航 → 滤镜列表

核心概念 · 四道关卡,一个封包要过几层

WPE 里有四处地方名字都像「过滤」,但它们串在链路的不同位置上。抓不到包改不动包 时,按这张表从上往下逐层排查,比乱试快得多:

#关卡位置管什么关掉的后果
1拦截设置Hook / 转发的 源头决定 挂哪些钩子、抓哪几类封包(注入 12 个函数开关 / 代理 TCP · UDP 请求响应)这一类封包 根本不产生,后面几层都白搭
2滤镜封包进队列 之前唯一能 改真实数据 的一层:替换 / 换包 / 拦截 / 只显示 / 不显示数据原样通过,不做任何改写
3过滤设置出队 入列表时只决定 界面上看不看得见,不碰网络数据全部封包都显示,列表容易被刷屏
4映射设置代理模式的 HTTP(S) 通道HTTP / HTTPS 的响应体与目标地址——滤镜管不到这一类HTTP(S) 内容原样返回
// 怎么用这张表

「一个包都没抓到」→ 查第 1 层;「列表里看不见但计数在涨」→ 查第 3 层(看统计条的「过滤 :」);「滤镜显示命中却没改成」→ 看是不是 HTTP(S) 类别,该走第 4 层。

核心概念 · 套接字与「系统套接字」

  • 套接字(Socket):列表里那一列数字,是目标进程内该连接的 socket 句柄。发包必须指定一个有效套接字,否则发不出去
  • 系统套接字:一个全局变量,供「发送列表」和「机器人」这类事先不知道用哪个 socket 的场合使用
    • 设置:在封包列表 / 代理数据列表右键 → 设置系统套接字
    • 使用:发送编辑里勾「使用系统套接字」;或机器人指令「设置 - 系统套接字」
    • 若它 ≤ 0,日志会记「系统套接字未设置」并放弃发送

核心概念 · 滤镜动作与行颜色

封包列表每一行的底色,代表它被滤镜处理的结果:

动作含义默认配色
替换按规则修改封包的部分字节暗金底 / 黑字
拦截丢弃该封包,不发送 / 不接收深红底 / 白字
换包用滤镜「修改」行的内容重新生成一个全新封包亮蓝底 / 黑字
不修改 - 只显示不改内容,但确保这条被显示浅绿底 / 黑字
不修改 - 不显示不改内容,且不入列表(静默)—(看不到)

配色可在 系统设置 → 滤镜动作 里自定义,每项都有「还原」按钮。

核心概念 · 封包类别

程序内部定义 23 种封包类别,注入模式产生前 13 种,代理模式产生后 10 种。滤镜的「作用类别」把它们归并成 12 个开关:

模式原始类别滤镜作用类别
注入WS1_Send / WS2_Send发送
WS1_SendTo / WS2_SendTo发送到
WS1_Recv / WS2_RecvWSARecvEx接收 / WSA 接收
WSASend / WSASendTo / WSARecv / WSARecvFrom对应 WSA 四项
代理TCP_Req / TCP_RespTCP 请求 / TCP 响应
UDP_Req / UDP_RespUDP 请求 / UDP 响应
HTTP(S)_* / WebSocket_*不参与滤镜匹配
// 易错点

HTTP / HTTPS / WebSocket 类别的包 不会被滤镜命中——滤镜的作用类别只有 12 个开关,没有对应项。要改这些内容请用 映射设置