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

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

Discussion in 'Руководства, инструкции, утилиты' started by ilia770, Dec 19, 2011.

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

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

    Trophy Points:
    63
    Я делал по элементарному способу, поставил проверку на launcherFrame в моём лаунчере.
    Вот отрывок из кода, в принципе, тут не очень много чего изменено
    Code:
    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 здесь, вам менять ничего не надо!
    Code:
    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 Активный участник

    Trophy Points:
    63
    исправил, сейчас попробую написать php cкрипт)
     
  4. Автор темы
    ilia770

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

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

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

    Trophy Points:
    78
  6. z0z1ch

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

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

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

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

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

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

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

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

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

    Trophy Points:
    153
  11. z0z1ch

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

    Trophy Points:
    123
    Тут их как минимум 2, которые вижу я.
     
    djavphu+mb073c likes this.
  12. WitER

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    123
    скинь взглянуть
     
    slavik123123123 likes this.
  18. Автор темы
    ilia770

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

    Trophy Points:
    63
    у тебя скайп есть?
     
  19. z0z1ch

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

    Trophy Points:
    123
    @ilia770, пиши в личку
     
    DavidShabaev likes this.
  20. cubespace

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

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

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

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

    Trophy Points:
    63
    напиши так

    catch(FileNotFoundException fnfn)
    {

    GameUpdater.forceUpdate = true;
    }
     

Share This Page