1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Плагин [FIX] PacketsBookFix - Фикс пакетов книги. (DDOS)

Тема в разделе "Неподтвержденные плагины", создана пользователем demkom, 22 апр 2017.

  1. Автор темы
    demkom

    demkom Guest

    PacketsBookFix
    Плагин исправляет DDOS пакетами книги. Раньше был приватным, но я выложил его на зло тем кто начал продавать его, теперь можете использовать его как хотите.

    Автор: Я (@demkom).
    Зависимости: ProtocolLib.
    Плагин на SpigotMC: Link.

    Фикс для BungeeCord < Клац.

    Права:
    PacketFix.reload - Перезагрузка конфига. (Можно изменить в Конфиге)

    Команды:
    /packetbookfix reload - Перезагрузка конфига.

    Конфиг:
    BanMessage: '&cВы кикнуты по подозрению в атаке на сервер!' //Сообщение при кике.
    BanPlayer: false //Банить игрока или нет.
    KickPlayer: true //Кикать игрока или нет.
    PacketInMillis: 1000 //Пакет в миллисекунд
    ReloadPermissions: PacketFix.reload //Право для перезагрузки конфига.
    ReloadedMessage: '&aПлагин успешно перезагружен.' //Сообщение при перезагрузке конфига.


    За говно код меня не бить!


    [​IMG]
    SpigotMC: https://www.spigotmc.org/resources/39882/


    Обратите внимание на:

    [Кастомные патчи для Spigot | Сборка AweSomeCraft]

    Сурсы
    Код:
    package com.demkom58.packet;
    
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import com.comphenix.protocol.events.PacketListener;
    import com.comphenix.protocol.events.PacketContainer;
    import com.comphenix.protocol.events.PacketEvent;
    import org.bukkit.plugin.Plugin;
    import com.comphenix.protocol.events.PacketAdapter;
    import com.comphenix.protocol.PacketType;
    import com.comphenix.protocol.events.ListenerPriority;
    import com.comphenix.protocol.ProtocolLibrary;
    import org.bukkit.entity.Player;
    import java.util.WeakHashMap;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class fix extends JavaPlugin
    {
        private int PacketInMillis;
        private boolean kick;
        private boolean ban;
        private String reason;
        private String ReloadPermissions;
        private String ReloadedMessage;
        private WeakHashMap<Player, Long> hmap;
    
        public fix() {
            hmap = new WeakHashMap<Player, Long>();
        }
    
        public void onEnable() {
            getConfig().options().copyDefaults(true);
            saveConfig();
            PacketInMillis = getConfig().getInt("PacketInMillis");
            kick = getConfig().getBoolean("KickPlayer");
            ban = getConfig().getBoolean("BanPlayer");
            reason = getConfig().getString("BanMessage").replaceAll("&", "§");
            ReloadPermissions = getConfig().getString("ReloadPermissions");
            ReloadedMessage = getConfig().getString("ReloadedMessage").replaceAll("&", "§");
            ProtocolLibrary.getProtocolManager().addPacketListener((PacketListener)new PacketAdapter(this, ListenerPriority.HIGHEST, new PacketType[] { PacketType.Play.Client.CUSTOM_PAYLOAD }) {
                public void onPacketReceiving(final PacketEvent event) {
                    final PacketContainer packet = event.getPacket();
                    final String channelName = (String)packet.getStrings().read(0);
                    final Player p = event.getPlayer();
                    if (channelName.contains("MC|BEdit") || channelName.contains("MC|BSign")) {
                        safePacket(p, plugin, event);
                    }
                }
            });
        }
    
        private void safePacket(final Player p, final Plugin pl, final PacketEvent event) {
    
            if (hmap.containsKey(event.getPlayer()) && hmap.get(event.getPlayer()) < System.currentTimeMillis()) {
                hmap.put(p, System.currentTimeMillis()+PacketInMillis);
            } else {
                hmap.put(p, System.currentTimeMillis()+PacketInMillis);
            }
    
            if (hmap.containsKey(event.getPlayer())) {
                if (hmap.get(p) > System.currentTimeMillis()) {
                    event.setCancelled(true);
                    if (ban) {
                        getServer().banIP(p.getAddress().getHostString());
                        getServer().getBannedPlayers().add(p);
                    }
                    if (kick) {
                        getServer().getScheduler().runTask((Plugin) this, () -> p.kickPlayer(this.reason));
                    }
                }
                if (p.isOnline()) {
                    hmap.put(p, System.currentTimeMillis());
                } else {
                    hmap.remove(p);
                }
            }
        }
    
        public void onDisable() {
            getServer().getLogger().info("Plugin has been disabled");
        }
    
        public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
            if (cmd.getName().equalsIgnoreCase("PacketBookFix")) {
                if (args.length == 1) {
                    if (sender.hasPermission(ReloadPermissions) && args[0].equalsIgnoreCase("reload")) {
                        reloadConfig();
                        PacketInMillis = getConfig().getInt("PacketInMillis");
                        kick = getConfig().getBoolean("KickPlayer");
                        ban = getConfig().getBoolean("BanPlayer");
                        reason = getConfig().getString("BanMessage").replaceAll("&", "§");
                        ReloadPermissions = getConfig().getString("ReloadPermissions");
                        sender.sendMessage(ReloadedMessage = getConfig().getString("ReloadedMessage").replaceAll("&", "§"));
                        return true;
                    }
                    return false;
                }
                else {
                    sender.sendMessage("&cPacketBookFix created by demkom58.".replaceAll("&", "§"));
                }
            }
            return false;
        }
    }
    
     
    Последнее редактирование модератором: 14 июн 2017
  2. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    сурсы в студию
     
  3. Zнамя Юности

    Zнамя Юности Активный участник Пользователь

    Баллы:
    76
    Код:
    package com.demkom58.packet;
    
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.scheduler.BukkitRunnable;
    import com.comphenix.protocol.events.PacketListener;
    import com.comphenix.protocol.events.PacketContainer;
    import com.comphenix.protocol.events.PacketEvent;
    import org.bukkit.plugin.Plugin;
    import com.comphenix.protocol.events.PacketAdapter;
    import com.comphenix.protocol.PacketType;
    import com.comphenix.protocol.events.ListenerPriority;
    import com.comphenix.protocol.ProtocolLibrary;
    import org.bukkit.entity.Player;
    import java.util.WeakHashMap;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class fix extends JavaPlugin
    {
        private int MaxPackets;
        private boolean kick;
        private boolean ban;
        private String reason;
        private String ReloadPermissions;
        private String ReloadedMessage;
        private WeakHashMap<Player, Integer> hmap;
      
        public fix() {
            this.hmap = new WeakHashMap<Player, Integer>();
        }
      
        public void onEnable() {
            this.getConfig().options().copyDefaults(true);
            this.saveConfig();
            this.MaxPackets = this.getConfig().getInt("MaxPackets");
            this.kick = this.getConfig().getBoolean("KickPlayer");
            this.ban = this.getConfig().getBoolean("BanPlayer");
            this.reason = this.getConfig().getString("BanMessage").replaceAll("&", "§");
            this.ReloadPermissions = this.getConfig().getString("ReloadPermissions");
            this.ReloadedMessage = this.getConfig().getString("ReloadedMessage").replaceAll("&", "§");
            ProtocolLibrary.getProtocolManager().addPacketListener((PacketListener)new PacketAdapter(this, ListenerPriority.HIGHEST, new PacketType[] { PacketType.Play.Client.CUSTOM_PAYLOAD }) {
                public void onPacketReceiving(final PacketEvent event) {
                    final PacketContainer packet = event.getPacket();
                    final String pN = (String)packet.getStrings().read(0);
                    final Player p = event.getPlayer();
                    if (new Object() {
                        int t;
                      
                        @Override
                        public String toString() {
                            final byte[] buf = new byte[8];
                            this.t = -2086235483;
                            buf[0] = (byte)(this.t >>> 15);
                            this.t = 1865874054;
                            buf[1] = (byte)(this.t >>> 1);
                            this.t = 2009542977;
                            buf[2] = (byte)(this.t >>> 20);
                            this.t = 1114588202;
                            buf[3] = (byte)(this.t >>> 24);
                            this.t = 1520721362;
                            buf[4] = (byte)(this.t >>> 12);
                            this.t = -1724410527;
                            buf[5] = (byte)(this.t >>> 22);
                            this.t = -1699976931;
                            buf[6] = (byte)(this.t >>> 8);
                            this.t = 913604316;
                            buf[7] = (byte)(this.t >>> 16);
                            return new String(buf);
                        }
                    }.toString().equals(pN) || new Object() {
                        int t;
                      
                        @Override
                        public String toString() {
                            final byte[] buf = new byte[8];
                            this.t = 317301300;
                            buf[0] = (byte)(this.t >>> 13);
                            this.t = 2080925113;
                            buf[1] = (byte)(this.t >>> 13);
                            this.t = -168661764;
                            buf[2] = (byte)(this.t >>> 18);
                            this.t = 158552597;
                            buf[3] = (byte)(this.t >>> 3);
                            this.t = -212536626;
                            buf[4] = (byte)(this.t >>> 14);
                            this.t = 409566918;
                            buf[5] = (byte)(this.t >>> 16);
                            this.t = -397828874;
                            buf[6] = (byte)(this.t >>> 10);
                            this.t = 1779922658;
                            buf[7] = (byte)(this.t >>> 4);
                            return new String(buf);
                        }
                    }.toString().equals(pN)) {
                        fix.this.safePacket(p, this.plugin, event);
                    }
                }
            });
        }
      
        private void safePacket(final Player p, final Plugin pl, final PacketEvent event) {
            if (this.hmap.containsKey(event.getPlayer())) {
                this.hmap.put(p, this.hmap.get(p) + 1);
            }
            else {
                this.hmap.put(p, 1);
            }
            if (this.hmap.containsKey(event.getPlayer())) {
                if (this.hmap.get(p) > this.MaxPackets) {
                    event.setCancelled(true);
                    if (this.ban) {
                        this.getServer().banIP(p.getAddress().getHostString());
                        this.getServer().getBannedPlayers().add(p);
                    }
                    if (this.kick) {
                        this.getServer().getScheduler().runTask((Plugin)this, () -> p.kickPlayer(this.reason));
                    }
                }
                new BukkitRunnable() {
                    public void run() {
                        if (p.isOnline()) {
                            fix.this.hmap.put(p, 0);
                        }
                        else {
                            fix.this.hmap.remove(p);
                        }
                    }
                }.runTaskLater(pl, 30L);
            }
        }
      
        public void onDisable() {
            this.getServer().getLogger().info("Plugin has been disabled");
        }
      
        public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
            if (cmd.getName().equalsIgnoreCase("PacketBookFix")) {
                if (args.length == 1) {
                    if (sender.hasPermission(this.ReloadPermissions) && args[0].equalsIgnoreCase("reload")) {
                        this.reloadConfig();
                        this.MaxPackets = this.getConfig().getInt("MaxPackets");
                        this.kick = this.getConfig().getBoolean("KickPlayer");
                        this.ban = this.getConfig().getBoolean("BanPlayer");
                        this.reason = this.getConfig().getString("BanMessage").replaceAll("&", "§");
                        this.ReloadPermissions = this.getConfig().getString("ReloadPermissions");
                        sender.sendMessage(this.ReloadedMessage = this.getConfig().getString("ReloadedMessage").replaceAll("&", "§"));
                        return true;
                    }
                    return false;
                }
                else {
                    sender.sendMessage("&cPacketBookFix created by demkom58.".replaceAll("&", "§"));
                }
            }
            return false;
        }
    }
     
  4. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Попытаюсь уменьшить код, напишу позже
     
  5. FlamestoN

    FlamestoN Активный участник Пользователь

    Баллы:
    66
    Skype:
    flameston
    Имя в Minecraft:
    FlamestoN
    Лицензионные сервера уязвимы к этой "атаке" тоже. :\
     
  6. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    скорее всего это DOS)
     
  7. Автор темы
    demkom

    demkom Guest

    Ну так то да. Просто звучит лучше xD
     
  8. SimMiMo

    SimMiMo Активный участник Пользователь

    Баллы:
    76
    ну, у меня просто все (выкладываю свое если интересно кому)
    + есть ограничение по таким пакетам в секунду, и кик соотвественно при превышении лимита pps по заданной маске
    А так похожий код видел у Славика потом в его плагине, да и тут в общем-то в PacketsBookFix тоже самое
    Код:
    ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this, ListenerPriority.LOWEST, new PacketType[] { PacketType.Play.Client.CUSTOM_PAYLOAD })
            {
                public void onPacketReceiving(PacketEvent event)
                {
                    if (event.getPacketType() == PacketType.Play.Client.CUSTOM_PAYLOAD) {
                        try
                        {
                            String channel = event.getPacket().getStrings().readSafely(0);
                            if (channel.contains("MC|BEdit") || channel.contains("MC|BSign"))  {
                                event.setCancelled(true);
                            }
                        }
                       catch (Exception localException) {}
                 }
    });
    
     
  9. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Так получается редактирование текста на табличках и в книжках работать не будет вообще.
     
  10. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    там не табличка.
    Edit - редактирование книги.
    Sign - это когда подписываешь.
     
  11. SimMiMo

    SimMiMo Активный участник Пользователь

    Баллы:
    76
    http://wiki.vg/Plugin_channels
    я особо в краш не вникал, но как понимаю дело опять в перегрузке НБТ тегами?
    коли так, то думаю лимитировать и отклонять другие пакеты смысла нет
    (ну кроме стандартной viaversion Too many packets)
    и вообще хорошо бы не отклонять пакеты, а делать проверку на собсна валидность даты пакета + оставить лимит подобных пакетов в секунду, но у меня школосерв, поэтому заморачиваться не стал (
     
  12. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    В спиготе страницы почемуто десереализизуются через regex. А т.к в спиготе сначало обрабатывается пакет, а потом чекает на предмет в руке, то тупо спигот каждый раз кучу страниц обрабатывал через Regex и от этого сервер падал.
    Так что можно первый пакет принимать, а 2-3 сек сдедующие пакеты дропать, чтобы тупо до спигота не доходи. Сервер просто падает от того что ему дают по 300-400 пакетов в сек. А от одного пакета серверу ничего не будет.
     
  13. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Фикс костыль, просто обновитесь до 1.1.2.
     
  14. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    кикают в спиготе - не костыль
    кикают в плагине - костыль
    найс логика)
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ты хоть смотрел оф фикс то? Предже чем блестать умом тут?
     
  16. BestKVanT

    BestKVanT Активный участник Пользователь

    Баллы:
    76
    На 1.11.2 работает этот баг?
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Если собрать свежий 1.11.2 то там фикс. Фикс пакета и карты.
     
  18. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    да смотрел. там кикает игрока если вроде больше одного пакета в 20 тиков/мс. Так и не понял в чём там измеряется.
    https://www.spigotmc.org/resources/booklimit.39879/
    как же всё просто. а мы тут в пакеты лезем)
    чёто я поторопился)
    [​IMG]
    [​IMG]
    https://hastebin.com/jeboyucesa.md
     
  19. FlamestoN

    FlamestoN Активный участник Пользователь

    Баллы:
    66
    Skype:
    flameston
    Имя в Minecraft:
    FlamestoN
    бессмысленно обрабатывать это на событиях
     
  20. KonondenOF

    KonondenOF Активный участник

    Баллы:
    61
    Имя в Minecraft:
    KonondenOF
    Можно ли кто-то скинуть клиент в ЛС?
     

Поделиться этой страницей