心跳模拟
心跳模拟是 HeartbeatSocks 的核心功能页面,负责拦截并替换用户数据包中的心跳特征。页面包含 6 个配置选项卡:基础配置、心跳特征配置、二级代理、SNI 过滤、包过滤、包替换。
┌─────────────────────────────────────────────────────────────────────┐
│ 心跳模拟页面 │
├──────────┬──────────┬──────────┬──────────┬──────────┬──────────────┤
│ 基础配置 │心跳特征 │ 二级代理 │ SNI 过滤 │ 包过滤 │ 包替换 │
│ │ 配置 │ │ │ │ │
├──────────┴──────────┴──────────┴──────────┴──────────┴──────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 当前选项卡内容区域 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────────┤
│ 底部数据包实时列表 │
│ ID │ 类型 │ 时间 │ 游戏ID │ 大小 │ 状态 │ 转发 │ 心跳 │ 数据预览 │
└─────────────────────────────────────────────────────────────────────┘
启动与停止
页面顶部控制栏提供:
- 监听端口: 心跳模拟代理监听的本地端口,默认
1088。客户端需要将 SOCKS5 代理地址设为127.0.0.1:1088 - 启动服务 / 停止服务: 控制代理服务的运行
启动前请确保:
- 数据池中有足够的心跳数据(建议 50 条以上)
- 心跳特征已正确配置
- 监听端口未被占用
选项卡一:基础配置
长度计算模式
| 模式 | 说明 |
|---|---|
| 静态替换 | 直接替换字节,不重新计算包长度 |
| 动态计算(推荐) | 替换后重新计算长度字段 |
绝大多数场景应使用「动态计算」模式,确保替换后的数据包长度正确。
数据池选择策略
| 策略 | 说明 |
|---|---|
| 固定选择 | 总是选第一个(调试用) |
| 顺序选择 | 依次轮换选择 |
| 随机选择(推荐) | 随机选取,行为最自然 |
62 特征支持
启用后额外支持 01 0A 00 62 特征(09 特征的互补特征)的处理。
高级偏移配置
展开可配置:
| 配置项 | 说明 |
|---|---|
| First Write Offset | 首次写入的偏移量 |
| 处理 00 开头 GameID | 是否对以 00 开头的 GameID 执行替换 |
| 处理 0B 结尾 GameID | 是否对以 0B 结尾的 GameID 执行替换 |
游戏类型过滤
启用后仅使用指定游戏类型的心跳数据进行替换:
- 勾选「使用游戏类型过滤」
- 从下拉列表选择目标游戏类型
- 游戏类型列表由「数据采集」页面管理
SOCKS5 认证
启用后,客户端连接代理时需要提供用户名和密码。认证配置在「账号管理」页面管理。
认证设置为全局配置,同时影响采集代理和心跳模拟代理。
选项卡二:心跳特征配置
心跳特征是用于识别心跳包的字节模式规则,按列表顺序从上到下依次评估。
心跳特征配置直接影响替换效果,错误配置可能导致游戏断开。请根据目标游戏选择合适的特征。
特征规则列表
每条规则包含以下字段:
| 字段 | 说明 |
|---|---|
| 状态 | 启用/禁用 |
| 规则名称 | 自定义名称 |
| 主特征 | 主要匹配的字节特征(如 01 0A 00 23) |
| 次要特征 | 辅助匹配特征 |
| 备注 | 说明信息 |
管理操作
- 添加规则: 创建新的心跳特征规则
- 编辑: 修改选中规则的配置
- 删除: 移除选中的规则
- 启用/禁用: 切换规则的生效状态
- 上移/下移: 调整规则的匹配优先级(靠前的规则优先匹配)
- 帮助: 查看心跳特征配置的详细说明
选项卡三:二级代理
支持将修改后的数据包转发到另一个 SOCKS5 代理,实现链式代理。
配置项
| 配置项 | 说明 |
|---|---|
| 启用二级代理 | 开启链式代理转发 |
| 代理地址 | 下游 SOCKS5 代理的 IP 或域名 |
| 代理端口 | 下游代理的端口号 |
| 代理用户名 | 二级代理的认证用户名(如需) |
| 代理密码 | 二级代理的认证密码(如需) |
| 转发修改的数据包 | 是否将替换后的数据发送到二级代理 |
选项卡四:SNI 过滤
SNI(Server Name Indication)过滤通过分析 TLS 握手中的域名信息,精确控制哪些连接需要进行心跳处理。
启用 SNI 过滤
勾选「强制启用 SNI 过滤」后,仅匹配目标域名的连接才会执行伪心跳替换,其他连接直接透传。
预设域名库
左侧面板管理常用域名列表:
- 添加域名: 输入域名后点击「添加」
- 删除选中: 移除选中的域名
- 清空全部: 清除所有预设域名
SNI 监听端口
右侧面板管理需要嗅探 SNI 信息的端口:
- 手动添加: 输入端口号后点击「添加」
- 快捷按钮:
+443/+8443/+10012一键添加常用端口 - 移除: 删除选中的端口
- 清空端口: 清除所有端口
SNI 过滤可以有效减少不必要的数据包分析,提升代理性能。建议在明确目标游戏服务器域名时启用。
启用 SNI 过滤可以有效防止替换规则被盗取。未启用时,任何通过代理的连接都会触发伪心跳替换逻辑,第三方可通过抓包分析替换模式来窃取你的规则配置。启用 SNI 过滤后,仅匹配目标域名的连接才会执行替换,其他连接直接透传,从而避免替换行为暴露。强烈建议在生产环境中始终启用 SNI 过滤。
工作原理
- 客户端通过代理发起 HTTPS 连接
- 代理截获 TLS ClientHello 报文
- 从 SNI 扩展字段提取目标域名
- 将域名与配置的目标域名比对
- 匹配则标记连接需要心跳处理,不匹配则直接透传
选项卡五:包过滤
包过滤(规则链模式)提供灵活的数据包过滤机制,在伪心跳替换前决定哪些数据包应该被处理。
启用与默认动作
- 启用规则链: 开启包过滤功能
- 默认动作: 当没有任何规则匹配时执行的动作
| 默认动作 | 说明 |
|---|---|
| Allow | 允许对该数据包执行伪心跳替换 |
| LogOnly | 仅记录日志,不处理 |
| Drop | 丢弃数据包,不转发 |
| SkipReplace | 跳过替换,数据包原样转发 |
预设规则链
提供一键应用的预设规则链配置:
- 三角洲行动(ACE 拦截 + 游戏放行): 针对三角洲行动的预设规则
- 通用 ACE 过滤: 通用的 ACE 反作弊过滤规则
规则列表
每条规则包含以下字段:
| 字段 | 说明 |
|---|---|
| 状态 | 启用/禁用 |
| 规则名称 | 自定义名称 |
| 动作 | 匹配后的执行动作(Allow/LogOnly/Drop/SkipReplace) |
| 逻辑 | 多条件的逻辑关系(AND/OR) |
| 条件数 | 规则包含的匹配条件数量 |
| 命中次数 | 运行时该规则被命中的次数 |
| 备注 | 说明信息 |
管理操作
- 添加规则: 创建新的过滤规则
- 编辑: 修改选中规则的条件和动作
- 删除: 移除选中的规则
- 启用/禁用: 切换规则的生效状态
- 上移/下移: 调整规则在链中的位置(靠前的规则优先匹配)
- 重置统计: 清零所有规则的命中计数
规则评估逻辑
规则链按列表顺序从上到下依次评估。第一条匹配的规则决定最终动作。如果所有规则都不匹配,执行默认动作。
示例场景
仅替换特定端口的流量:
规则 1: 端口 = 443 → Allow
默认动作: SkipReplace
排除特定域名:
规则 1: 域名 = cdn.example.com → SkipReplace
规则 2: 域名 = static.example.com → SkipReplace
默认动作: Allow
选项卡六:包替换
除伪心跳替换外,还支持自定义的字节序列替换规则。
启用与配置
| 配置项 | 说明 |
|---|---|
| 启用包替换 | 开关 |
| 执行时机 | 伪心跳之前执行 / 伪心跳之后执行 / 仅替换(跳过伪心跳) |
| 遇到错误时继续执行 | 单条规则失败不影响后续规则 |
替换规则列表
每条规则定义搜索和替换的字节序列:
- 添加规则: 创建新的替换规则
- 删除: 移除选中的规则
- 上移/下移: 调整执行顺序
匹配模式
| 模式 | 说明 |
|---|---|
| 任意位置 | 在包中任意位置匹配 |
| 固定偏移 | 在指定偏移量处匹配 |
| 范围匹配 | 在指定字节范围内匹配 |
| 仅首次 | 仅匹配第一次出现 |
底部数据包列表
运行时实时显示经过代理的数据包信息:
| 列 | 说明 |
|---|---|
| ID | 数据包序号 |
| 类型 | 包类型标记 |
| 时间 | 收到时间 |
| 游戏ID | 从包中提取的 GameID |
| 大小 | 数据包字节大小 |
| 状态 | 包完整性状态 |
| 转发 | 转发处理结果 |
| 心跳 | 伪心跳替换结果 |
| 数据预览 | 数据包的十六进制预览 |
点击「清空列表」可清除当前显示的记录。