Войти или зарегистрироваться

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

  • Автор темы Автор темы 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 скрипт выложить не могу так как его писал не я, выкладываю только то что сделал сам)



Сильно не ругайте, первый раз туториал выкладываю)
 
в общем напишу как он должен работать и что делать может быть кто нибудь реализует и выложит, он должен работать так что если на него заходят вот так : http://minecraft.com/hash.php?hash=(и тут указан хеш) если он имеется в базе, то скрипт отвечает "YES", а если там которого нет в базе или хеша нет вовсе то скрипт отвечает "NO")
 
Накидал скрип, пробуйте... я его не тестировал, но должен работать.
PHP:
<?php
// Файл со скриптом положить на сервер рядом с файлом "minecraft.jar", хеш которого будет расчитываться для сверки c хешем передаваемым лаунчером.
 
$clientHash = $_GET['hash']; //хеш передаваемый лаунчером по ссылке
$serverHash = md5_file('minecraft.jar'); //хеш расчитываемый сервером
 
if ($clientHash == $serverHash)
{
    echo 'YES';
}
else
{
    echo 'NO';
}
?>
 
UPD - сори, сонный, не совсем внимательно прочел=)
 
Тут же вопрос: заменить слово в лаунчере YES->NO, NO->YES и игроки уже не будут обновляться?
 
@lol63, ты имеешь ввиду уязвимость (путем редактирования лаунчера)?
 
Хм, а если вместо "YES" & "NO" - возвращать целочисленные логические 1 и 0?
Тогда, если я правильно думаю, инкласспатчером нельзя будет изменить значения, ибо ищет он только строки, верно?
Но тогда останется ссылка на чекер, которую можно будет зануллить или изменить, и это остается уязвимостью, или я снова не прав?
 
Хм, а если вместо "YES" & "NO" - возвращать целочисленные логические 1 и 0?
Тогда, если я правильно думаю, инкласспатчером нельзя будет изменить значения, ибо ищет он только строки, верно?
Но тогда останется ссылка на чекер, которую можно будет зануллить или изменить, и это остается уязвимостью, или я снова не прав?
только не целочисленные, а просто логические true, false.
 
А не можно просто сделать проверку по md5 ?
если у клиента и на сервере разные md5-сумы minecraft.jar, то чтобы клиенту сервер перезакачивал minecraft.jar!
и у всех игроком будет один и тотже minecraft.jar!
и они не смогу установить чит, потому что при подключении к серверу будет перезаписан их minecraft.jar
на оригинальный тот что на сервере!
 
А не можно просто сделать проверку по md5 ?
если у клиента и на сервере разные md5-сумы minecraft.jar, то чтобы клиенту сервер перезакачивал minecraft.jar!
и у всех игроком будет один и тотже minecraft.jar!
и они не смогу установить чит, потому что при подключении к серверу будет перезаписан их minecraft.jar
на оригинальный тот что на сервере!
Так оно так и сделано)
 
Парни метод редактирования лаунчера это как? я когда через exe4j его в exe перекомпилию он у меня ничем не открывается т.е редактировать его не получится!)
 
Парни метод редактирования лаунчера это как? я когда через exe4j его в exe перекомпилию он у меня ничем не открывается т.е редактировать его не получится!)
скинь взглянуть
 
Есть один баг в системе
когда удалить сам файл minecraft.jar
на компе пользователя в аппдате
то при запуску лаунчера
то шкала обновление стоит гдето на 95% и все! И нечего не идет и Пишет что загрузка завершена!
но в папке bin файл так и не появляеться

может а может я не так что то делал
 
напиши так

catch(FileNotFoundException fnfn)
{

GameUpdater.forceUpdate = true;
}
 
Назад
Верх