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

Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Плагин NTLauncher - JavaAuthSystem

Тема в разделе "Веб-обвязки и лаунчеры", создана пользователем serega6531, 29 июн 2014.

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

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Что это такое?
    Это — обвязка для известного NTLauncher'а в виде плагина для Bukkit сервера.

    Что она умеет?
    1. Регистрация
    2. Авторизация
    3. Работа с HWID
    4. Баны по HWID и нику
    5. Прямое и некостыльное разграничение доступа к серверу
    6. Работа с глобальной солью и солёными хешами
    Из-за отсутствия технической возможности обвязка не умеет в мультисерверность.
    UPD. Уже умеет (см. LocalServersList)

    Преимущества перед оригинальной обвязкой:
    1. Прямая работа с Bukkit
    2. Скорость работы (следует из первого)
    3. Единость с сервером
    Настройка конфига:
    Вот пример конфига. Давайте рассмотрим его содержание.
    Код:
    db:
        type: "mysql"
        user: "root"
        pass: "pass"
        host: "localhost"
        dbname: "minecraft"
        port: 3306
        filename: "storage.db"
        customuserssql: "CREATE TABLE IF NOT EXISTS `nt_members` (`id` INT(5) NOT NULL AUTO_INCREMENT,`usr` varchar(150) NOT NULL,`pass` varchar(96) NOT NULL,`email` varchar(150) NOT NULL, UNIQUE KEY `usr` (`usr`,`email`), PRIMARY KEY (`id`))"
        customsqlreg: "INSERT INTO `nt_members` (`usr`, `pass`, `email`) VALUES ('!login', '!password', '!email')"
        customsqlisreg: "SELECT COUNT(*) FROM `nt_members` WHERE `usr`='!login' AND `email`='!email'"
        customsqlauth: "SELECT COUNT(*) FROM `nt_members` WHERE `usr`='!login' AND `pass`='!password'"
        customuserstable: "nt_members"
        customhwidstable: "nt_hwids"
        customhwidsbanstable: "nt_banhwids"
    port: 65533
    isgs: false
    gs: "TestGlobalSalt"
    swd: false
    wwhwid: false
    chwidr: false
    chwida: false
    version: 0
    checkmd5: true
    md5salt: true
    md5: "insertyourmd5here"
    removeaccess: true
    kickmsg: "Cheating detected"
    timetoenter: 90
    log-level: 2
    Секция db
    Эта секция содержит данные для работы с базой данных. В поле type вы можете указать тип БД. Вы можете использовать mysql, sqlite или dle. В остальных случаях данные будут храниться в yml файле. Для работы с mysql нужно указать данные для подклчючения в остальных полях.

    port — Порт обвязки. 65533 по умолчанию.
    isgs — Проверять ли сообщение на глобальную соль. Должно быть определено и в обвязке и в лаунчере.
    gs — Сама глобальная соль. Должна соответствовать соли в лаунчере.
    swd — Солится ли сообщение от Watch Dog'а.
    wwhwid — Работать ли обвязке с HWID
    Проверять ли HWID при:
    chwidr — регистрации
    chwida — авторизации​
    version — Актуальная версия клиента. Посылается при авторизации.
    checkmd5 — Проверять ли md5 клиента при авторизации.
    md5salt — Солятся ли хеши.
    md5 — Сам md5. Инструкция по настройке есть в теме оригинальной обвязки.
    timetoenter — Время, через которое игрок уже не сможет войти на сервер.
    removeaccess - Делать ли разлогин игрока при входе.
    kickmsg - Сообщение при кике игрока.
    log-level — Определяет, что обвязка должна выводить в консоль:
    0 - ничего
    1 - минимум информации
    2 - отладочный режим
    3 - совсем отладочный режим​

    При первом запуске плагина стандартный конфиг сам выгружается в нужную папку.

    Команды:
    • banhwid <hwid> - Банит введённый HWID
    • banuser <user> - Банит все HWID'ы пользователя
    Ссылки:
    Текущая версия - https://yadi.sk/d/uNm76fwMXHMmx
    Репозиторий - https://bitbucket.org/serega6531/ntlauncher-javaauthsystem/src

    Разработчики:
    1. Я сам, @serega6531
    2. Рыцарь света @Den_Abr
     
    Последнее редактирование: 3 фев 2015
  2. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Призываю посмотреть @HoShiMin :cool:
     
  3. BlackCoder

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

    Баллы:
    66
    Skype:
    blackcoderback1337
    Имя в Minecraft:
    BlackCoder
    Выглядит хорошо.
    Но я не доверяю лаунчерам на Delphi :C
    Лучше самописный :3
     
  4. alexandrage

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

    Баллы:
    173
    Праль делаешь, игроки все свалят когда их антивирусники заорут матом.
     
  5. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Ничего не мешает вырезать из периметра опасные функции.
     
  6. alexandrage

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

    Баллы:
    173
    Ну тогда костыльный запуск не через jni позволит войти с читами. Временная сессия тоже не вариант.
     
  7. BestMark

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

    Баллы:
    103
    Skype:
    BestMarkBukkit
    Имя в Minecraft:
    BestMark
    У меня что-ли особенный компьютер, что не Касперский, ни Dr.Web на NTLauncher не реагируют
     
  8. BleaZzZ

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

    Баллы:
    153
    Отлично, ряд недостатков этой обвязки пропадет с этим плагином, но все же я не доверяю этой системе. Может там и есть защита, но она уже не требуется, если поставить ncp и обфускатор от спигота встроенный. У меня обычный лаунчер на яве, который служит, как обычная запускалка с авто апдейтом. Ничего более.
     
  9. alexandrage

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

    Баллы:
    173
    Да ванилке больше и не требуется.
    Код:
    import java.awt.Dimension;
    import java.awt.TextField;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.lang.reflect.Method;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.SwingUtilities;
    public class Launch {
        List<URL> url = new ArrayList<URL>();
        URLClassLoader cl;
        String Class = null;
      public Launch() {
          initComponents();
      }
      private static JFrame frame;
      private TextField username;
      private void initComponents() {
          frame = new JFrame("Launcher");
          frame.setSize(156, 100);
          Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
          int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
          int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
          frame.setLocation(x, y);
          frame.setResizable(false);
          frame.setVisible(true);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          username = new TextField();
          username.setLocation(17, 10);
          username.setSize(120, 25);
          JButton button = new JButton("Играть");
          button.setVisible(true);
          button.setLocation(17, 40);
          button.setSize(120, 25);
          frame.getContentPane().add(username);
          frame.getContentPane().add(button);
          frame.getContentPane().add(new JLabel());
          button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                    String nickname    = username.getText();
                    Pattern p = Pattern.compile("^[a-zA-Z0-9_-]{2,16}$");
                    Matcher m = p.matcher(nickname);
                    List<String> params = new ArrayList<String>();
                    boolean b = m.matches();
                    if (nickname.isEmpty()) {
                        JOptionPane.showMessageDialog(frame, "Введите ник!", "", javax.swing.JOptionPane.WARNING_MESSAGE);
                        return;
                    } else if (b==false) {
                        JOptionPane.showMessageDialog(frame, "Ник должен содержать только латинские буквы и цифры 2-16 символов!", "", javax.swing.JOptionPane.ERROR_MESSAGE);
                        return;
                    } else {
                        File Dir = new File(".");
                        System.out.println("Путь до папки с клиентом -> "+Dir.getAbsolutePath());
                        if (!new File(Dir.getAbsolutePath()+"/natives").exists()) new File(Dir.getAbsolutePath()+"/natives").mkdirs(); //Папка с нативами
                        try {
                            url.addAll(getLibs(new File(Dir.getAbsolutePath()+"/versions"))); //Папка с клиентом
                            url.addAll(getLibs(new File(Dir.getAbsolutePath()+"/libraries"))); //Папка с либами
                        } catch (Exception x) {
                            JOptionPane.showMessageDialog(frame, "Неправильный путь к клиенту!", "", javax.swing.JOptionPane.ERROR_MESSAGE);
                            return;
                        }
                        cl = new URLClassLoader(url.toArray(new URL[url.size()]));
                        System.out.println("Список загруженных jar ->"+url);
                        System.setProperty("fml.ignoreInvalidMinecraftCertificates", "true");
                        System.setProperty("fml.ignorePatchDiscrepancies", "true");
                        System.setProperty("org.lwjgl.librarypath", Dir.getAbsolutePath()+"/natives");
                        System.setProperty("net.java.games.input.librarypath", Dir.getAbsolutePath()+"/natives");
                        System.setProperty("java.library.path", Dir.getAbsolutePath()+"/natives");
                        try {
                            cl.loadClass("com.mojang.authlib.Agent");
                            params.add("--accessToken");
                            params.add("1");
                            params.add("--uuid");
                            params.add("12345");
                            params.add("--userProperties");
                            params.add("{}");
                            params.add("--assetIndex");
                            params.add("1.7.4");
                        } catch (ClassNotFoundException x) {
                            params.add("--session");
                            params.add("1");
                        }
                        params.add("--username");
                        params.add(nickname);
                        params.add("--version");
                        params.add("1.7.4");
                        params.add("--gameDir");
                        params.add(Dir.getAbsolutePath()+"/");
                        params.add("--assetsDir");
                        params.add(Dir.getAbsolutePath()+"/assets");
                        }
                    boolean tweakClass = false;
                    try {
                        cl.loadClass("com.mumfrey.liteloader.launch.LiteLoaderTweaker");
                        params.add("--tweakClass");
                        params.add("com.mumfrey.liteloader.launch.LiteLoaderTweaker");
                        tweakClass = true;
                    } catch (ClassNotFoundException x) {}
                    try {
                        cl.loadClass("cpw.mods.fml.common.launcher.FMLTweaker");
                        params.add("--tweakClass");
                        params.add("cpw.mods.fml.common.launcher.FMLTweaker");
                        tweakClass = true;
                    } catch (ClassNotFoundException x) {}
                    if(tweakClass)
                    {
                        Class = "net.minecraft.launchwrapper.Launch";
                    } else {
                        Class = "net.minecraft.client.main.Main";
                    }
                    frame.setVisible(false);
                    try
                    {
                        Class<?> start = cl.loadClass(Class);
                        System.out.println("Запуск клиента");
                        Method main = start.getMethod("main", new Class[] { String[].class });
                        main.invoke(null, new Object[] { params.toArray(new String[0]) });
                    } catch (Exception x)
                    {
                        JOptionPane.showMessageDialog(frame, "Ошибка запуска!", "", javax.swing.JOptionPane.ERROR_MESSAGE);
                        System.exit(0);
                    }
              }
          });
      }
      public static void main(String[] args) {
          SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                System.out.println("Launcher Start");
                new Launch();
            }
          });
      }
      private static List<URL> getLibs(File libsfolder) throws MalformedURLException {
          List<URL> libs = new ArrayList<URL>();
          if (!libsfolder.exists()) libsfolder.mkdirs();
          for (File file : libsfolder.listFiles()) {
            if (file.isDirectory()) {
            libs.addAll(getLibs(file));
            } else {
              if (file.getName().endsWith(".jar")) {
                    libs.add(file.toURI().toURL());
              }
            }
          }
          return libs;
        }
    }
    Такой лаунчера на ванильный спайгот и все :lol:
     
  10. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Хватит тут спорить, идите в тему лаунчера.
     
  11. BleaZzZ

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

    Баллы:
    153
    Сам писал?)
     
  12. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Идите в ЛС и не засоряйте мою тему.
     
  13. HoShiMin

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

    Баллы:
    173
    Тебе же лучше - тема в топе будет
     
  14. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Я хочу, чтобы тема чистой была.
     
  15. BleaZzZ

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

    Баллы:
    153
    Много хочешь - мало получишь.
     
  16. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Сделал работу с SQLite и MySQL, скоро новая версия!
     
  17. BestMark

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

    Баллы:
    103
    Skype:
    BestMarkBukkit
    Имя в Minecraft:
    BestMark
    Кто со мной может поделиться ссылочкой на пиратский Delphi?
     
  18. HoShiMin

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

    Баллы:
    173
    В архиве NTLauncher'a их целых два: 2007 (в нём собирается лаунчер) и ХЕ6 (в нём собираются инъекторы и библиотеки)
     
  19. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Что вы все делаете у меня в теме? Эта обвязка вообще никак с Delphi не связана! Идите в тему лаунчера. И вообще, я вам там уже ответил давно.
     
  20. HoShiMin

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

    Баллы:
    173
    Тихо, не буянь)
     

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