{{notification.text}}

MirGames

bigbobah
08.01.12 01:03
0
Привет!
Речь о разработке браузерной ММО.
Расскажите, какие есть способы защиты от взлома кода на стороне клиента?
Вопрос, к сожалению, пока теоретический, т.к. разработка своей игры - в мечтах :)
Знаю, что можно обфусцировать javascript, но мой уровень паранойи не даёт мне успокоиться на этом.
#1
Швец, жнец, на дуде игрец
08.01.12 01:45
0
bigbobah
Добро пожаловать на форум! :)
Цитата
Расскажите, какие есть способы защиты от взлома кода на стороне клиента?
Никаких. Пишите всю логику на стороне сервера.
Обфускация JS тут вряд ли поможет - достаточно отследить трафик к серверу и подменить пакеты своими.
Тем более, в консоли браузера это сделать легче легкого.
Отредактировано: 08.01.12 01:51
#2
10.01.12 19:13
0
Цитата
Пишите всю логику на стороне сервера.

У вам миллионы баксов на разворачивание игры? Если да, то пишите всю логику на стороне сервера, если нет, то часть логики придётся выносить в клиент.
Nikita Baksalyar уважаемый, не коментируйте то, о чём не имеете ни малейшего понятия.

1) Естественно, обфускация. Причём, последними обфускаторами и, по мере появления новых версий апдейт решения.
2) "Хитрый" формат пакета, содержащий а) номер пакета б) контрольную сумму целостности. в) Шифрование данных, желательно по изменяемуму ключу, скажем, зависящему от номера пакета. Дабы отбить руки желающим сниферром повторить пакет.
3) Всё же, старайтесь не выводить на клиент главную логику. К примеру, если у вас боёвка - то расчёт урона всегда на сервере, а вот контроль комбо по типу "три раза влево, один раз вверх и два раза вниз" - можно на клиенте.
4) Умная система логов, отслеживающая факт нетипичного поведения игрока. На примере той же боёвки - если игрок делает постоянные комбо - это уже повод выделить его ник красным и проверять более детально.
5) Если у вас медленная пошаговая игра, то достаточно контроля (проведение контроля гораздо проще). К примеру - игрок куда-то хочет походить, он тискает кнопку, клиент расчитывает минимальный путь, передаёт на сервер, а сервер только проверяет, правильный ли путь, без расчёта.

Основное:
Пакет на сервер в 3 секунды - не больше, Если больше, потребуется много-много денежек на хороший кластер. Если столько и меньше - можно обойтись 40 евро в месяц, скажем на хетцзнере, за аренду выделенной машинки.

PS Ломать будут всё равно, так что ваша задача отслеживать читеров )
Отредактировано: 10.01.12 19:14
#3
Хранитель Флейма
10.01.12 20:04
0
Woolf
Ты бред написал. Видимо твой опыт говновелосипедов дает о себе знать. Либо ты не понимаешь что такое логика на сервере, слова
Цитата
а вот контроль комбо по типу "три раза влево, один раз вверх и два раза вниз" - можно на клиенте

отлично подтверждают что ты сам не понимаешь что это.

Вся логика на стороне сервера и только так. Все проверки, которые реализует клиент, дублируются на сервере. Без исключений. Все проекты которые я видел, которые содержали часть логики на клиенте часть на сервере демонстрировали какой-то запредельный уровень говнокода, а любое изменение затрагивало и клиент и сервер. Единственное оправдание, которое я слышал от строителей таких проектов "у нас мало серверных программистов, и полно клиентских".
#4
11.01.12 03:22
0
Цитата(Said @ 10.01.2012 - 14:04) [snapback]109764[/snapback]

Woolf
Ты бред написал. Видимо твой опыт говновелосипедов дает о себе знать. Либо ты не понимаешь что такое логика на сервере, слова

отлично подтверждают что ты сам не понимаешь что это.

Вся логика на стороне сервера и только так. Все проверки, которые реализует клиент, дублируются на сервере. Без исключений. Все проекты которые я видел, которые содержали часть логики на клиенте часть на сервере демонстрировали какой-то запредельный уровень говнокода, а любое изменение затрагивало и клиент и сервер. Единственное оправдание, которое я слышал от строителей таких проектов "у нас мало серверных программистов, и полно клиентских".


Как я уже говорил, у вас логика человека, ни разу не писавшего действительно серьёзного онлайн проекта. По правилам-то, оно так и должно быть, но у вас есть деньги на серьёзную клоуд-систему, способную обарабатывать (и не просто обрабатывать, а и обсчитывать) миллионы пакетов в секунду? Нет? Тогда часть логики ПРИДЁТСЯ выносить на клиент. А то придумали.. физику на сервер вынести, обсчёты траекторий.. Тьфу )) Да ваш сервак загнётся на первых 300 онлайн..

Хотя, я не спорю, если это пошаговая игра, не критичная к скорости обработки пакетов - то да, всю логику нужно выносить на сервер.
Единственная динамичная игра, которую я видел и где логика на сервере - это WoT - вы их серваки видели? Одна аренда 100к в месяц обходится, и не рублей..
Отредактировано: 11.01.12 03:34
#5
Хранитель Флейма
11.01.12 03:33
0
Woolf
А, так я это уже тоже слышал, как аргументов нет, так сразу ссылка на опыт.

Кто говорит про физику на стороне сервера? Разве я? Ну-ну. Видимо здесь вопрос недопонимания что конкретно иногда выносят на сторону клиента. Потому что физика это одно, но когда простите урон позволяют рассчитать клиенту и потом принять его на сервере (на веру) - это бред. А я такой бред видел и не раз.
#6
11.01.12 03:36
0
Цитата(Said @ 10.01.2012 - 21:33) [snapback]109766[/snapback]

Woolf
А, так я это уже тоже слышал, как аргументов нет, так сразу ссылка на опыт.

Кто говорит про физику на стороне сервера? Разве я? Ну-ну. Видимо здесь вопрос недопонимания что конкретно иногда выносят на сторону клиента. Потому что физика это одно, но когда простите урон позволяют рассчитать клиенту и потом принять его на сервере (на веру) - это бред. А я такой бред видел и не раз.


про урон я там и написал, что КРИТИЧНЫЕ вещи просто необходимо выносить на сервер, менее критичные - можно вынести на клиент. Если не получается, лучше прорефакторить весь игровой процесс.
#7
11.01.12 05:19
0
Цитата(Said @ Сегодня, 01:33)
[snapback]109766[/snapback]
нет, так сразу ссылка на опыт

А какой еще может быть аргумент, кроме опыта? O_o
Раз на то пошло, приведи пруфы того, что ты сказал. Т.е. реальные куски кода с подтверждением того, что они используются в тех или иных компаниях и то, что эту компанию этот код реально напрягает.

Вообще, возникает впечатление, что у тебя зуд в анусе, без обид. Человек делится опытом, для чего и предназначен форум, а ты говоришь что мол без ссылок на пруфы (т.е. банально на статьи, по сути) его опыт не годится. Для того, чтобы найти статью, автор мог бы воспользоваться гуглом, а не форумом.

Вообще, твоё мнение уже было выражено Nikit'ой Baxalyar'ом. Т.е. зачем ты сейчас пытаешься его продублировать - непонятно. Ты пытаешься задавить авторитетом? Так дай ссылки на ММО-проекты, что ты сделал - мы сравним опыт работы твой и Woolf'а и сделаем выводы.

#8
Хранитель Флейма
11.01.12 05:52
0
Вячеслав
Бред сказал :)

Цитата
Так дай ссылки на ММО-проекты, что ты сделал - мы сравним опыт работы твой и Woolf'а и сделаем выводы.

Так я про то и говорю, вместо того что бы аргументировать мне тут же указывают на опыт. Правило демагога во всей красе.

Цитата
эту компанию этот код реально напрягает

Это весь легаси код в компаниях, в которых я работал. Без исключений. И все самое главное понимают что это косяк сплошной, но ничего уже сделать не могут к тому времени.
#9
11.01.12 06:19
0
Обращаю внимание многомиллионной аудитории этой темы, что Said ушёл от пруфов своих проектов.

Цитата(Said @ Сегодня, 03:52)
[snapback]109769[/snapback]
Правило демагога во всей красе.

Демагог имеет законченные ММО, разве нет? Это и есть пруф его опыта. Теперь давай пруфы своего опыта. А то "в одной компании" напоминает мне введение в "Чистый код", где из-за грязного кода распадаются компании :)
#10
Хранитель Флейма
11.01.12 07:11
0
Вячеслав
Я могу тебе все показать в личке, т.к. считаю не этичным перед моими бывшими коллегами выставлять их проблемы на показ.

Btw я не хочу засорять тему, ответы только по существу и только автору топика. Что на счет демагогии, то ты видимо совсем не понял о чем речь. Речь была о том, что вне зависимости от опыта - аргументы всегда должны присутствовать. :P
#11
11.01.12 07:22
0
[offtop]
Цитата(Said @ Вчера, 18:04)
[snapback]109764[/snapback]
что ты сам не понимаешь что это

Цитата(Said @ Сегодня, 01:33)
[snapback]109766[/snapback]
вопрос недопонимания

Цитата(Said @ Сегодня, 05:11)
[snapback]109771[/snapback]
совсем не понял о чем речь.

:(
[/offtop]
#12
Швец, жнец, на дуде игрец
12.01.12 02:04
0
Woolf
В целом - согласен, но вы говорите про обычные ММО, с клиентом на C++/Delphi/Flash/что там еще. Здесь же речь идет конкретно о браузерных игрушках, у которых несколько другая специфика. Например, у веб-разработчиков принято правило - "никогда не доверяй клиенту" - и я не вижу причин, по которой оно же не касалось бы и браузерных игр. Теория подтверждается практикой - ни в одном веб-приложении из тех, над которыми я работал, не было логики на клиентской стороне. Еще, например, по рассказам товарища, работающего в компании, выпустившей "Берсерка Онлайн" - логика в играх у них только на сервере (пруф). Причины, по-моему, очевидны - если с игроков берутся деньги за определенные бонусы в игре - надо исключить возможность получения этих самых бонусов методом вклинивания в код клиента и написания своего, "правильного" кода. :)

Разумеется, в сложных, динамических (не пошаговых) играх - немного другая ситуация, и некоторые некритичные части можно и нужно вынести на сторону клиента - тут согласен.

Цитата
Естественно, обфускация. Причём, последними обфускаторами и, по мере появления новых версий апдейт решения.

Это тоже мимо кассы. Достаточно нажать Ctrl+Shift+I в Хроме - и все будет видно, как на ладони - включая посылаемые запросы и код (еще там есть встроенные дебаггер и деобфускатор, ага). Дальше ставим брейкпоинт на все запросы к серверу, идем по коллстеку до места, где рассчитывается интересное нам значение - тут же меняем код, запускаем - и ... :)
Отредактировано: 12.01.12 02:18
#13
17.01.12 06:01
0
Вячеслав
Хорош тут срач разводить, Said всем здесь давно известный жирный тролль и его камменты лучше даже не читать.

Nikita Baksalyar а вот по поводу браузерных решений я с вами не согласен - кто вам мешает использовать, скажем, юнити? Ну, или последние флэш-решения тоже очень даже функциональны. Мне кажется, что простые решения на Js сейчас мало того, что не модны, но и проигрывают по всем параметрам конкурентам в виде почти полноценных вкрячиваемых приложений.Я уж молчу про функциональность js (это моё личное мнение, программиста Java и С#)

Для всех Да, я согласен, логика должна быть на стороне сервера. Но вот беда в том, что даже при включении рассылки по локациям кто чего поймал - сервер просто захлслуживается пакетами. При тысяче онлайн задержки рассылки более 3х секунд. При 3х тысячах онлайн - сервер просто уходит в дедлок. Причём, увеличение мощности только оттягивает неизбежную смерть..
Отредактировано: 17.01.12 06:11
#14
17.01.12 08:38
0
Но как-же пиратские сервера l2 написанные на java держат 2к онлайн? Со всеми поисками пути проверкой на попадание и рыбалка там кстати тоже есть. Причем конфигурация на них не сказать, что заоблачная.

P.S: Это не наезд, просто интересно, какая-же у них там магия. Опыта в разработке серверов нету никакого.
#15
Хранитель Флейма
17.01.12 10:16
0
Woolf
Ты сам признавался в том, что ты плохой технический специалист. И уже много раз это демонстрировал. Так что не вижу смысла доверять твоему мнению, которое подкреплено одним единственным аргументом "сервер не справится". Да, все так - твой убогий сервер не справится, в этом причина. Да, все так - твоя хромая серверная логика - положит сервер.

У всех остальных все работает замечательно.
#16
Хранитель Флейма
17.01.12 10:24
0
Перечитал темку:

Некто Woolf пишет:
Цитата
Но вот беда в том, что даже при включении рассылки по локациям кто чего поймал - сервер просто захлслуживается пакетами. При тысяче онлайн задержки рассылки более 3х секунд.

Ничем не прикрытая ложь. Состоит она в том, что:

1) Woolf не показал то же самое решение на стороне клиента.
2) Woolf ничего не говорит о реализации на стороне сервера. Спорю что вульфик в этом случае напрямую с СУБД работает, и спорю что все операции чтения / записи у него сразу же on-disk. Отсюда и результат.
#17
18.01.12 01:02
0
Цитата(JKot @ 17.01.2012 - 02:38) [snapback]109799[/snapback]

Но как-же пиратские сервера l2 написанные на java держат 2к онлайн? Со всеми поисками пути проверкой на попадание и рыбалка там кстати тоже есть. Причем конфигурация на них не сказать, что заоблачная.

P.S: Это не наезд, просто интересно, какая-же у них там магия. Опыта в разработке серверов нету никакого.


у ла2 нет такого стремительного траффика пакетов. Там же всё просто - кликнул мышкой - пакет ушел, не кликнул - не ушёл, только пинг раз в 30 секунд.. Т.е. в ла2 реально мало пакетов серфится, я разбирал сервак ла2, там всё банально.. А вот если взять сервак WoT - то я вот пока реально не понимаю, как там всё сделано. При 120к онлайн тут даже кластеры не спасают. Остаются бить челом программистам варгаминга за отличные нетрадиционные решения. Но точит меня червячок сомнения, уж не вынесли ли они на клиент часть боёвки )) Потому, что производительность серваков WoT просто феноменальная. И тут даже 4 млн евро в месяц не помогут..
#18
18.01.12 01:08
0
Цитата(Said @ 17.01.2012 - 04:24) [snapback]109801[/snapback]

Перечитал темку:

Некто Woolf пишет:

Ничем не прикрытая ложь. Состоит она в том, что:

1) Woolf не показал то же самое решение на стороне клиента.
2) Woolf ничего не говорит о реализации на стороне сервера. Спорю что вульфик в этом случае напрямую с СУБД работает, и спорю что все операции чтения / записи у него сразу же on-disk. Отсюда и результат.


у меня на стороне клиента полностью само вываживание рыбы, т.е. активный динамический процесс. Ломают, не без этого, но умная система логов выявляет читеров моментально. Там много параметров в логе, к примеру, сколько клавиш было нажато, время вываживания, снасти и так далее. По итогам недели проводится бансессия. Хочу сказать, то их немного - два/три человека в месяц.

По поводу СУБД - у меня очередь запросов, т.е. все инсерты и апдейты идут по мере освобождения БД, селекты, естественно, работают вне очереди. Ну и еще у меня 64 конкурентных соединений к БД одновременно работают. Вам, саид, рекомендую покурить мануалы про DB pool. Ну и еще про правильную организацию БД. Лично я использую MySql, но поговаривают, есть решения на Postgre или MsSQl. Лично я этих монстров опасаюсь, да и постгре, судя по тестам, несколько медленнее мускуля..

ЗЫ Если вы, саид, хотели меня поймать на нубских вещах - не получится. У меня 12 реально работающих серверов, в числе прочих - сервер транзакций валютнофондовой биржи беларуси и сервер транзакций дойчвиза с 150 тысячным моментальным онлайном (писано по оутсорсу, там оракл и вообще очень всё навороченно). Плюс три сервера реальных ММО проектов. Так что, не тратьте зря время, я в серверах малость разбираюсь..

ЗЫ2 Моя технология серверных решений справляется с 350 тысяч пакетов в секунду. Если больше - начинается временный парусекундный дедлок, при котором сервак не принимает данные, это зависит от конкретной серверной машинки. Мой показатель - выше, чем в предлагаемых серверных решениях. Скажем, у того же Photon - до дедлока 300 тыс пакетов, у ES5 - 280 тыс пакетов, у RedDwarv - всего 210 тыс пакетов. Говорят, люди тестировали сервер ла2 - он более 150 тыс не выдерживает. Т..е максимальный онлайн ЛА2 сервера не превышает 5 тыс человек.
Отредактировано: 18.01.12 01:36
#19
Хранитель Флейма
18.01.12 11:15
0
Woolf
Цитата
о поводу СУБД - у меня очередь запросов, т.е. все инсерты и апдейты идут по мере освобождения БД, селекты, естественно, работают вне очереди. Ну и еще у меня 64 конкурентных соединений к БД одновременно работают. Вам, саид, рекомендую покурить мануалы про DB pool. Ну и еще про правильную организацию БД. Лично я использую MySql, но поговаривают, есть решения на Postgre или MsSQl. Лично я этих монстров опасаюсь, да и постгре, судя по тестам, несколько медленнее мускуля..


Ну так все правильно, я же говорю ты лох:
Цитата
спорю что все операции чтения / записи у него сразу же on-disk

Ты это подтвердил. DB-pool тут не при чем совершенно :) Лол. У тебя ботлнек - твой способ работы с БД. Вот и все.

Цитата
Моя технология серверных решений справляется с 350 тысяч пакетов в секунду

Хотелось бы услышать что это за технология, или хотя бы что в ее основе.

Цитата
хотели меня поймать на нубских вещах - не получится

А никто тебя не ловит, ты не в теме просто, написал два велосипеда и думаешь что так дядьки делают. На счет БД можешь мне не рассказывать, я уже несколько раз наблюдал как ты тупо палишься своим посредственными знаниями в этой области. А на счет геморра с размазыванием бизнес-слоя по клиенту, серверу и субд я услышал только пока одно глупое оправдание "тормозит-с", что мне неимоверно доставляет в виду отличного понимания кривизны твоего сервера. (И еще больше доставляет, что ты свои потуги в этой области проецируешь на окружающих, считая что указал единственно правильный путь, лол, вместо аргументов предоставляя ссылки на свои проекты)
#20
Швец, жнец, на дуде игрец
18.01.12 22:22
0
Woolf
Цитата
по поводу браузерных решений я с вами не согласен - кто вам мешает использовать, скажем, юнити? Ну, или последние флэш-решения тоже очень даже функциональны

Мне-то никто не мешает, но топикстартер речь изначально вел именно про JavaScript - отсюда я и пляшу. :)
При всех возможных недостатках (которые быстро исправляются компаниями Google, Mozilla, и Opera) у HTML5 и JavaScript есть большой плюс - они доступны в большинстве популярных браузеров по меньшей мере четверти пользователей интернета "из коробки", без необходимости устанавливать всякие левые плагины.
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}