RU/Полный античит MTA для форк-проектов

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
[[{{{image}}}|link=|]] Примечание: Информация на этой странице не относится к официальным сборкам MTA.

Форки MTA, которым недостаточно использовать "обычный netc для форков" (из bdata/netc.dll), как описано на вики-странице Forks, из-за того, что он предлагает очень ограниченную античит-защиту, могут изучить возможности использования нового netc варианта: "полного античита для форков". Это, однако, имеет свои ограничения, относящиеся к особенностям вашего форк-проекта и реализации, которые нелегко объяснить, но эта страница стремится сделать это как можно точнее.

Эта операция превратит ваш форк в проект с "надлежащим античитом, основанным на методе исправлений", как описано в спойлере в этой теме: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/, а не максимум 15% 'основанным на сигнатурах' античитом, как описано на вики-странице Forks для обычных форков.

Основная идея:

  • Модуль netc "с полным античитом для форков" будет предоставлять 95% функций античита, имеющихся в официальных MTA (multitheftauto.com > Кнопка "Download") сборках.
  • Чем больше несовместимых функций/реализаций (пользовательских изменений) имеет ваш форк-проект, которые вы можете отключить (добавив их в белый список обнаружения: disableac массив в mtaserver.conf, как описано на странице Anti-cheat guide / Руководство по античиту: DISABLEAC), тем ниже будет указанное число защиты в процентах.
    • Например, если вам нужно отключить 3 различных типа обнаружения (допустим, для российских форков, учитывая загрузку внешних модов вне MTA API/limit adjuster'а, наиболее распространёнными являются: 5, 6, 21), вы получите 85% оставшейся античит-защиты. Хотя это число относительно, так как это даёт разработчикам читов возможность использовать именно эти отключенные категории обнаружения для обеспечения работы их читов/хаков, и эти 3 кода уже предоставляют некоторые конкретные пути для записи в память GTA.

Понимаете, к чему всё это идёт? Ниже в этой статье появится ссылка на "полный античит для форков", и то, что вы будете делать с ним - это метод проб и ошибок. Попытка интегрировать полную поддержку античита в ваш форк - это вопрос "Мы можем попробовать, и если это сработает, то будет здорово.. если нам придётся отключить некоторые обнаружения, то процент защиты будет выше, чем у обычного античита форков: 15% и это уже огромный выигрыш.." и во многом зависит от меры возможностей. Потому что причина, по которой мы разделили netc форков (из bdata/netc.dll) на тот, в котором отсутствует большинство античит-функций, может быть понятна любому опытному разработчику: netc модуль (античит) не рассчитан на все типы настроек, которые разработчик форка может добавить в свою кодовую базу, это было сделано в духе предоставления максимальной свободы и гибкости. Тем более, что многие форки имеют не самых лучших разработчиков, не понимающих, почему им лучше следовать рекомендациям MTA (mtasa-blue) по написанию кода, структуре проекта и максимально приближать свои пользовательские реализации так, как это обычно делает участник MTA, прошедший проверку (ревью) кода. Таким образом, здесь происходит отделение 'чистых' изменений от 'грязного моддинга', который также часто встречается в российских форках, использующих один или несколько следующих подходов к кодовой базе своего проекта:

  • Реализация моддинговых GTA: SA проектов внешним 'грязным' способом, как limit adjuster (fastman92 и т.д.)
  • Необработанная (raw) загрузка модифицированных данных GTA: SA & .IMG файлов, через распространение предварительно модифицированных установочных папок GTA среди игроков форк клиента. Тем самым полностью игнорируя MTA API для замены моделей и различных игровых процессов.
  • Различные грязные патчи, в широком смысле описанные в абзаце выше. Также включает в себя несоблюдение рекомендаций MTA по "Raw memory access" (необработанному доступу к памяти), найденных здесь: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips, что является значительным фактором риска для сценариев, не ожидаемых netc.dll (античитом), так как если он защищает от модификаций памяти, зная их происхождение, и вы просто поместите грязный 'writeProcessMemory' или memcpy в случайный .cpp файл, это вызовет нарушение. Это далеко не всё, и это плохой пример, но просто чтобы вы поняли, почему существуют несовместимости.


Получение максимального % античит-защиты

Поняв вышесказанное, а также то, что мы стараемся изо всех сил, так как такое использование в качестве "полного античита" для форков никогда не входило в наши планы, и что было бы трудно поддерживать пользовательские модификации каждого, вы можете понять, что мы не можем помочь вам выяснить, что является несовместимым сразу после того, как вы начнёте тестировать netc "с полным античитом" в своём форке. Поэтому вы сами должны либо отключить столько обнаружений, сколько требуется (если вы не можете их исправить - где 'не можете' является показателем отсутствия инженерного опыта), либо, что ещё лучше, разработать исправления, которые позволят вам избежать отключения слишком многих или любых типов обнаружения, тем самым максимизируя потенциальный % античит-функций.

Это означает, что без поддержки команды MTA вам предстоит выяснить, какие настройки/интеграции/несоблюдения MTA API/примеры проблем, описанные ранее в этой статье.. являются виновниками каждого конкретного типа обнаружения, который отправляет вам кики античита после добавления netc "с полным античитом" в ваш форк для тестирования. Мы советуем вам очистить свои интеграции, чтобы избежать необходимости много копаться вручную/выяснять виновника. Для этого обратите внимание на пункты маркированного списка из предыдущего абзаца. Однако, если же прямой виновник найден, приложив все свои усилия, вы должны без каких-либо указаний со стороны MTA придумать альтернативные (более чистые, более соответствующие рекомендациям MTA по написанию кода, API и структуре проекта.. следовательно, менее вероятно несовместимые с полным античитом и тем, что он ожидает) реализации проблемной настройки, найденной в кодовой базе вашего форка. Вы можете видеть, где возможность использовать 'полный античит для форков' становится скорее благосклонностью, чем данностью, особенно с тем состоянием кодовой базы, в котором многие форки, не начав свою разработку по сценарию 'полного античита', выросли, просто написав то, что работает для них, не учитывая такие аспекты. Общая картина того, почему мы не будем поддерживать процесс реинжиниринга, теперь должна быть ясна. Если вы не можете с этим справиться, либо наймите кого-то с большим опытом в компьютерных науках и инженерии, либо отключите больше типов обнаружения античита, и довольствуйтесь всем, что выше 15% обычного netc для форков, лучше что-то, чем ничего. Но мы не сможем протянуть руку помощи. Любое непонимание этих концепций указывает на отсутствие полноты разработчика (индивидуальных навыков, возможностей для роста) и не может быть отражено на разработчиках MTA.


Давайте перейдём к делу

Если вы считаете, что поняли все концепции, описанные в этой статье, вы можете приступить к внедрению "полного античита для форков":

СКАЧАЙТЕ: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll (для использования вместо "bdata/netc.dll" из стандартного mtasa-blue buildactions/install_data.lua) Обратите внимание, что версия netc.dll по указанной выше ссылке будет регулярно обновляться, чтобы предоставить форкам все античит-улучшения, поставляемые также и для официальной MTA. Поэтому рекомендуется регулярно получать обновления для вашего форка для обеспечения оптимальной безопасности & надёжности античита


[[{{{image}}}|link=|]] Примечание:
  • Важно: Начиная с июня 2023 года, вы должны извлечь все коммиты (получить все изменения) mtasa-blue (обновить до 1.6) и синхронизировать кодовую базу вашего форка, чтобы использовать последнюю версию netc, представленную по ссылке выше. Существуют несовместимые изменения, которые требуют обновления с обеих сторон. Предлагаемый netc модуль подходит для форка, основанного на MTA 1.6
[[{{{image}}}|link=|]] Примечание:
  • Важно: Вы сами несёте ответственность за добавление средства проверки целостности/подлинности файлов, так как очевидно, что поскольку игровые DLL собираются вами (а не нами), нет возможности внедрить такие уникальные DLL в наши внутренние контрольные списки netc, равно как и нет ничего в других модулях для проверки самого netc. Если вы не доработаете это, читер может просто заменить любой модуль или добавить читерскую полезную нагрузку (payload) с помощью редактирования PE, это самый большой фактор риска при использовании "полного античита для форков". Как далеко вы хотели бы зайти с проверкой файлов, например, решить усилить её в пользовательском режиме (usermode) (с heartbeat'ами или около того) или использовать собственный дополнительный античит-драйвер в режиме ядра (kernelmode), зависит от вас и уровня приверженности безопасности вашего проекта. Если всё, что вас волнует, это небольшая преграда в отношении читерства, вы можете использовать базовую проверку файлов (MD5/SHA256) для всех игровых модулей

Есть ещё много подобных узких мест, которые слишком сложны для простого объяснения, но основаны на принципе "ничто никогда не бывает на 100% безопасным", и многие из них относятся к мосту между официальной MTA и форками, использующими 'полный античит'. Также полезно поразмыслить над всем этим в целом: Команда MTA потратила годы на создание античит-технологии и предоставляет многое форкам, если они того пожелают, бесплатно. Рассматривайте это как основной слой античита, который уже защищает многое в GTA, мы помогаем вам не создавать такое огромное количество технологий самостоятельно. Теперь о том, что ещё вы делаете, например, видите это как основной слой, а затем также создаёте свой собственный дополнительный слой античита, возможно, даже на уровне новичка, технически понятном вашим разработчикам, не имеющим серьёзного опыта разработки античитов - это полностью зависит от вашей креативности и того, насколько серьёзно вы относитесь к своему проекту. Если вы хотите дополнить основной слой, предоставляемый нами, то можете это сделать.

- Замените netc.dll в вашем форк-проекте на вышеуказанный "поддерживаемый для форков" netc с полным античитом. - Убедитесь, что тип сборки в version.h изменён на UNSTABLE, согласно рекомендациям "массового потребления" для форков в комментариях: Shared/sdk/version.h. В противном случае, вы сведёте на нет все усилия по получению полной античит-защиты.

- Убедитесь, что вы обновили кодовую базу вашего форка до активной основной версии (для которой netc.dll), мастер-коммита mtasa-blue, по крайней мере до версии "Default", указанной на [1] как "Auto-update default" для последней основной версии, затем сопоставьте указанную ревизию с SHA1-хешем коммита с помощью этого инструмента: https://buildinfo.mtasa.com/index.php - это означает, что не следует использовать начальный выпуск (версию, которая имеет метку выпуска на github), потому что MTA использует модель "MTA как услуга", где игроки получают регулярные обновления, содержащие все основные изменения для оптимального качества и опыта использования новых функций. Последние выпуски netc.dll основаны на этом и могут требовать присутствия мастер-изменений.

- Для ваших выделенных серверов/узлов, к которым будут подключаться игроки, используйте эти net модули:
Linux x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.so (переименуйте в "net.so")
Windows x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.dll (переименуйте в "net.dll")
Никогда не используйте x86 сервер для вашего форка, это плохо по многим причинам. Такое не поощряется и не приведёт к хорошим результатам.

Давайте продолжим с настройкой клиента и 'полного античита'.

- Столкнитесь с некоторыми киками античита в вашем форк-клиенте, этап проб и ошибок начинается здесь. Теперь используйте предыдущие части этого руководства, чтобы либо отключить типы обнаружения античита с помощью disableac в mtaserver.conf, либо, что ещё лучше, потратьте больше сил разработчиков на правильное исправление & очистку ваших пользовательских реализаций, как советовали ранее, чтобы сохранить как можно больше % античит-защиты. Мы советуем не опускаться ниже 85% (как в примере с 'disableac' кодами: 5, 6, 21 было упомянуто, что это относительно 85% и то, что требуется большинству российских тяжёлых модифицированных форков для немедленного запуска и возможности вам подключиться).


Заключительные слова: всегда будет лучше не быть форком в первую очередь. Используйте официальный клиент MTA и просто создайте сервер, со временем со своим пользовательским лаунчером, который будет подключать непосредственно к вашему ряду серверов. Просто внесите все настройки, которые вам нужны (причина для создания форка), взяв за основу "upstream" и создайте PR, Pull request (пул-реквест), используя официальный репозиторий MTA https://github.com/multitheftauto/mtasa-blue, чтобы все выиграли, а вы соблюдали лицензию & не сталкивались с препятствиями, включая античит и приток новых игроков, которые возникают при создании форка. MTA обычно имеет 30000 игроков онлайн одновременно, что также является огромным притоком новых игроков для открытия своего сообщества. Лучше просто не быть форком, но если вам действительно нужно, эта страница является нашим активным взаимодействием с форками для получения лучшего уровня античит-защиты.

Мы создали этот вариант netc.dll "с полным античитом для форков" в ноябре/декабре 2022 года и опробовали практические результаты и некоторые специфические исправления для лучшей поддержки, с 2 крупнейшими российскими MTA форками, оба из которых готовятся выпустить обновление, включающее это в ближайшие несколько месяцев. Мы также взаимодействовали с разработчиками небольших форков, которые, однако, решили злоупотребить этим (а вместе с этим и нашим доверием), немедленно став токсичными и пытаясь продать netc модуль "с полным античитом", который мы им дали, что побудило написать и в спешке опубликовать эту вики-статью. Нехорошо, и, пожалуйста, не ведитесь на предложения от упомянутого круга токсичных разработчиков форков, пытающихся продать вам такой netc "с полным античитом", когда вы можете получить более новую версию из официального источника, от нас в этой статье. Работа над этой статьёй в контексте упомянутого инцидента обсуждалась в MTA development discord (приглашение: https://discord.gg/GNN6PRtTnu) в этом посте: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 и аналогично в основном, официальном MTA discord (приглашение: https://discord.gg/mtasa) в этом посте: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661