Pull to refresh

Comments 15

Если вы не разбираетесь в криптографических алгоритмах и мало работали с неуправляемым кодом — не надо мучиться. То, что вы напишете, будет ломаться средней руки специалистом за 10 минут. Не усложняйте себе жизнь.
Ох! Неужели реально 10 мин?
Да, к сожалению, никогда не интересовался вопросами криптографи, защиты и т.д (
Может тогда обфусцировать чем-нибуть? Обфусцированный код будет сложнее исследовать чем нативную библиотеку?
Просто я-то хотел совместить и безопасность и производительность в одном флаконе)
Обфусцированный код .NET восстанавливается квалифицированным специалистом за 15 минут в случае реализации тривиального алгоритма (а в вашем случае именно таким он скорее всего и будет).

Security by obscurity — не лучший вид защиты.
Нда как всё печально…
Так чтобы Вы порекомендовали применить на данном этапе?

Имеет ли смысл опубликовать клиента с полностью открытым кодом и пока не заморачиваться с вопросами защиты допустим до появления «хакнутых» версий — когда это еще будет и будет ли вообще))

Все зависит от размера потенциального убытка от хакнутой версии.

Если он потенциально велик — на можно на часть потенциального убытка нанять специалиста, который спроектирует вам систему защиты.
Перенесите в вопросы, а то заминусуют же…
извините это мой первый пост тут) так и не разобрался как перенести из черновиков в вопросы(
По содержанию пост на статью тянет, несмотря на вопрос в конце.
Написать нативную dll несложно. Порог вхождения средний, но если вы пишете игру 9 лет, то на правильное управление памятью и вообще аккуратный код на С++ терпения у вас хватит, я уверен. Однако писать свой криптографический алгоритм без знаний в этой области бессмысленно, так что я бы посоветовал взять готовые решения.
А вообще, на правах креатива: можете реализовать проверку подлинности клиента через какую-то специфичную его реакцию на ответ сервера спицифичной же формы. Ну это так, мысли на тему, все равно придется хорошо прятать это дело.
Спасибо за креатив :-) Хотя вобще-то я так я так и планировал сделать изначально! Что-то типа упрощенно Warden от Blizzard.
НО, так как клиент поставляется с открытым исходным кодом, то всё это будет на виду, и при желании вся эта проверка будет закомментирована, а ответ будет высылаться в качестве правильной константы, после чего с клиентом можно будет делать всё что угодно, например отключить физику, добавить просмотр/атаку/прохождения сквозь стены и т. д.

На сервер всё это проверяется, но значительно грубее чем на клиенте и владелец суррогатного/допиленого клиента скорее всего всегда будет в выигрышном положении относительно базовой версии — что будет очень сильно отрицательно сказыватется на балансе и рейтинге игры (взять тотже WAR, который непопулярен в том числе и из-за багов/взлома его сетевой библиотеки)

То-есть я уверен, что защита нужна, и скорее всего даже в самых первых публичных версиях клиента, но вот теперь надо выяснить как её лучше реализовать — вон пишут что нативная dll ломается за 10 мин — это явно не соответствует тем усилиям, которые мне придется затратить на освоение с++(
Мне кажется все равно, какой бы ни была защита, но если вы передаете на клиент напр. координаты противников за стеной, то их так или иначе можно будет получить и «сторонним» путем, увидев тех самых «невидимых» в вашем клиенте персонажей. Закладывайте защиту в архитектуру, «by design» :)

Если же говорить о пакетах от клиента, то если у человека будет ваш клиент — то он же так или иначе сможет понять, как он работает, и сделать свой. Постарайтесь как можно меньше доверять таким критичным с вашей точки зрения вещам в пакетах от клиента на сервере, больше проверяйте их.

Для удостоверения, что у человка загружен именно ваш клиент — тоже всегда было интересно узнать, как же сделать это, минимизировав возможность подмены (также и с использованием каких-л. криптографических схем), но так ни к чему и не пришел, к сожалению. Одна из глупых идей была напр. через опред. промежутки времени спрашивать у него «а дай-ка хеш определенного куска из памяти» и сравнивать с оригинальным, но такая «защита» разбивается моментально в пух и прах взятием-хешированием этого куска из рядом лежащего/загруженного, но неактивного оригинального клиента. Аутентификация средствами ассиметричных криптоалгоритмов тоже не подошла (выдергиваем из клиента приватный ключ и «привет»). Так что вопрос, конечно, крайне интересный :)
Вон у Lineage Frost из r0 пытался защищать — почитайте, поучительно.
Хе-хе занятная статейка. Не знаю как насчет La2, но вот Aion их фрост точно не защищал. Сразу после выхода русской локализации появился бот — кажется наз. Aibolit, который отлично работает и до сих пор.

ИХМО: Лучшая защита от ботов и ботоводов в сетевой RPG это изначальное встраивание такого бота в клиент в виде нпс-наемика, который собирает ресурсы пока основной герой оффлайн. А какая на них охота!!! Ах)
В Вашем случае защиту надо строить по принципу «клиент в руках врага», все что может быть взломано — будет взломано и обязательно подорвет доверие остальных клиентов, которые играют честно. Все проверки вести на сервере, на клиенте минимум, только для сглаживания неизбежных лагов, если игра в RT, если походовка, то вообще ничего считать не надо.
Необходима система «Свой-Чужой», как в военной авиации, но где ее взять вот вопрос.
Sign up to leave a comment.

Articles