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

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

Предисловие

Версия игры 1.12.2 ядро Paper

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

Люди платят за вход без очереди 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 тысяч баз подвержены атаке

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

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

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

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


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

Комментарии (10)


  1. segment
    07.01.2023 16:46
    +1

    Можете, пожалуйста, объяснить простым языком для тех кто не играл в эту игру?


    1. Tungsten017 Автор
      07.01.2023 16:50
      -2

      Середина статьи-общий принцип работы:

      Боты запрашивают координаты матриц прогрузки игры и отправляют результаты перемещения врагов и их складов ценных вещей


      1. segment
        07.01.2023 18:32

        То есть в протоколе есть информация о наличии других игроков в доступной зоне, но как ее достают? Есть ли защита от подобного или на уровне клиента это нерешаемая задача?


        1. Tungsten017 Автор
          07.01.2023 18:44

          У ядра Paper MC вышло обновление с фиксом


          1. segment
            07.01.2023 18:58
            +1

            Как это пофиксили?


            1. Tungsten017 Автор
              07.01.2023 19:19

              Закрыли возможность отправлять запрос за пределы прогрузки чанков бота, а чанки бота и так прогружены


    1. mambet
      07.01.2023 18:30
      +6

      Да понимаете, в чём проблема, тут и тем, кто в эту игру играет не очень понятно :(


      1. vanxant
        07.01.2023 18:55
        +1

        Как я понял, тырили чужие вещи и продавали за реальные деньги.


  1. Vindicar
    07.01.2023 17:20
    +18

    Статья - поток сознания. С игрой знаком не понаслышке, но с трудом понял, о чем вообще речь.


  1. MikerSa
    07.01.2023 19:16

    Это гениально, зря пофиксили