Кот и код

Description
Про разработку на Unity и .Net, радость и боль программирования.
Автор: @KotikovD

Про искусство и игрострой:
@svolochandborshch
Advertising
We recommend to visit
HAYZON
HAYZON
5,777,024 @hayzonn

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 1 month, 1 week ago

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 1 month ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month, 3 weeks ago

1 month, 3 weeks ago

Скачал DLC Инстинкт истребления к Atomic Heart и там невоспитанный гусь начал ругаться, обзывался даже пиздоблядской хлаёбиной. При этом догнать его и дать люлей не получилось. После этого на время была потеряна воля к написанию новых постов, но потом я вспомнил, что примерно так же мы называли читеров, которые атаковали один из наших проектов.

В общем будет несколько постов про античит меры, кратко расскажу какие есть способы и что от чего помогает. Тема громадная, поэтому какие-то моменты я буду опускать, но если что велком в комментарии с вопросами.

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

Почему вообще стоит бороться с хакерами? Потому, что они создают читы, активно их распространяют и которыми пользуются обычные игроки, превращаясь из платящих в не платящих или в целом не дают стать платящим игроком. Убытки от этого могут быть огромными.

Стоит ли в свою игру сходу имплементировать все, что мы обсудим — нет, только некоторые штуки. В новом проекте стоит же организовать некоторые вещи таким образом, чтобы потом было возможно накрутить нужный функционал. Конкретика будет походу.

И так, нас интересует две области — локальные меры в билде и защита сетевого трафика. Начнем с второго.

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

- Валидация запросов — здесь все понятно, это база, останавливаться на этом не будем.
- Шифрование запросов. Если у вас их много, то лучше шифровать часть запросов, которые содержат чувствительные данные. Делается это асимметричным способом, например, с помощью RSA. Сервер шифрует данные публичным ключом, клиент расшифровывает приватным и читает данные. В обратную сторону аналогично.

Тут возникает 2 проблемы:
1. Что если запросы очень объемные? Ассиметричные способы шифрования имеют свой минус — ими можно шифровать небольшие объемы. Тот же RSA ключ 2048 бит сможет зашифровать максимум 245 байт. Таким способом историю покупок не передать. Поэтому в подобных случаях нужно использовать гибридный способ шифрования. Данные шифруются симметричным алгоритмом, например, AES. Ключ от AES шифруется с помощью RSA и все передается в запросе. Чтобы расшифровать такой запрос, сначала распаковывается ключ с помощью RSA, затем с помощью AES расшифровывается контентная часть.

  1. Где хранить приватный ключ в клиенте, чтобы его не нашли? Об этом в следующем посте, потому что речь в целом пойдет о локальной части игры.

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

#техничка@cat_and_code

2 months ago

А как у вас проходит блокировка ECH? Почувствовали разницу?

2 months, 1 week ago

Еще одна сисадминская история. Когда заблокировали соц. сеть с квадратными фотографиями — было пофиг, но когда замедлился ютуб — стало некомфортно. Для меня это стало красной линией и я завел свой Wireguard VPN-сервер. Оказалось актуально, так как чуть позже заблокировался Notion, потом подъехал Discord, JetBrains блокирует лицензию.

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

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

2 months, 3 weeks ago

Про checked и unchecked думаю многие слышали? Недавно у unsafecsharp вышел пост про то что это. Я перечитал этот пост, пожал плечами, с ностальгией вспомнил, что на собесах это бывает звучит как дополнительный вопрос и все на этом. Отложил как очень интересное знание, которое еще ни разу не пригождалось.

И о чудо! Не далее как вчера попался в проекте баг с ошибкой на переполнение типа. Я видимо подсознательно ждал этого момента. Так что вот реальный пример. В данном проекте никто особо не запаривается на счет подбора типов значений, в основном все в int и float. Если у вас проект, где этому уделяется больше внимания, все типы ужимаются до минимально подходящего, то вероятность встретить ошибку OverflowException возрастает.

Вот так выглядит метод с ошибкой:

public int GetBundlesSize(List<BundleInfo> bundles) { if (bundles.Count == 0) return 0; return bundles.Sum(a => a.Size); }

#техничка

3 months, 1 week ago
4 months, 1 week ago
5 months ago

Многие наверное в курсе, что Telegram вообще не даёт никакой новой аудитории через внутренний поиск, рекомендации или еще что-то. Поэтому единственное, что тут есть — это упоминания канала по ссылке, которую админы других каналов делают вручную.

Привет, всем новым подписчикам, рад что вы присоединились, может быть вам будет интересно ?

На данный момент нас тут около 200 человек и вот примерно 40 новых подписчиков пришли благодаря следующему приему: ребята из Cookies Games сделали подборку каналов в виде папки и договорились о взаимном постинге этой самой папки во всех каналах. Получается достаточно рабочая реклама. Могу выделить несколько критериев:

- Продвигая небольшие каналы, подбираем такие же. Все примерно, 150-450 участников. Теоретический, далее можно повторять историю, меняя каналы и постепенно увеличивая их «размер»
- В выборке каналы живые, профильные, ведут их ради идеи. Это вообще главный критерий. Интересно как ребята вообще всех нас нашли и собрали?
- Такая реклама не раздражает, потому как подписчики тоже зачастую рады найти еще профильных каналов, но не понятно как.

Посмотрите, что есть в папке GameDev. Мне было приятно обнаружить как старых знакомых, так и найти новых. Можете кликнуть и посмотреть всех, ниже пара личных рекомендаций:

NuclearBand — взаимно следим друг за другом почти с момента когда я начал вести свой канал. Вайб примерно как у нас тут: мысли программиста, код, истории с работы.

[Не Кеша] — сейчас пытался понять, почему я сам читаю этот канал. но кажется, потому, что мне нравится сочетание крипоты и девлогов. Авторский стиль в общем)

Есть среди подписчиков админы каналов? Как вам такой прием? Поделитесь своими каналами в комментах.

We recommend to visit
HAYZON
HAYZON
5,777,024 @hayzonn

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 1 month, 1 week ago

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 1 month ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month, 3 weeks ago