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

Защита клиента

Тема в разделе "Оффтопик", создана пользователем Alex_Bond, 17 ноя 2012.

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

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

    Баллы:
    153
    Skype:
    Alex.Bond.d
    Имя в Minecraft:
    Alex_Bond_UA
    Всем привет.

    Тут в одной из тем на форуме всплыла тема идеальной защиты клиента от читеров.
    Я начал думать над вариантами защиты и мне в голову пришла довольно не плохая идея.
    Скажу сразу - данная идея реализуемая только на односторонне-компилируемом языке (например C++).

    Суть данной идеи - пароллирование архива либо видоизменение сборщика архива (например малеха переделанный zip или 7z).
    Опишу цикл работы системы:
    1. Качается лаунчер. Данный лаунчер написан исключительно на односторонне-компилируемом языке (как я и говорил).
    2. Лаунчер выкачивает архив в minecraft.jar. Данный архив или под паролем (длинным чтобы не подобрать брутфорсом) или создан спец архиватором для лаунчера.
    3. Если архив под паролем то лаунчер по https протоколу запрашивает пароль к нему. Но набор символов который получит лаунчер не является финальным паролем. В лаунчере есть зашитый код (соль) благорадя которому (например md5(полученый_пароль + соль)) лаунчер получает пароль к архиву.
    Учитывая то что можно деассемблировать исходники соль надо разить на части в разных местах (желательно запаковать в какую то dll часть данного кода). В каждом уникальном лаунчере (под каждый проект) используется свой метод сбора и генерации соли что сводит к 0 возможность сбора соли после деассемблирования.
    3.1 Если используется метод измененного архиватора (к сожалению, для каждого проекта надо будет по своему менять процесс архивации) то пароль не обязателен так как разархивировать данный архив никто кроме лаунчера не сможет.
    -- Заметка: Возможно использовать оба способа параллельно.
    4. Система распаковывает jar файл в RAM. На диск не пишется ни при каких условиях. Только в RAM.
    5. Лаунчер запускает jar файл из RAM.
    6. В клиент можно вшить некую дополнительную проверку вроде снова же какой то соли. Если что то не совпадает - сервер отказывает в доступе.

    На выходе получаем лаунчер с клиентом которых взломать сможет только высококвалифицированный программист assambler который сможет собрать соль и благодаря этому получить доступ к клиенту в обход лаунчера. Шанс на то что такой специалист займется взломом максимально близок к 0.

    Данный проект возможно создать по принципу Open Source так как при компиляции можно менять структуру генерации соли.

    Жду отзывов о данной идее и возможно предложений о реализации.
     
    slavik123123123, Nexeon, Philipp022 и 3 другим нравится это.
  2. Автор темы
    Alex_Bond

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

    Баллы:
    153
    Skype:
    Alex.Bond.d
    Имя в Minecraft:
    Alex_Bond_UA
    Хмм.. Тихо как в танке.. Это печально.
     
  3. akke

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

    Баллы:
    103
    Поймать сессию при запросе на joinServer и все, защита уже не поможет.
    Все защиты на клиенте порочны, потому что они на клиенте.
     
    Bars нравится это.
  4. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Оффигенная идея, особенно про своё архивирование, пойду попробую чё-нить сотворить
     
  5. Автор темы
    Alex_Bond

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

    Баллы:
    153
    Skype:
    Alex.Bond.d
    Имя в Minecraft:
    Alex_Bond_UA
    А что мешает написать, к примеру, проверку раз в 5 минут на код? Если клиент вернет не правильный ответ - обрыв.
     
    Philipp022 нравится это.
  6. akke

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

    Баллы:
    103
    Куда код будет отправляться? Пакетом на сервер, запросом по http? Кто конкретно будет заниматься проверкой и выкидыванием игрока?
    В принципе это возможно, но я могу просто открыть minecraft.jar, отсортировать все классы по дате изменения и увидеть что к чему и как отправляется. Далее просто скопирую этот класс в клиент с читами
     
    HoShiMin нравится это.
  7. Автор темы
    Alex_Bond

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

    Баллы:
    153
    Skype:
    Alex.Bond.d
    Имя в Minecraft:
    Alex_Bond_UA
    Погоди) как ты распакуешь minecraft.jar если он в запаролленом архиве и на винт он не пишется?)
     
    ВремяПриключений нравится это.
  8. Автор темы
    Alex_Bond

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

    Баллы:
    153
    Skype:
    Alex.Bond.d
    Имя в Minecraft:
    Alex_Bond_UA
    подсовывание файла как переменной, например... Всеравно Java при запуске копирует файл в оперативку.
     
  9. VareZzZz

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

    Баллы:
    153
    Да нахрена оно надо, пусть уж лучше читерят чем такой гемор изобретать.
     
    ВремяПриключений нравится это.
  10. TEEN

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

    Баллы:
    88
    Skype:
    teen_true
    Имя в Minecraft:
    TEEN
    Любую защиту можно обойти. Например ту же dll можно так же декомпилировать. P-код, который был лет 10 назад популярным и не имел возможности быть декомпилированным, сломали года 4 назад и защит не осталось. Сольку найдут, сравнив исходники твоего защищенного клиента с исходниками эталонного клиента. Прокси сессию все равно даст передаст и спалит сразу при первой возможности.
    Как вариант - мод с высокой степенью обфускации, который бы шифровал все переданные данные серверу и обратно с проверкой пакетов. В таком случае даже сниф и подмена пакетов не поможет, но все ломается ;)
     
  11. agentik007

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

    Баллы:
    153
    Имя в Minecraft:
    agentik007
    Самый оптимальный вариант - переписать маинкрафт на брейнфаке
     
  12. Dr.Death

    Dr.Death Старожил Пользователь

    Баллы:
    153
    Skype:
    asn008
    Имя в Minecraft:
    DrDeath
    Толсто
     
  13. Racvol

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

    Баллы:
    123
    Мне кажется идея нереализуема начиная с 5 пункта
     
    I-Am-Black-Overlord нравится это.
  14. Racvol

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

    Баллы:
    123
    Как ты эти ресурсы передаш в другое (виртуальной машине java) приложение?
     
  15. Racvol

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

    Баллы:
    123
    Ну и что? Бинарник находится в ресурсах приложения написанного на C# и это приложение его запускает, или я не прав?
     
  16. Racvol

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

    Баллы:
    123
    Так нам надо записать этот ресурс в память и от туда передать другому приложению в нашем случае виртуальной машине java? Встает вопрос каким образом передать информацию из одного процесса в другой, да так чтобы этот процесс понял что от него хотят. Да ни как без хитроумных вмешательств в чужое адресное пространство не своего процесса, тк нельзя записать в адресное пространство чужого процесса свою информацию
     
  17. hummer

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

    Баллы:
    123
    Skype:
    bond_russia
    В локальных условиях не как не защититься от вмешательства.
    Правильней задать такие условие как Серверная защита.
    И разрабатывать доп.По для защиты. Другим способом не как не обойтись.
    т.к в задачу клиента входит получение от сервера пакетов и ее отображение, а также отправка серверу..
    А сервер уже сам вычисляет, на клиенте нельзя делать не какие вычисления т.к клиент это уязвимая часть..
    Знатоки могут просто из памяти читать происходящие операции в программе.
     
  18. hummer

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

    Баллы:
    123
    Skype:
    bond_russia
    Пиши выслушаю..
     
  19. msgroup

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

    Баллы:
    153
    Skype:
    vladcygankov
    Имя в Minecraft:
    msgroup
    Самая нормальная защита: делать лицензионные сервера(только для лицензионщиков) и ввести глобальный античит, вроде VAC, который будет банить читеров.
     
  20. TEEN

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

    Баллы:
    88
    Skype:
    teen_true
    Имя в Minecraft:
    TEEN
    На любой античит есть антиантичит
     

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