滤镜
滤镜是 WPE x64 的灵魂功能:在封包真正发出 / 收下之前,按规则匹配并改写它。本章把匹配算法、四种特殊标记、五种动作和执行联动一次讲透。
00 · 改包之前:这活该交给谁
WPE 里有四个地方都能「让流量变得不一样」,但适用范围完全不同。选错入口是滤镜不生效的头号原因——尤其是拿滤镜去改 HTTP(S),那是永远不会命中的:
| 你想做的事 | 该用 | 为什么不是滤镜 |
|---|---|---|
| 改 TCP / UDP 封包里的某几个字节 | 滤镜 · 替换 | ——就是它 |
| 让某类封包干脆不发出去 / 不收进来 | 滤镜 · 拦截 | ——就是它 |
| 命中后回发一串固定数据 | 滤镜 · 换包,或滤镜触发 机器人 | ——就是它 |
| 改 HTTP / HTTPS 的响应内容 | 映射设置 · 本地映射 | 滤镜的作用类别只有 12 个开关,没有 HTTP(S) / WebSocket 项,这类包不参与匹配 |
| 把请求转到另一个域名 / 端口 | 映射设置 · 远程映射 | 滤镜只改内容,不改目标地址 |
| 某类封包根本别抓 | 拦截设置 | 滤镜在封包产生之后才介入,从源头关掉更省资源 |
| 只是列表太乱、想少看几行 | 过滤设置 | 滤镜会真的改数据,拿它当「显示过滤」用会误伤线上流量 |
| 主动发一串包 / 定时循环发 | 发送列表 | 滤镜是被动触发的,没有命中就不会动 |
滤镜是 WPE 里唯一能 改真实网络数据 的机制。下面是从零建一条到确认它跑起来的最短路径。
01 · 滤镜的生命周期
02 · 滤镜列表
工具栏:全部启用 全部禁用 重置计数,菜单 下拉四项:新增滤镜 / 导入滤镜列表 / 导出所有滤镜 / 清空所有滤镜。
列表右键:置顶(Ctrl+↑)/ 向上移动(Alt+↑)/ 向下移动(Alt+↓)/ 置底(Ctrl+↓)/ 导出 / 复制 / 删除。双击一行 打开滤镜编辑。
在「按顺序执行」模式下,列表顺序就是匹配顺序。滤镜不生效时,先试试把它置顶。
创建滤镜的三种方式
- 菜单 → 新增滤镜:创建一条空滤镜,名字为
滤镜 N。 - 封包列表 / 代理数据列表右键 → 添加到滤镜列表:用该封包内容 自动填充搜索行——最省事的起手式。
- 在十六进制编辑器里选中一段字节 → 右键 → 添加到滤镜列表:只用选中片段填充,适合已经定位到特征串的情况。
03 · 滤镜编辑窗口
列标题 001 对应字节 下标 0。数封包偏移时记得减一。
04 · 普通模式 vs 高级模式
4A 5B,结果完全不同。| 普通模式 | 高级模式 | |
|---|---|---|
| 语义 | 绝对位置匹配 | 特征串滑动搜索 |
| 能命中几处 | 只判定一次 | 可命中多处 |
| 数据表 | 两行(搜索 / 修改),列 001~1000 | 三个表:搜索表 + 两种修改表 |
| 修改下标 | 绝对下标 | 「数据包开头」= 绝对;「自发现有连锁的位置」= 相对偏移(可负) |
| 适用 | 协议字段位置固定 | 字段位置浮动、变长头 |
修改起始于(仅高级模式)
| 选项 | 处理范围 | 修改表列号含义 |
|---|---|---|
| 数据包开头 | 只处理 第一处 匹配 | 绝对下标,从 0 开始 |
| 自发现有连锁的位置 | 处理 每一处 匹配 | 相对锚点的偏移,锚点自身 = 0,可为负 |
通配符
搜索格支持 半字节通配:
| 写法 | 含义 | 掩码 |
|---|---|---|
4A | 精确匹配字节 0x4A | 0xFF |
4* | 高半字节必须是 4,低半字节任意 | 0xF0 |
*A | 低半字节必须是 A,高半字节任意 | 0x0F |
高级模式下,只有形如 X* / *X(长度恰好 2)的写法会被识别为部分通配;** 这种全通配 不会加入匹配条件(等于留空)。
05 · 三种单元格标记
在数据表格的单元格上右键即可切换,靠 底色 区分:
| 标记 | 可用行 | 底色 | 语义 |
|---|---|---|---|
| 排除 | 搜索行 | 紫 | 取反:该字节 不等于 填入值才算匹配 |
| 递进 | 修改行 | 深红 | 每命中一次就按步长累加,可进位 |
| 随机 | 修改行 | 亮蓝 | 每次写入一个随机字节 |
只勾了「连续递进」复选框但 没有在修改行右键「启用递进」——递进不会生效。复选框控制的是 累加方式,格子底色才决定 作用在哪个字节。
递进的计算方式
对每个递进位:新值 = 旧值 + 步长 ×(递进次数 + 1)
- 勾了 连续递进,每命中一次「递进次数」+1,形成持续累加;不勾则每次都是同样的增量
- 勾了 进位递进,字节溢出(> 0xFF)时向 前面 的字节进位,最多进
位数个
06 · 五种动作
| 动作 | 行为 | 列表行色 |
|---|---|---|
| 替换 | 按「修改」行改写命中位置的字节;同时应用递进与随机位 | 暗金 |
| 换包 | 丢弃原包内容,用「修改」行的数据新建封包(长度 = 最大下标 + 1) | 亮蓝 |
| 拦截 | 该封包不发送 / 不接收,直接丢弃 | 深红 |
| 不修改 - 只显示 | 内容不变,但确保这条被记入列表并统计 | 浅绿 |
| 不修改 - 不显示 | 内容不变,且 不入列表(静默高频心跳) | — |
「换包」新建的封包长度 = 修改行里 最大下标 + 1,未填写的位置一律是 0x00。想保留原始内容请用「替换」。
执行联动
勾选「执行」后出现两个下拉框:
| 执行类型 | 选择对象 | 命中后发生什么 |
|---|---|---|
| 发送列表 | 一个发送项 | 立即执行该发送(自动回包、连招) |
| 机器人列表 | 一个机器人 | 启动该机器人,并把当前 socket 作为 FilterSocket 参数传进去 |
| 滤镜列表 | 另一条滤镜 | 再执行那条滤镜(链式处理) |
| 封包入库 | 一个仓库 | 把命中的封包存进仓库(已改写则存改写后的) |
对应列表为空时,该项在下拉里显示为 灰色不可选——先去建一个发送 / 机器人 / 仓库再回来。
07 · 滤镜执行模式
在 系统设置 → 滤镜执行模式 里切换:
| 模式 | 行为 | 适用 |
|---|---|---|
| 按顺序执行(默认) | 从上到下遍历全部滤镜。替换 会继续往下匹配(后面的滤镜作用在已改过的数据上);一旦命中 拦截 / 换包 / 只显示 / 不显示 立即返回 | 需要多条滤镜叠加改同一个包 |
| 优先原则 | 只要有任何一条命中,立即返回,不再往下 | 规则互斥、追求性能 |
08 · 滤镜日志与统计
每次命中(非极速模式)会写一条滤镜日志:记录时间 / 滤镜名称 / 动作 / 匹配数 / 类别 / 长度,在 系统日志 → 滤镜日志 查看,可导出 Excel。
统计数据 页则给出滤镜执行占比与各动作占比的进度条。
09 · 导入导出与格式转换
- 原生格式
.fp(滤镜列表文件,XML,可加密) - 从 旧版 WPE 的
.filt过滤器文件 转换:用 数据提取 页,选择[ FILT过滤器文件(.filt)] 提取到 [ WPE64 滤镜文件(.sp)]。转换会解析 35 个¥分隔字段,映射出滤镜名称、包头 / 套接字 / 长度条件、普通 / 高级模式、替换 / 拦截 / 不可视动作、搜索与修改内容、递进等
10 · 五个实战案例
案例 1 · 把某个字段固定改成某个值
需求:所有「发送」类封包,第 5 个字节(下标 4)由 01 改成 09。
- 新增滤镜,命名「锁定字段」。
- 模式 = 普通;动作 = 替换。
- 作用类别勾
发送(注入)或TCP 请求(代理)。 - 数据表:搜索行第
005列填01;修改行第005列填09。 - 保存 → 回列表打开启用开关。
案例 2 · 屏蔽刷屏的心跳包
需求:包头是 01 00 03、长度恒为 8 的包不要出现在列表里。
- 新增滤镜,动作 = 不修改 - 不显示。
- 高级指定:勾「指定包头」,填
01 00 03。 - 指定类型:勾「长度」,填
8。 - 数据表搜索行
001/002/003分别填01/00/03。
第 4 步不能省——搜索行为空的滤镜永远不会命中,只填「指定包头」是不够的。
案例 3 · 特征串跟随修改(高级模式)
需求:无论 4A 5B 出现在包的哪里,都把它后面第 2 个字节改成 FF。
- 模式 = 高级;动作 = 替换;修改起始于 = 自发现有连锁的位置。
- 搜索表:
001填4A,002填5B。 - 修改表(相对):在偏移
+3的列填FF。
锚点4A= 偏移 0,5B= 1,其后第 1 个 = 2,第 2 个 = 3。
案例 4 · 序号自增(递进)
需求:每次命中就把第 9 字节 +1,溢出时向前进位 2 字节。
- 模式 = 普通;动作 = 替换。
- 递进组:勾「连续递进」,步长填
1;勾「进位递进」,位数填2。 - 在 修改行第
009列右键 → 启用递进(格子变深红)。
案例 5 · 命中后自动回发一串数据
- 先建一个 发送 项,把要回发的封包加进它的封包集。
- 建滤镜,动作可选「不修改 - 只显示」(只是想借它触发,不改数据)。
- 勾「执行」→ 类型选
发送列表→ 选中刚才那个发送项。
11 · 滤镜不生效排查清单
① 滤镜列表里的 启用开关 打开了吗?
② 作用类别 至少勾了一个吗?勾的类别和要抓的包类别一致吗?
③ 「指定类型」勾了套接字 / 长度 / 端口但填错值?这些是 AND 条件。
④ 数据表的 搜索行 为空?没有搜索内容永远不会命中。
⑤ 普通模式下下标是否 超出了封包长度?超出直接判不匹配。
⑥ 「滤镜执行模式 = 优先原则」时,前面已有滤镜命中就轮不到它——把它 置顶 试试。
⑦ 想改的是 HTTP / HTTPS / WebSocket 包?滤镜对这些类别无效,请改用 映射设置。
列标题 001 = 下标 0。高级模式选「自发现有连锁的位置」时,修改表列号是 相对锚点的偏移,不是绝对位置。