XMC — Minecraft Finalmask
XMC (X Minecraft) — новый finalmask в Xray-core, замерджен 11 июля 2026 (PR #6210). Автор: Exclude0122. Смысл: маскировать xray-трафик под настоящий протокол Minecraft Java Edition, чтобы DPI видел на проводе не «подозрительный SS/TLS», а честный игровой сервер.
Зачем это придумали
Мотивация автора: в Китае на «средних» магистралях появились устройства детектящие Shadowsocks. HTTP и TLS без ICP-лицензии заблокированы. А поднять MC-сервер и гонять по нему трафик — «ну игрок исследует мир, много данных, что тут такого» 😁.
Что такое finalmask
Finalmask — это слой поверх транспорта в Xray-core. Он не заменяет транспорт (TCP/xhttp/grpc/ws), а оборачивает готовый поток в маску постороннего протокола. Соседи по семье: header-custom (произвольный заголовок), xmc (Minecraft).
Важно: finalmask не защита. Криптографическая стойкость XMC — уровня MC (RSA 1024 + AES/CFB8), слабая. Если нужна безопасность — сверху ставится TLS, VLESS encryption или другой безопасный слой. XMC решает только задачу «выглядеть как MC на проводе».
Как выглядит трафик
XMC точно повторяет handshake настоящего Minecraft (Protocol version 775, MC 26.1):
- C → S Handshake: клиент говорит «хочу зайти на сервер», указывает hostname (аналог SNI, можно указать
mc.hypixel.net), порт, intent=2 (login). - C → S Login Start: username (по умолчанию
Dream) + UUID (генерируется). - S → C Encryption Request: сервер шлёт свой RSA public key (сгенерирован из пароля) + случайный verify token.
- C → S Encryption Response: клиент шифрует симметричный AES-ключ и verify token+password публичным ключом сервера.
- После обмена — включается AES/CFB8, и через него идёт настоящий xray-трафик.
Со стороны DPI это выглядит как классический вход игрока на MC-сервер, дальше — зашифрованный игровой трафик. Ни SS, ни TLS, ни ClientHello.
Аутентификация
Клиент и сервер разделяют один password. Из него детерминированно генерируется RSA-пара:
- Сервер использует password для генерации своего RSA privateKey.
- Клиент из того же password вычисляет ожидаемый publicKey и сверяет с тем что прислал сервер — это pin публичного ключа, защита от MITM (в рамках слабого RSA).
- В Encryption Response клиент дополнительно шлёт password вместе с verify token — сервер проверяет и либо принимает, либо отвечает штатным «
multiplayer.disconnect.authservers_down» и обрывает соединение.
Т.е. неправильный ключ выглядит как обычный сбой авторизации MC — не как «прокси-сервер вас послал». Активному проберу не за что зацепиться.
Конфигурация
Клиент:
"finalmask": {
"tcp": [
{
"type": "xmc",
"settings": {
"usernames": ["user1"],
"password": "13f462cb64c72770",
"hostname": "mc.hypixel.net"
}
}
]
}
Сервер:
"finalmask": {
"tcp": [
{
"type": "xmc",
"settings": {
"password": "13f462cb64c72770"
}
}
]
}
Параметры клиента:
password— общий с сервером. Из него выводится RSA-ключ.usernames— список «игроков». По умолчанию одинDream.hostname— что подставлять в MC handshake как адрес сервера. Аналог SNI. Можно указывать посторонний домен (mc.hypixel.net) чтобы выглядело как игрок ходит на публичный сервер.
Особенности и ограничения
- Только TCP. UDP-варианта пока нет.
- Не безопасность. MC-крипта слабая — если поверх нужна секретность, добавляй TLS или VLESS encryption.
- Не защита от продвинутого DPI. Если детектор будет проверять timing, размеры пакетов, реальную playability — XMC не пройдёт. Он защищает от простых сигнатурных детекторов SS/TLS.
- Fallback не реализован. Если клиент прислал неверный пароль, соединение закрывается, а не проксируется на настоящий MC-сервер (в отличие от REALITY).
- Игровые акселераторы. Автор сомневается что XMC пройдёт через китайские MC-акселераторы — они обычно перехватывают процесс
java.exe, а не Xray. - Не порт 25565. Никто не мешает поднять на любом порту — MC-клиент указывает порт вручную, DPI на нестандартном порту не насторожится больше, чем на стандартном.
Сравнение с REALITY
Идейно XMC похож на REALITY: тоже мимикрия под легитимный протокол, тоже handshake с публичным ключом. Но:
- REALITY маскируется под TLS к настоящему сайту-донору (перехват chi-hello). XMC мимикрирует под MC, без донор-сервера.
- REALITY использует X25519 + AEAD (крипто-стойкий). XMC — RSA 1024 + AES/CFB8 (криптографически слабый), защиты за счёт стойкости нет.
- REALITY имеет fallback на настоящий сайт при ошибке. XMC — нет.
- REALITY — уровень security (безопасность). XMC — уровень finalmask (только маскировка).
Где брать
- Xray-core PR #6210 — merged.
- Доступно с версии Xray-core, включающей merge (после 11 июля 2026).