内核探针 (Woozy Kernel)
内核探针是 1.9.0+ 版本的核心功能,它直接穿透游戏引擎,获取并操控坦克的物理数据(坐标、旋转、速度)。
与普通变量调试的区别
| 维度 | 变量调试 | 内核探针 |
|---|---|---|
| 作用对象 | 混淆变量(如 BattleUsers.ranks) | 游戏对象(如 LocalTank) |
| 数据层级 | 应用层 | 引擎层 |
| 访问方式 | 通过 Hook 拦截 | 直接穿透 React 状态树 |
| 典型用途 | 修改队伍、监听数据 | 实时操控坐标、旋转、速度 |
| 版本限制 | 所有版本 | 1.9.0+ 核心版 |
工作原理
内核探针通过以下路径穿透游戏:
app-root (DOM 根节点)
↓
__reactContainer$... (React 内部容器)
↓
child.child.stateNode (状态节点)
↓
_reactInternalFiber (Fiber 树)
↓
TOState (游戏状态对象)
↓
BattleStatistics (战斗统计)
↓
World (世界对象)
↓
LocalTank (本地坦克对象)
↓
position / quaternion / velocity (物理属性)整个过程是动态发现的,不依赖硬编码的属性名,因此即使游戏更新也能自动适配。
打开内核探针
- 打开调试器面板
- 点击 「内核探针」 按钮(绿色高亮)
- 弹出实时监控窗口
┌─────────────────────────────────────────────────────┐
│ 内核探针 │
├─────────────────────────────────────────────────────┤
│ 坐标 │
│ X: [ 0.00] Y: [ 0.00] Z: [ 0.00] │
├─────────────────────────────────────────────────────┤
│ 旋转 │
│ W: [ 0.00] X: [ 0.00] Y: [ 0.00] Z: [ 1.00]│
├─────────────────────────────────────────────────────┤
│ [速度归零] [复制] │
│ ● 已锁定载具 (Key_xxxxx) │
│ 回车(Enter)写入内存 │
└─────────────────────────────────────────────────────┘功能详解
坐标监控与修改
| 轴 | 含义 | 范围 |
|---|---|---|
| X | 左右方向 | 负数(左)→ 正数(右) |
| Y | 前后方向 | 负数(后)→ 正数(前) |
| Z | 上下方向(高度) | 地面 ≈ 0~30,负数(地下)→ 正数(空中) |
修改方法:
- 在输入框中输入新坐标
- 按
Enter键 - 坦克会立即传送到新位置
示例:
- 瞬移到高处:
Z输入500→ 按Enter - 瞬移到左侧远处:
X输入-300→ 按Enter
旋转监控与修改
内核探针使用四元数表示旋转,格式为 (w, x, y, z):
| 轴 | 范围 | 说明 |
|---|---|---|
| W | -1 到 1 | 旋转弧度(余弦) |
| X | -1 到 1 | X 轴分量 |
| Y | -1 到 1 | Y 轴分量 |
| Z | -1 到 1 | Z 轴分量 |
常见旋转值:
| 朝向 | W | X | Y | Z |
|---|---|---|---|---|
| 默认方向 | 0 | 0 | 0 | 1 |
| 旋转 90° 向右 | 0.707 | 0 | 0 | 0.707 |
| 旋转 180° | 1 | 0 | 0 | 0 |
| 旋转 -90° 向左 | 0.707 | 0 | 0 | -0.707 |
修改方法:
- 在输入框中输入新四元数值
- 按
Enter键 - 坦克会立即转向
⚠️ 注意:不熟悉四元数的用户建议不要修改旋转值,错误的输入可能导致坦克方向错乱。
速度归零
点击 「速度归零」 按钮:
- 将
velocity.x、velocity.y、velocity.z全部设为0 - 坦克会立刻停止移动
- 配合坐标修改使用:瞬移后点击速度归零,防止被服务器拉回
数据复制
点击 「复制」 按钮,可以将当前所有物理数据复制到剪贴板:
json
{
"Quaternion": { "x": 0, "y": 0, "z": 0, "w": 1 },
"position": { "x": 100.5, "y": 200.3, "z": 50.2 },
"velocity": { "x": 0, "y": 0, "z": 0 }
}实时状态显示
探针窗口底部显示当前状态:
| 状态 | 颜色 | 说明 |
|---|---|---|
● 等待连接... | 🔴 红色 | 未进入战斗或内核未就绪 |
● 已锁定载具 (Key_xxxxx) | 🟢 绿色 | 已成功获取坦克对象 |
与其他功能的联动
配合变量调试
内核探针修改的是真实游戏对象,变量调试拦截的是混淆变量。两者是不同层面的修改:
| 功能 | 修改层面 | 效果 |
|---|---|---|
| 变量调试 | 修改 BattleUsers.ranks | 改变玩家等级显示(可能无效) |
| 内核探针 | 修改 LocalTank.position | 真实移动坦克 |
配合插件系统
插件可以通过 API 调用内核探针:
javascript
// 插件示例:自动瞬移
const api = ctx.getApi();
const kernel = api.getKernel();
// 瞬移到坐标 (100, 200, 50)
kernel.position.x = 100;
kernel.position.y = 200;
kernel.position.z = 50;
// 清空速度防止回弹
kernel.velocity.x = 0;
kernel.velocity.y = 0;
kernel.velocity.z = 0;常见问题
问:显示“未找到载具”怎么办?
答: 请确认:
- ✅ 已进入战斗(倒计时结束)
- ✅ 坦克已生成
- ✅ 游戏版本为最新
如果仍然不行,尝试刷新页面重新进入战斗。
问:修改坐标后坦克弹回原位?
答: 这是服务器的位置校验,内核探针会自动清空速度,但如果仍然回弹:
- 修改坐标后立即点击「速度归零」
- 尝试连续多次修改
- 某些模式/地图禁止坐标修改
问:数值会自动恢复?
答: 如果游戏引擎持续更新该属性(如速度受加速度影响),修改后可能会被覆盖。可以:
- 使用 JS 脚本持续注入(变量调试功能)
- 每帧强制写入(需要编写插件)
问:探针的数值是实时更新吗?
答: 是的。探针窗口使用 requestAnimationFrame 循环刷新,约 60 次/秒实时更新,延迟极低。
技术细节
发现机制
内核探针通过以下步骤动态发现对象路径:
- 从
app-root的__reactContainer$获取 React Fiber 树 - 递归遍历找到
BattleStatistics相关状态 - 提取
World世界容器 - 找到
LocalTank本地坦克 - 为
position、quaternion、velocity创建代理对象
为什么能适配游戏更新?
因为整个过程不依赖硬编码的属性名,只依赖固定的数据结构模式(如长度为 3 的数组表示坐标、长度为 4 的数组表示四元数)。只要游戏引擎的数据结构不变,内核探针就能自动适配。
安全性
⚠️ 重要警告
| 风险 | 说明 |
|---|---|
| 游戏规则 | 修改坐标、速度等物理属性属于作弊行为 |
| 检测风险 | 服务端可能检测异常移动并封号 |
| 使用建议 | 仅限私人服务器或技术研究,严禁在正式对战中使用 |
