你可能在找
在 Node.js 上代理 MCBE 服务器并中间人(MITM)攻击(基于 bedrock-protocol) | TheChuan1503’s blog
示例 Minecraft 版本:
Bedrock 1.20.80C -> S表示客户端发往服务器的数据包S -> C表示服务器发往客户端的数据包
杀戮/KillAura
- 获取所有的实体(entities)
这里通过一个简单的方法获取
- 进入
S -> Cmove_entity_delta - 获取
runtime_entity_id字段(runtime_entity_id) - 通过
x,y,z字段(其中之二可能会不存在)获取实体变化的向量轴,与 runtime_entity_id 一同保存到一个映射表中
- 处理攻击
- 遍历映射表,获取所有实体的 runtime_entity_id 及其坐标(entityPos)
- 计算玩家到实体的距离,如果实体在玩家攻击范围内
- 构造
C -> Sinventory_transaction,transaction字段传入一个 InventoryTransaction,其中:
legacy设为 {legacy_request_id:0}transaction_type设为item_use_on_entityactions设为空数组([])transaction_data设为一个 InventoryTransactionData,其中:action_type设为attackclick_pos设为一个空 Vec3entity_runtime_id设为实体的 runtime_entity_idheld_item为手持物品数据,空手可填 {network_id:0}hotbar_slot为手持物品槽位(0-9),槽位对不上则无法攻击player_pos为玩家位置 Vec3
- 发送数据包给服务器
- 等待一段时间后重复以上操作
连击/Combo
- 进入
C -> Sinventory_transaction - 如果
transaction_data/action_type为attack,则继续 - 创建若干个依次等待片刻的延时器,延时器内:
- 把当前
C -> Sinventory_transaction复制一份 - 重写新数据包的
transaction_data/player_pos为当前玩家位置 Vec3 - 发送新数据包给服务器
空中跳跃/AirJump
本质是个仅向上动量的喷气背包
- 进入
C -> Splayer_auth_input - 如果
input_data/want_up为true,则继续 - 构造
S -> Cset_entity_motion,其中:
runtime_entity_id设为当前玩家的 runtime_entity_idvelocity设为一个 Vec3,其中:x设为原player_auth_input数据包的delta/xy设为0.42z设为原player_auth_input数据包的delta/z
tick设为0n(BigInt)
- 发送数据包给客户端
喷气背包/Jetpack
- 进入
C -> Splayer_auth_input - 获取并记录玩家的俯仰角(pitch)和头部偏航角(head_yaw)
- 通过 head_yaw 计算水平动量(mX, mZ)
可参考 MCBE 偏航角到坐标移动向量的计算
(input仅设置up为true) - 通过 pitch 计算垂直动量(mY)
正弦函数简单计算(弧度制)
sin(-pitch * (π / 180)) * speed - 构造
S -> Cset_entity_motion,其中:
runtime_entity_id设为当前玩家的 runtime_entity_idvelocity设为一个 Vec3(mX, mY, mZ)tick设为0n(BigInt)
- 发送数据包给客户端