本帖最后由 583736449 于 2018-6-11 23:21 编辑

ServerCracherFixer
修复部分作弊客户端的崩服功能(仅限1.8)



前言

前段时间给别人做小游戏服,遇见个开 JIGSAW 的杂`种。
进服就是一顿卡服导致玩家掉线,然后自己也掉线...
然后经过短暂的测试发现是通过发送 PacketPlayInCustomPayload 导致服务器崩溃。
并且可以绕过 AAC 以及 ViaVersion 的检测。。。
我在站内没有搜到关于这个漏洞的解决插件,然后就自己写了个。
这个问题在 1.9+ 的版本已经修复了刚刚测试 1.9.4 单端也会崩 hhhh。




截图





下载

本插件需要 PacketListenerAPI 作为前置
ServerCrasherFixer.jar (4.28 KB, 下载次数: 237)



配置

  1. # 数据包长度阈值
  2. threshold-per-packet: 30000
  3. # 踢出信息
  4. kick-message: '&4非法操作 &c(InvalidPacket)'
复制代码




开源
  1. package me.skymc.servercrasherfixer;

  2. import org.bukkit.Bukkit;
  3. import org.bukkit.entity.Player;
  4. import org.bukkit.scheduler.BukkitRunnable;
  5. import org.inventivetalent.packetlistener.handler.PacketHandler;
  6. import org.inventivetalent.packetlistener.handler.ReceivedPacket;
  7. import org.inventivetalent.packetlistener.handler.SentPacket;

  8. /**
  9. * @author sky
  10. * @Since 2018-06-11 22:00
  11. */
  12. public class Packet extends PacketHandler {

  13.     @Override
  14.     public void onSend(SentPacket packet) {

  15.     }

  16.     @Override
  17.     public void onReceive(ReceivedPacket packet) {
  18.         if (packet.getPacketName().equals("PacketPlayInCustomPayload")) {
  19.             Object packetDataSerializer = packet.getPacketValue("b");
  20.             try {
  21.                 int size = (int) packetDataSerializer.getClass().getMethod("readableBytes").invoke(packetDataSerializer);
  22.                 if (size > Main.getInst().getConfig().getInt("threshold-per-packet")) {
  23.                     packet.setCancelled(true);

  24.                     // 在我服会被 AAC 提前踢走,保险起见写上这个。
  25.                     Player player = Bukkit.getPlayerExact(packet.getPlayername());
  26.                     if (player != null) {
  27.                         new BukkitRunnable() {
  28.                             @Override
  29.                             public void run() {
  30.                                 player.getWorld().strikeLightningEffect(player.getLocation());
  31.                                 player.kickPlayer(Main.getInst().getConfig().getString("kick-message").replace("&", "§"));
  32.                             }
  33.                         }.runTask(Main.getInst());
  34.                     }
  35.                 }
  36.             } catch (Exception ignored) {
  37.             }
  38.         }
  39.     }
  40. }
复制代码
来自群组: HAYO Studio

Saukiya
排版优良!开源点赞!沙发坐定!

L_Panda
MCBBS有你更精彩!板凳坐定!

海贼王#
前排,支持原创

cp666
支持1.7.10就好了

cp666
cp666 发表于 2018-6-28 19:00
支持1.7.10就好了

有点尴尬

大海Sea
站内没有前置吗?点进去一直Loading Download...

DS绝对小贱
太棒了,服务器刚被弱 智用j端崩,终于找到插件了!!!

40SiShi
2544673738 发表于 2018-8-20 00:28
太棒了,服务器刚被弱 智用j端崩,终于找到插件了!!!

找到你了awa

梦想的石头
972063175 发表于 2018-7-5 16:42
站内没有前置吗?点进去一直Loading Download...

https://github.com/Inventivetale ... /tag/3.7.0-SNAPSHOT
使用这个网址下载

凉菀彡
  这个插件很好~服务器刚好用得上

asdp000333
所以说对MOD有用吗

第一页 上一页 下一页 最后一页