0x17 C17PacketCustomPayload
Sends a plugin channel message from client to server. Used for mod communication.
Fields
| Field | Type | Description |
|---|---|---|
| channel | String | Plugin channel name (e.g. MC|BEdit, REGISTER) |
| data | PacketBuffer (remaining) | Channel-specific payload |
Wire Encoding
| Field | Type | Notes |
|---|---|---|
| Channel | String | Plugin channel identifier |
| Data Length | short | |
| Data | byte[] | Channel-specific payload |
MCP References
NetHandlerPlayServer.processCustomPayload()Handler Interface
INetHandlerPlayServerNotes
implementation Implementation Cases
Spoof client brand on "MC|Brand" channel. ServerCrasher sends crafted payloads on "MC|AdvCdm". Disabler sends fake BLC brand for Badlion Client emulation. Vanilla sends brand, beacon, trading, book, anvil channels.
// Brand spoof
if (event.getPacket() instanceof C17PacketCustomPayload) {
C17PacketCustomPayload c17 = (C17PacketCustomPayload) event.getPacket();
if (c17.getChannelName().equals("MC|Brand")) {
event.setCancelled(true);
mc.thePlayer.sendQueue.addToSendQueue(new C17PacketCustomPayload("MC|Brand", new PacketBuffer(Unpooled.buffer()).writeString("vanilla")));
}
}
// Lunar brand spoof
mc.thePlayer.sendQueue.addToSendQueue(new C17PacketCustomPayload("REGISTER", new PacketBuffer(message).writeString("Lunar-Client")));Spoof client brand on "MC|Brand" channel. ServerCrasher sends crafted payloads on "MC|AdvCdm". Disabler sends fake BLC brand for Badlion Client emulation. Vanilla sends brand, beacon, trading, book, anvil channels.
/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* com.google.common.eventbus.Subscribe
* org.apache.commons.lang3.RandomUtils
*/
package lodomir.dev.modules.impl.exploit;
import com.google.common.eventbus.Subscribe;
import java.util.UUID;
import lodomir.dev.event.impl.EventGetPackets;
import lodomir.dev.event.impl.EventUpdate;
import lodomir.dev.modules.Category;
import lodomir.dev.modules.Module;
import lodomir.dev.settings.ModeSetting;
import lodomir.dev.utils.math.TimeUtils;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.client.C00PacketKeepAlive;
import net.minecraft.network.play.client.C02PacketUseEntity;
import net.minecraft.network.play.client.C03PacketPlayer;
import net.minecraft.network.play.client.C08PacketPlayerBlockPlacement;
import net.minecraft.network.play.client.C0APacketAnimation;
import net.minecraft.network.play.client.C0BPacketEntityAction;
import net.minecraft.network.play.client.C0CPacketInput;
import net.minecraft.network.play.client.C0FPacketConfirmTransaction;
import net.minecraft.network.play.client.C18PacketSpectate;
import net.minecraft.network.play.server.S1DPacketEntityEffect;
import net.minecraft.network.play.server.S27PacketExplosion;
import net.minecraft.network.play.server.S2APacketParticles;
import net.minecraft.network.play.server.S44PacketWorldBorder;
import net.minecraft.network.status.client.C01PacketPing;
import net.minecraft.util.BlockPos;
import org.apache.commons.lang3.RandomUtils;
public class Disabler
extends Module {
public ModeSetting mode = new ModeSetting("Mode", "Basic", "Basic", "Keep Sprint", "Respawn", "Watchdog", "Verus Old", "Verus Combat", "Mineplex Combat", "Kauri", "Hycraft Crash", "Ping", "Test");
public TimeUtils timer = new TimeUtils();
public int currentTrans;
public int count;
public Disabler() {
super("Disabler", 0, Category.EXPLOIT);
this.addSetting(this.mode);
}
@Subscribe
public void onUpdate(EventUpdate event) {
}
@Override
public void onEnable() {
this.timer.reset();
super.onEnable();
}
@Override
public void onDisable() {
super.onDisable();
}
@Subscribe
public void onGetPackets(EventGetPackets p) {
this.setSuffix(this.mode.getMode());
switch (this.mode.getMode()) {
case "Basic": {
if (!(p.getPackets() instanceof C0FPacketConfirmTransaction) && !(p.getPackets() instanceof C00PacketKeepAlive)) break;
p.setCancelled(true);
break;
}
case "Mineplex Combat": {
if (!(p.getPackets() instanceof C00PacketKeepAlive)) break;
C00PacketKeepAlive c00 = (C00PacketKeepAlive)p.getPackets();
p.setCancelled(true);
this.sendPacketSilent(new C00PacketKeepAlive(c00.getKey() - RandomUtils.nextInt((int)1000, (int)Integer.MAX_VALUE)));
break;
}
case "Kauri": {
if (!(p.getPackets() instanceof C0FPacketConfirmTransaction)) break;
p.setCancelled(true);
break;
}
case "Watchdog": {
if (p.getPackets() instanceof C03PacketPlayer) {
p.setCancelled(true);
break;
}
}
case "Verus Old": {
this.sendPacketSilent(new C0CPacketInput());
this.sendPacketSilent(new C18PacketSpectate(UUID.randomUUID()));
break;
}
case "Verus Combat": {
if (Disabler.mc.thePlayer.ticksExisted <= 20 || Disabler.mc.thePlayer.capabilities.allowFlying || !(p.getPackets() instanceof C0FPacketConfirmTransaction)) break;
p.setCancelled(true);
break;
}
case "Hycraft Crash": {
if (!(p.getPackets() instanceof S27PacketExplosion) || !(p.getPackets() instanceof S2APacketParticles) || !(p.getPackets() instanceof S1DPacketEntityEffect) || !(p.getPackets() instanceof S44PacketWorldBorder)) break;
p.setCancelled(true);
break;
}
case "Ping": {
if (p.getPackets() instanceof C01PacketPing) {
p.setCancelled(true);
break;
}
}
case "Respawn": {
if (Disabler.mc.thePlayer.ticksExisted % 8 != 0 || Disabler.mc.thePlayer.isDead) break;
Disabler.mc.thePlayer.fall(20.0f, 1.0f);
this.sendPacket(new C08PacketPlayerBlockPlacement(new BlockPos(Disabler.mc.thePlayer.posX, Disabler.mc.thePlayer.posY + 1.5, Disabler.mc.thePlayer.posZ), 1, new ItemStack(Blocks.stone.getItem(Disabler.mc.theWorld, new BlockPos(-1, -1, -1))), 0.0f, 0.94f, 0.0f));
this.sendPacket(new C03PacketPlayer.C04PacketPlayerPosition(Disabler.mc.thePlayer.posX, Disabler.mc.thePlayer.posY + 20.0, Disabler.mc.thePlayer.posZ, false));
this.sendPacket(new C03PacketPlayer.C04PacketPlayerPosition(Disabler.mc.thePlayer.posX, Disabler.mc.thePlayer.posY, Disabler.mc.thePlayer.posZ, false));
this.sendPacket(new C03PacketPlayer.C04PacketPlayerPosition(Disabler.mc.thePlayer.posX, Disabler.mc.thePlayer.posY + (double)0.42f, Disabler.mc.thePlayer.posZ, true));
break;
}
case "Test": {
if (!(p.getPackets() instanceof C03PacketPlayer) || !(p.getPackets() instanceof C0FPacketConfirmTransaction)) break;
if (this.timer.hasReached(1000L) && Disabler.mc.thePlayer.ticksExisted % 8 == 0) {
if (p.getPackets() instanceof C03PacketPlayer.C04PacketPlayerPosition || p.getPackets() instanceof C03PacketPlayer.C06PacketPlayerPosLook || p.getPackets() instanceof C08PacketPlayerBlockPlacement || p.getPackets() instanceof C0APacketAnimation || p.getPackets() instanceof C0BPacketEntityAction || p.getPackets() instanceof C02PacketUseEntity) {
this.sendPacketSilent(new C03PacketPlayer.C04PacketPlayerPosition(Disabler.mc.thePlayer.prevPosX, Disabler.mc.thePlayer.prevPosY, Disabler.mc.thePlayer.prevPosZ, true));
}
p.setCancelled(true);
}
if (p.getPackets() instanceof C01PacketPing && this.timer.hasReached(4000L)) {
p.setCancelled(true);
}
this.timer.reset();
break;
}
case "Keep Sprint": {
if (!(p.getPackets() instanceof C0BPacketEntityAction)) break;
C0BPacketEntityAction c0B = (C0BPacketEntityAction)p.getPackets();
if (c0B.getAction().equals((Object)C0BPacketEntityAction.Action.START_SPRINTING)) {
if (EntityPlayerSP.serverSprintState) {
this.sendPacketSilent(new C0BPacketEntityAction(Disabler.mc.thePlayer, C0BPacketEntityAction.Action.STOP_SPRINTING));
EntityPlayerSP.serverSprintState = false;
}
p.setCancelled(true);
}
if (!c0B.getAction().equals((Object)C0BPacketEntityAction.Action.STOP_SPRINTING)) break;
p.setCancelled(true);
}
}
}
}
Spoof client brand on "MC|Brand" channel. ServerCrasher sends crafted payloads on "MC|AdvCdm". Disabler sends fake BLC brand for Badlion Client emulation. Vanilla sends brand, beacon, trading, book, anvil channels.
// Brand spoof
if (event.getPacket() instanceof C17PacketCustomPayload) {
C17PacketCustomPayload c17 = (C17PacketCustomPayload) event.getPacket();
if (c17.getChannelName().equals("MC|Brand")) {
event.setCancelled(true);
mc.thePlayer.sendQueue.addToSendQueue(new C17PacketCustomPayload("MC|Brand", new PacketBuffer(Unpooled.buffer()).writeString("vanilla")));
}
}
// Lunar brand spoof
mc.thePlayer.sendQueue.addToSendQueue(new C17PacketCustomPayload("REGISTER", new PacketBuffer(message).writeString("Lunar-Client")));Spoof client brand on "MC|Brand" channel. ServerCrasher sends crafted payloads on "MC|AdvCdm". Disabler sends fake BLC brand for Badlion Client emulation. Vanilla sends brand, beacon, trading, book, anvil channels.
// Brand spoof
if (event.getPacket() instanceof C17PacketCustomPayload) {
C17PacketCustomPayload c17 = (C17PacketCustomPayload) event.getPacket();
if (c17.getChannelName().equals("MC|Brand")) {
event.setCancelled(true);
mc.thePlayer.sendQueue.addToSendQueue(new C17PacketCustomPayload("MC|Brand", new PacketBuffer(Unpooled.buffer()).writeString("vanilla")));
}
}
// Lunar brand spoof
mc.thePlayer.sendQueue.addToSendQueue(new C17PacketCustomPayload("REGISTER", new PacketBuffer(message).writeString("Lunar-Client")));