Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
  • Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Фикс Защита лаунчера [Переменная сессия]

Дорогие ламеры, утверждающие что-то в этой теме - желаю вам смерти.
Декомпиляция лаунчера становится сущим адом, если немножко пошаманить с Jar2Exe
Найти строчку в клиенте можно, но для получения точного алгоритма хеширования нужна декомпиляция, что тоже станет адом, учитывая то, что у MCP стоит RetroGuard. Дублирование классов - вот решение против декомпиляции клиента.
И последнее. Ключ не обязательно указывать строкой. Как вам идея вводить его кодами символов?
Тогда InClssTranslator бессилен.
Отныне прошу писать либо дельные комментарии, либо не писать их вообще, или я удалю тему.
Способ с DLL уже реализовал, но не буду выкладывать его в паблик.
Кому нужно - стучимся в личку.
Если есть знатоки JNI - стучим в скайп dj_arktic
Для начала сделайте её у себя и попросите народ протестировать это дельце. Вот тогда, может быть, и найдутся покупатели.
 
Можешь подкинуть для чистого 1.4.7 Не FORGE
или как сделать это в эклипсе
Отрываем эклипс с рабочим каталогом MCP
Идем в net.minecraft.client.multiplayer.NetClientHandler
И в конец добавляем
 
Фикс второй дырки
...
Теперь клиент должен поддерживать валидность сессии:
Отрываем эклипс с рабочим каталогом MCP
Идем в net.minecraft.client.multiplayer.NetClientHandler
И в конец добавляем
Код:
  private void func198i (){
        String x0 = this.mc.session.sessionId;
        x0 = getHash(x0+"ваш_ключ");
        this.mc.session.sessionId = x0;
    }
 
    public static String getHash(String str){
        MessageDigest m;
        try {
            m = MessageDigest.getInstance("MD5");
            m.reset();
            try {
                m.update(str.getBytes("utf-8"));
                String s2 = new BigInteger(1,m.digest()).toString(16);
                while(s2.length() < 32 ){
                    s2 = "0"+s2;
                }
                return s2;
            } catch (UnsupportedEncodingException e) {
                return e.toString();
            }
        } catch (NoSuchAlgorithmException e) {
            return e.toString();
        }
    }
Теперь находим строчку
Код:
URL var4 = new URL("http://session.minecraft.net/game/joinserver.jsp?user=" + urlEncode(par1Str) + "&sessionId=" + urlEncode(par2Str) + "&serverId=" + urlEncode(par3Str));
И под ней добавляем
Код:
func198i();
Сохраняем.
Запускаем recompile.bat
Затем reobf.bat
идем в %MCP%/reobf/Minecraft
Забираем класс, лежащий в ней (на версии 1.4.7 это ayh.class)
С помощью InClassTranslator меняем в новом классе путь до joinserver
Заливаем класс в ваш minecraft.jar
Вот это явно лишнее.
Мы уже львиную долю безопасности потеряли на ключе в лаунчере, а Вы предлагаете еще и в клиент его положить на всеобщее обозрение.
Зачем клиенту расшифровывать сессию? Он строку валидной сессии может передать целиком, без всяких расшифровок(что успешно и делает), а скрипт апдейтом просто стирает данные о сессии из базы. То есть результат в точности как и у Вас, но мы палим ключ только 1 раз в лаунчере.
Спасибо за статью, с некоторыми отступлениями применил Ваш метод.

Осталось рассказать людям как скомпилировать лаунчер так, чтоб его не вскрыли банально открыв архиватором. В этом есть загвоздка - я использую исходники бухаря(не знаю как дела на остальных). При компилировании .exe с помощью jar2exe и пряча классы у меня перестает работать функция распаковки нативов из jar, соответственно клиент с таким лаунчером не запустить.
Если кто-нибудь подскажет решение проблемы буду благодарен. Есть отдельная тема.
 
Вот это явно лишнее.
Мы уже львиную долю безопасности потеряли на ключе в лаунчере, а Вы предлагаете еще и в клиент его положить на всеобщее обозрение.
Зачем клиенту расшифровывать сессию? Он строку валидной сессии может передать целиком, без всяких расшифровок(что успешно и делает), а скрипт апдейтом просто стирает данные о сессии из базы. То есть результат в точности как и у Вас, но мы палим ключ только 1 раз в лаунчере.
Спасибо за статью, с некоторыми отступлениями применил Ваш метод.

Осталось рассказать людям как скомпилировать лаунчер так, чтоб его не вскрыли банально открыв архиватором. В этом есть загвоздка - я использую исходники бухаря(не знаю как дела на остальных). При компилировании .exe с помощью jar2exe и пряча классы у меня перестает работать функция распаковки нативов из jar, соответственно клиент с таким лаунчером не запустить.
Если кто-нибудь подскажет решение проблемы буду благодарен. Есть отдельная тема.
Как все наивно тем же jar2exe классы обратно можно вернуть :trf:.
 
Автор,огромное тебе спасибо :)
Я смотрел что происходит с iCraft и боялся создавать проект.
Благодаря твоему фиксу жизнь стала лучше :)​
 
Не суть как называется скрипт.
Как все наивно тем же jar2exe классы обратно можно вернуть :trf:.
Именно поэтому я предложил обсудить способы защиты от декомпиляции лаунчера в своей теме :)
 
ТС адекватно, с расстановкой расписал вариант защиты, за что большоой плюс. Как руки дойдут попробовать, отпишусь.
У меня стоит проверка в клиенте md5 самого себя с последующей передачей серверу. Сервер никак не предотвращает подключение игроков с левым md5, а лишь банит их через n-ное время, дабы никто не понял, в чем заключается защита, а админы проверяют логи передачи и всех, кто связан с этим игроков. Довольно эффективно + иногда выявляются баги.
 
ТС адекватно, с расстановкой расписал вариант защиты, за что большоой плюс. Как руки дойдут попробовать, отпишусь.
У меня стоит проверка в клиенте md5 самого себя с последующей передачей серверу. Сервер никак не предотвращает подключение игроков с левым md5, а лишь банит их через n-ное время, дабы никто не понял, в чем заключается защита, а админы проверяют логи передачи и всех, кто связан с этим игроков. Довольно эффективно + иногда выявляются баги.
А я думал, что я один до такого додумался :oops:
Ну да ладно, зато у меня немного иначе сделано :cool:
 
неплохо надо чтобы лаунчер проверял запущена программа которая отслеживает сессию если да то лаунчер закрывался бы
 
Я ещё придумал защиту от мультиакка :trf:
Она легко обходится, но найти её очень трудно...
 
Я ещё придумал защиту от мультиакка :trf:
Она легко обходится, но найти её очень трудно...
Реальная защита от мультиакка это считывание отпечатков с мышки каждую минуту игры. Все остальное лишь попытки.
HWID?
 
Вопрос такой.У меня лаунчер написан на C#,можно ли как-то поставить эту защиту на него?Тем более на сколько я знаю, лаунчер на C# невозможно декомпилировать.
 
Вопрос такой.У меня лаунчер написан на C#,можно ли как-то поставить эту защиту на него?Тем более на сколько я знаю, лаунчер на C# невозможно декомпилировать.
ЛОЛ на C# программы дизассемблируют :). Но не спорю это более сложный процесс.
 
Пока что ничто не мешает запустить свой клиент с полученной через вторую дыру сессией(при этом не подключаться к серверу).
 

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

Назад
Верх