Привет, сообщество.
Мой путь в программировании: ASP VB script >> VB.Net >> C#, с С и С++ я знаком минимально.
С давних пор пишу онлайн RPG (около 9 лет) и сейчас дошел до стадии публичного онлайн тестирования.
Клиентская часть написана на С# и доступна для изучения(улучшения) всеми желающими.
У меня нет никакой паранойи (надеюсь ;-)) относительно хакеров и любителей поломать чужие сервера — я отлично понимаю, что никому нет дела до моих исходников, однако мне хочется, чтобы на сервер отсылались пакеты, обработанные только известной, проверенной и утверждённой версией клиента.
Поэтому я хочу реализовать защиту в виде подключаемой приватной нативной библиотеки, которая будет отсылать на сервер хеш код используемого клиента, плюс она-же будет шифровать/дешифровать/сжимать/разжимать все пакеты. То есть если в клиенте реализуют отсылку фиктивного хешь кода, без использования нативной DLL, то злоумышленнику также придется реализовать свою версию обработки пакетов.
У меня есть несколько вопросов:
1. Правильный ли это метод зашиты клиента? Может быть есть какие-то готовые актуальные методы, реализующие такую задачу.
2. Сложно ли будет исследовать нативную DLL для реализации своего обработчика- тоетсь насколько высок порог вхождения для этого.
В игре ожидаются очень массовые замесы, поэтому, как мне кажется, крайне важно минимизировать трафик в обе стороны. Для сериализации всех объектов используется «ручной» метод в байт код без избыточности (то есть в нем только значимые байты) + я хочу сжимать числа по VLQ алгоритму rosettacode.org/wiki/Variable-length_quantity + поверх ZIP сжатие.
Вопрос:
3. Имеет-ли смысл использзовать VLQ, ZIP и заморачиваться написанием нативной С DLL (напомню, я практически не знаком с этим языком) для обработки пакетов, и даст ли это ощутимый выигрыш в произодительности.
Автор: wlastas