From a48c7b312795329b42df69488a4cdf6664760005 Mon Sep 17 00:00:00 2001 From: Soda5601 <62250232+ThebestkillerTBK@users.noreply.github.com> Date: Sun, 12 Feb 2023 00:08:42 +0800 Subject: [PATCH] AntiCrash (#225) --- README.md | 1 + .../anticope/rejects/MeteorRejectsAddon.java | 1 + .../anticope/rejects/modules/AntiCrash.java | 61 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 src/main/java/anticope/rejects/modules/AntiCrash.java diff --git a/README.md b/README.md index 174449b..4f83f03 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ # Features ## Modules - AntiBot (Removed from Meteor in [166fc](https://github.com/MeteorDevelopment/meteor-client/commit/166fccc73e53de6cfdbe41ea58dc593a2f5011f6)) +- AntiCrash (Ported from [Anti-ClientCrasher](https://github.com/wagyourtail/Anti-ClientCrasher)) - AntiSpawnpoint - AntiVanish - ArrowDmg (Ported from [Wurst](https://github.com/Wurst-Imperium/Wurst7/tree)) diff --git a/src/main/java/anticope/rejects/MeteorRejectsAddon.java b/src/main/java/anticope/rejects/MeteorRejectsAddon.java index ddd39a6..016bafd 100644 --- a/src/main/java/anticope/rejects/MeteorRejectsAddon.java +++ b/src/main/java/anticope/rejects/MeteorRejectsAddon.java @@ -33,6 +33,7 @@ public class MeteorRejectsAddon extends MeteorAddon { // Modules Modules modules = Modules.get(); modules.add(new AntiBot()); + modules.add(new AntiCrash()); modules.add(new AntiSpawnpoint()); modules.add(new AntiVanish()); modules.add(new ArrowDmg()); diff --git a/src/main/java/anticope/rejects/modules/AntiCrash.java b/src/main/java/anticope/rejects/modules/AntiCrash.java new file mode 100644 index 0000000..166ea91 --- /dev/null +++ b/src/main/java/anticope/rejects/modules/AntiCrash.java @@ -0,0 +1,61 @@ +package anticope.rejects.modules; + +import anticope.rejects.MeteorRejectsAddon; +import meteordevelopment.meteorclient.events.packets.PacketEvent; +import meteordevelopment.meteorclient.settings.BoolSetting; +import meteordevelopment.meteorclient.settings.Setting; +import meteordevelopment.meteorclient.settings.SettingGroup; +import meteordevelopment.meteorclient.systems.modules.Module; +import meteordevelopment.orbit.EventHandler; +import net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket; +import net.minecraft.network.packet.s2c.play.ExplosionS2CPacket; +import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; +import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket; + +public class AntiCrash extends Module { + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + + private final Setting log = sgGeneral.add(new BoolSetting.Builder() + .name("log") + .description("Logs when crash packet detected.") + .defaultValue(false) + .build() + ); + + public AntiCrash() { + super(MeteorRejectsAddon.CATEGORY, "anti-crash", "Attempts to cancel packets that may crash the client."); + } + + @EventHandler + private void onPacketReceive(PacketEvent.Receive event) { + if (event.packet instanceof ExplosionS2CPacket packet) { + if (/* outside of world */ packet.getX() > 30_000_000 || packet.getY() > 30_000_000 || packet.getZ() > 30_000_000 || packet.getX() < -30_000_000 || packet.getY() < -30_000_000 || packet.getZ() < -30_000_000 || + // power too high + packet.getRadius() > 1000 || + // too many blocks + packet.getAffectedBlocks().size() > 100_000 || + // too much knockback + packet.getPlayerVelocityX() > 30_000_000 || packet.getPlayerVelocityY() > 30_000_000 || packet.getPlayerVelocityZ() > 30_000_000 + // knockback can be negative? + || packet.getPlayerVelocityX() < -30_000_000 || packet.getPlayerVelocityY() < -30_000_000 || packet.getPlayerVelocityZ() < -30_000_000 + ) cancel(event); + } else if (event.packet instanceof ParticleS2CPacket packet) { + // too many particles + if (packet.getCount() > 100_000) cancel(event); + } else if (event.packet instanceof PlayerPositionLookS2CPacket packet) { + // out of world movement + if (packet.getX() > 30_000_000 || packet.getY() > 30_000_000 || packet.getZ() > 30_000_000 || packet.getX() < -30_000_000 || packet.getY() < -30_000_000 || packet.getZ() < -30_000_000) + cancel(event); + } else if (event.packet instanceof EntityVelocityUpdateS2CPacket packet) { + // velocity + if (packet.getVelocityX() > 30_000_000 || packet.getVelocityY() > 30_000_000 || packet.getVelocityZ() > 30_000_000 + || packet.getVelocityX() < -30_000_000 || packet.getVelocityY() < -30_000_000 || packet.getVelocityZ() < -30_000_000 + ) cancel(event); + } + } + + private void cancel(PacketEvent.Receive event) { + if (log.get()) warning("Server attempts to crash you"); + event.cancel(); + } +}