Существует множество модифицированных клиентов Discord, позволяющих настраивать его внешний вид или добавлять нужные функции. Однако некоторые плагины способны разблокировать функциональность, требующую платной подписки на Discord Nitro. Как это возможно? Discord разработан на основе Electron — фреймворка, позволяющего создавать кросс-платформенные приложения при помощи веб-технологий. Это значит, что приложение работает внутри веб-браузера, как любой веб-сайт. По сути, Discord — это окно Chromium, что позволяет открыть инструменты разработчика. Однако эта функциональность по умолчанию отключена, так как аккаунты многих пользователей были скомпрометированы копированием зловредных команд, переданных им злоумышленником при помощи социального инжиниринга. Но если вы осознаёте риски, то можете включить инструменты разработчика, добавив следующий параметр в файл конфигурации, находящийся по адресу %appdata%/discord/settings.json После этого достаточно просто нажать ctrl + shift + i, чтобы открыть консоль разработчика. Чтобы оптимизировать первоначальную загрузку приложения, код разделён на множество блоков, которые могут загружаться параллельно или по необходимости (ленивая загрузка) при помощи функции разделения кода из Webpack. Все загруженные блоки (chunk) хранятся в переменной webpackChunkdiscord_app: Если необходимо исполнить код, использующий переменные Discord или вызывающий его функции, то необходимо вставить код в эту переменную следующим образом: Переменная a.c — это объект, содержащий все модули. Каждый модуль выглядит так: То есть можно выполнить поиск функций из разных модулей JavaScript. Например, таким образом можно найти и вызвать функцию getCurrentUser(). Наконец, мы можем изменить поведение функции, просто заменив её. Теперь у нас есть все необходимые знания для исследования кода Discord и внесения в него непосредственных модификаций. Всё из представленного ниже чётко противоречит условиям пользования Discord и может привести к бану вашего аккаунта. Действуйте на собственное усмотрение. Есть две интересные функции canStreamMidQuality и canStreamHighQuality, проверяющие текущий уровень подписки пользователя. Эти функции выполняются непосредственно перед отображением экрана, который позволяет пользователю выбрать качество демонстрации его экрана. Мы можем модифицировать возвращаемые значения следующим образом: В результате этого мы можем выбрать демонстрацию экрана с исходным разрешением и 60 FPS, даже если вы не подписаны на Nitro. Похоже, в настоящее время Discord не проверяет на своих серверах, соответствует ли поток критерию пользователя без подписки. Однако он, скорее всего, может это определять, потому что Discord не использует сквозное шифрование. В этой статье говорится, что Discord уже изучает аудио- и видеоконтент, передаваемый пользователями. Я не удивлюсь, если в будущем сервис решит также выполнять серверные проверки перед тем, как разрешить демонстрацию экрана. Аналогично функциям, управляющим качеством демонстрации экрана, существует функция, возвращающая информацию о том, может ли пользователь применять темы, предоставляемые подпиской Discord Nitro. Она разблокирует кнопки, позволяющие выбирать разные платные темы. Однако тема применится только на долю секунды, а затем вернётся к одной из стандартных тем. Так происходит, потому что Discord пытается сохранить данные о том, что пользователь изменил тему, но сервер сообщает, что у пользователя не должно быть возможности выбирать платную тему. Когда клиент получает ответ от сервера, он мгновенно возвращается к одной из стандартных тем. Чтобы заблокировать синхронизацию тем, необходимо пропатчить другую функцию: Но после этого мы наконец можем изменить тему. Discord не сможет заблокировать эту возможность. Управление темами полностью происходит на стороне клиента, и всегда можно вручную изменить CSS, чтобы получить нужный стиль. Этот фрагмент кода упрощает развёртывание всех показанных хаков, но перед внесением изменений в клиент Discord или использованием модов важно сохранять бдительность. Discord в любой момент может забанить аккаунты, нарушающие условия пользования, а исполнение ненадёжного кода с доступом к аккаунтом может быть достаточно рискованным занятием. Наконец, для справки приведу исходный код различных плагинов для мода клиента Discord, в которых используются показанные в этой статье техники. Vencord: https://github.com/Vendicated/Vencord/blob/main/src/plugins/fakeNitro.ts Replugged: https://github.com/cafeed28/replugged-nitrospoof/blob/main/src/index.ts BetterDiscord: https://github.com/riolubruh/YABDP4Nitro/blob/main/YABDP4Nitro.plugin.js  Переводчик-фрилансер