Эксплойт «No comments» — самый серьёзный чит Minecraft

Кто владеет информацией, тот владеет миром. (Натан Ротшильд).

Данный эксплойт не даёт преимущества нечестным путём в самой игре, он предоставляет информацию о самой игре, то что обычному игроку знать не положено.

Предисловие

Версия игры 1.12.2 ядро Pape.

Псевдоанархия на сервере 2Tools2Builders (2b2t): почти любую нужную вещь в интернете можно купить в размере ~1728 (абсолютно одинаковых) для игры на сервере всего за 1~2$. Представьте, что центральный гектар в мире это пустота и случайно висящие блоки в ней: от кубов(1×1м) камня до разлитой магмы, воды и множества всякой фигни

Эксплойт «No comments» — самый серьёзный чит Minecraft

Люди платят за вход без очереди 20-60 человек за 20$ в месяц, чтобы попасть на сервер, миру которого более 12 лет и весит более ~14 терабайт и один админ, оплачивающий расходы сервера, закрывающий некоторые читы и недовольных по самым разным причинам.

К нечестной игре отношение на сервере положительное, если оно не наносит вред серверу, в противном случае аннулирование приоритетной очереди и бан.

Главная идея

Когда игрок ударяет по блоку, игра логгирует тип блока, который ударили, наименование блока, его состав/тип(земля, золото, вода…) и находится ли в зоне прорисовки какого-то игрока.

В игре блоки объединены в зоны взаимодействия-чанки:р азмеры одного чанка — 16 блоков в ширину, 16 блоков в длину и ~384 блока в высоту (зависит от версии), что составляет 98 304 блока. При прогрузке новой области карты, генерируется и становится активным 441 чанк вокруг игрока, или больше, если была установлена дальность прорисовки свыше 10 чанков.

Пример чанка
Пример чанка

Бот (находясь на игровом сервере) может отправить запрос вне своей зоны прорисовки/прогрузки, получить информацию о блоке и узнать есть ли игрок в определённом чанке и если да, то локализовать зону местоположения игрока. Можно следить за игроками, что является классным стратегическим преимуществом..

Все передвижения игрока пишутся в треки. Трек в данном контексте это передвижение игрока с момента обнаружения до момента потери с радара.

Спиральный вид поиска

  • Клетки — чанки

  • Зеленые границы — зона блоков-«онлайн» для игрока и бота

  • «Bot»— центр спирали, не местоположение аккаунта бота

  • Красные цифры — радиусы чанков относительно игрока

  • Применение — общий поиск игроков

  • Ссылка на модуль

в действительности радиус прогрузки чаще более 10 чанков
в действительности радиус прогрузки чаще более 10 чанков

Поиск Монте-Карло (фильтр частиц)

  • Точное определение местоположения медленных игроко.

  • Преследование определенных игроков

  • Поиск баз и часто-посещаемых мест

  • Ссылка на модуль

Кластерный метод поиска

Вездесущий контроль

Если бот следит за игроком, и тут он резко пропадает с «радара», но от сервера никто не отключился. Игрок решил сменить мир сервера: у игры есть миры.

"Верхний мир"
«Верхний мир»
Мир "Край"
Мир «Край»
Нижний мир (соотношение к "Верхнему миру" 1 к 8)
Нижний мир (соотношение к «Верхнему миру» 1 к 8)

Для того, чтобы не потерять игроков приходилось следить постоянно за Верхним миром и Нижним График в виде событий-проверок

Если игрок обнаружен и бегает в одних и тех же чанках на протяжении 90 минут бот начинает запрашивать части 9×9 из чанка вокруг игрока и искать атрибуты дома или хранилища.

Тепловая карта (след) «Нижнего» мира

от -245k до 245k по оси X
от -245k до 245k по оси X
Код создания картинки
public static void makeHeatmap(int radius) throws Exception {
    Scanner scan = new Scanner(new File("/Users/leijurv/Downloads/heatmap_overworld_full.csv"));
    // from -radius to +radius-1
    BufferedImage output = new BufferedImage(radius * 2, radius * 2, BufferedImage.TYPE_BYTE_GRAY);
    WritableRaster raster = output.getRaster();
    SampleModel model = raster.getSampleModel();
    DataBuffer buffer = raster.getDataBuffer();
    for (int x = 0; x < 2 * radius; x++) {
        for (int y = 0; y < 2 * radius; y++) {
            model.setSample(x, y, 0, 255, buffer);
        }
    }
    int i = 0;
    while (scan.hasNextLine()) {
        if (++i % 1000000 == 0) {
            System.out.println(i);
        }
        String line = scan.nextLine();
        String[] split = line.split(",");
        int chunkX = Integer.parseInt(split[0]);
        int chunkZ = Integer.parseInt(split[1]);
        int imageX = chunkX + radius;
        int imageY = chunkZ + radius;
        if (imageX < 0 || imageX >= 2 * radius || imageY < 0 || imageY >= 2 * radius) {
            continue;
        }
        int weight = Integer.parseInt(split[2]);
        int color = 255 - (int) (50 * Math.log(weight)) - 50;
        if (color < 0) {
            color = 0;
        }
        if (color > 255) {
            color = 255;
        }
        model.setSample(imageX, imageY, 0, color, buffer);
    }
    File o = new File("/Users/leijurv/Downloads/heatmap_overworld_full.png");
    ImageIO.write(output, "png", o);
}

Любопытные факты

Был игрок, который догадался о существовании эксплойта и обвинил создателей чита, но ему не поверили, а создатели отправляли ему сообщения для разжигания паранойи с содержанием символов в виде азбуки Морзе: ссылка на модуль

С июля 2018 года по август 2019 года и с марта 2020 года по июль 2021 года в радиусе несколько миллионов блоков от центра верхнего мира более миллиона редких баз и складов, в том числе и хранилища магазинов были в базе Postegre (1,7 терабайт и 13,5 биллионов строк)

  • более 200 миллионов единиц вещей разграблено/уничтожено

  • более 300 тысяч игроков записаны в базу данных

  • более 15 тысяч баз подвержены атаке

Чтобы можно было отправлять запрос на «онлайн» чанка — сервер пришлось «уронить» десятки раз для введения ограничений на проверку

Ссылка на сам проект

Подробное объяснение

Название эксплойта выбрано для сохранения отстраненности от событий


С Новым Годом!

 

Источник

Читайте также