Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал Связываем клиент, лаунчер и сайт (проверка md5)

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем ilia770, 19 дек 2011.

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

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

    Баллы:
    63
    Я делал по элементарному способу, поставил проверку на launcherFrame в моём лаунчере.
    Вот отрывок из кода, в принципе, тут не очень много чего изменено
    Код:
    public static String calculateHash(MessageDigest algorithm,
                String fileName) throws Exception{
            FileInputStream    fis = new FileInputStream(fileName);
            BufferedInputStream bis = new BufferedInputStream(fis);
            DigestInputStream  dis = new DigestInputStream(bis, algorithm);
     
            while (dis.read() != -1);
                  byte[] hash = algorithm.digest();
     
            return byteArray2Hex(hash);
        }
    private static String byteArray2Hex(byte[] hash) {
            Formatter formatter = new Formatter();
            for (byte b : hash) {
                formatter.format("%02x", b);
            }
            return formatter.toString();
        }
    
    -это калькулятор md5 здесь, вам менять ничего не надо!
    Код:
    public void login(String userName, String password) {
        try {
       
            String parameters = "user=" + URLEncoder.encode(userName, "UTF-8") + "&password=" + URLEncoder.encode(password, "UTF-8") + "&version=" + 13;
          String result = Util.excutePost("http://авторизация/auth/auth.php", parameters);
    //      String result = getFakeResult(userName);
          if (result == null) {
            showError("Зарегестрируйтесь на сайте !");
         
            return;
          }
    String applicationData = System.getenv("APPDATA");
          String  f = applicationData + "/.minecraft/bin/minecraft.jar";
     
          try
    {
     
      MessageDigest md5  = MessageDigest.getInstance("MD5");
    String p = calculateHash(md5, f);
     
     
                    URL localURL = new URL("http:\\(скрипт)?hash=" + p);
            BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(localURL.openStream()));
            String str2 = localBufferedReader.readLine();
            if (str2.equalsIgnoreCase("NO")){
                {
                    GameUpdater.forceUpdate = true;
                }
             
          }
            else if (str2.equalsIgnoreCase("YES"))
            {
            }
       
      }
     
    catch(FileNotFoundException fnfn)
    {
     
     
    }
     
     
    
    -Это обработчик кнопки пойдём по порядку
    В первом отрывке сказано что мы берём файл из указанного места, потом, в случае, если он не найден, то лаунчер не запускает никакую проверку. А если он найден то считает его md5 и после заходит на php скрипт, и если мы получаем " YES " то игра запускается а если "NO"
    то обновляется)
    (php скрипт выложить не могу так как его писал не я, выкладываю только то что сделал сам)



    Сильно не ругайте, первый раз туториал выкладываю)
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    ilia770

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

    Баллы:
    63
    исправил, сейчас попробую написать php cкрипт)
     
    ПриветОтМиднайта нравится это.
  4. Автор темы
    ilia770

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

    Баллы:
    63
    в общем напишу как он должен работать и что делать может быть кто нибудь реализует и выложит, он должен работать так что если на него заходят вот так : http://minecraft.com/hash.php?hash=(и тут указан хеш) если он имеется в базе, то скрипт отвечает "YES", а если там которого нет в базе или хеша нет вовсе то скрипт отвечает "NO")
     
  5. RockIsLife

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

    Баллы:
    78
  6. z0z1ch

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

    Баллы:
    123
    Накидал скрип, пробуйте... я его не тестировал, но должен работать.
    PHP:
    <?php
    // Файл со скриптом положить на сервер рядом с файлом "minecraft.jar", хеш которого будет расчитываться для сверки c хешем передаваемым лаунчером.
     
    $clientHash $_GET['hash']; //хеш передаваемый лаунчером по ссылке
    $serverHash md5_file('minecraft.jar'); //хеш расчитываемый сервером
     
    if ($clientHash == $serverHash)
    {
        echo 
    'YES';
    }
    else
    {
        echo 
    'NO';
    }
    ?>
     
    slavik123123123 нравится это.
  7. WitER

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

    Баллы:
    88
    UPD - сори, сонный, не совсем внимательно прочел=)
     
  8. lol63

    lol63 Модератор Переводчик

    Баллы:
    153
    Тут же вопрос: заменить слово в лаунчере YES->NO, NO->YES и игроки уже не будут обновляться?
     
  9. z0z1ch

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

    Баллы:
    123
    @lol63, ты имеешь ввиду уязвимость (путем редактирования лаунчера)?
     
  10. lol63

    lol63 Модератор Переводчик

    Баллы:
    153
    Именно
     
  11. z0z1ch

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

    Баллы:
    123
    Тут их как минимум 2, которые вижу я.
     
    djavphu+mb073c нравится это.
  12. WitER

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

    Баллы:
    88
    Хм, а если вместо "YES" & "NO" - возвращать целочисленные логические 1 и 0?
    Тогда, если я правильно думаю, инкласспатчером нельзя будет изменить значения, ибо ищет он только строки, верно?
    Но тогда останется ссылка на чекер, которую можно будет зануллить или изменить, и это остается уязвимостью, или я снова не прав?
     
  13. lol63

    lol63 Модератор Переводчик

    Баллы:
    153
    только не целочисленные, а просто логические true, false.
     
  14. cubespace

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

    Баллы:
    103
    А не можно просто сделать проверку по md5 ?
    если у клиента и на сервере разные md5-сумы minecraft.jar, то чтобы клиенту сервер перезакачивал minecraft.jar!
    и у всех игроком будет один и тотже minecraft.jar!
    и они не смогу установить чит, потому что при подключении к серверу будет перезаписан их minecraft.jar
    на оригинальный тот что на сервере!
     
    ВремяПриключений нравится это.
  15. WitER

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

    Баллы:
    88
    Так оно так и сделано)
     
  16. Автор темы
    ilia770

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

    Баллы:
    63
    Парни метод редактирования лаунчера это как? я когда через exe4j его в exe перекомпилию он у меня ничем не открывается т.е редактировать его не получится!)
     
  17. z0z1ch

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

    Баллы:
    123
    скинь взглянуть
     
    slavik123123123 нравится это.
  18. Автор темы
    ilia770

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

    Баллы:
    63
    у тебя скайп есть?
     
  19. z0z1ch

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

    Баллы:
    123
    @ilia770, пиши в личку
     
    DavidShabaev нравится это.
  20. cubespace

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

    Баллы:
    103
    Есть один баг в системе
    когда удалить сам файл minecraft.jar
    на компе пользователя в аппдате
    то при запуску лаунчера
    то шкала обновление стоит гдето на 95% и все! И нечего не идет и Пишет что загрузка завершена!
    но в папке bin файл так и не появляеться

    может а может я не так что то делал
     
  21. Автор темы
    ilia770

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

    Баллы:
    63
    напиши так

    catch(FileNotFoundException fnfn)
    {

    GameUpdater.forceUpdate = true;
    }
     

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