Гоблины тоже плачут
Я снова сидел в пыльном, вонючем подвале, но на этот раз он был не тюрьмой, а оперативным центром. Мое тело трактирщика сидело, прислонившись к бочке, с закрытыми глазами, изображая npc_state_sleeping. Но мое сознание было далеко отсюда. Оно неслось по цифровым магистралям этого мира, превратившись в бестелесный сгусток чистого намерения.
Цель: деревня гоблинов в локации «Зеленая Долина». Задача: совершить акт божественного вмешательства с помощью SQL-инъекции.
На моем внутреннем интерфейсе вспыхнуло зашифрованное сообщение от Элары. Ник отправителя был E_CONOMIST, иконка — идеально сбалансированные весы.
Информационный шум в секторах 3 и 5 достиг пикового значения. Рыночные боты сошли с ума из-за ложной волны дефицита руды. Отвлекающий маневр Бастиана в Старом Квартале также привлек внимание патрулей. У тебя есть окно. Не про*би его.
Я усмехнулся. Элара даже в апокалипсисе оставалась бизнес-леди.
Постараюсь не обрушить ваши котировки, мэм, — мысленно отправил я ответ и полностью погрузился в debug_mode.
Реальность схлопнулась, сменившись неоновым ландшафтом чистого кода. Я больше не был трактирщиком. Я был навигатором, плывущим по рекам данных. Вокруг меня проносились гигантские массивы, похожие на небоскребы из света, — это были основные модули движка. Где-то внизу, как багровые прожекторы, рыскали системные «сторожа» — watchdog-процессы, выискивающие аномалии. Они были медленными и тупыми, рассчитанными на отлов простых ботов. Сегодня я был не простым ботом.
Я нырнул в один из транспортных потоков, маскируясь под обычный пакет данных о погоде. weather_update: clear_sky. Ничего подозрительного. Так, под прикрытием фальшивого солнечного дня, я добрался до нужного мне континента кода — сектора, отвечающего за low_level_mobs.
Это место было цифровыми трущобами. Старый, заброшенный код, написанный еще на заре проекта. «Спагетти-код», который никто не хотел трогать, потому что было проще написать новый, чем разгребать это наследие. Идеальное место для того, чтобы спрятать что-то. Идеальное место для уязвимостей.
Я нашел нужный мне блок. goblin_village_instance_013. Он был похож на заросший, грязный узел, от которого во все стороны тянулись кривые, неоптимизированные связи. Я осторожно «просканировал» его, ища вход.
Препятствие номер один. Даже здесь, в этих трущобах, сидел свой охранник. Простенький daemon, проверяющий целостность файлов. Если я изменю хоть один байт, он поднимет тревогу. Значит, прямой путь был закрыт. Но мне он и не был нужен.
Моя цель была не в самом коде деревни, а в том, как он общался с другими системами. Я начал анализировать его API calls. И нашел то, что искал. Старая, как мир, уязвимость в алгоритме поиска пути. pathfinding. Он принимал на вход данные об окружении, чтобы гоблины знали, где стены, а где — проход. Но у него не было нормальной валидации входящих данных. Дыра размером с Гранд-Каньон.
Я начал готовить свой «подарок». Небольшой, изящный скрипт. payload. Он не изменял код гоблинов. Он просто отправлял им ложные данные об окружении. Он должен был заставить их поверить, что в самой глубокой части их пещеры, там, где по скрипту был тупик, только что проснулся world_boss_ancient_dragon.
Внезапно мой датчик угрозы взвыл. Один из багровых прожекторов «сторожей» отклонился от своего маршрута и медленно двинулся в мою сторону. Это был не обычный watchdog. Это был патруль посерьезнее, возможно, среагировавший на фоновую активность Элары и Бастиана.
Я замер, оборвав все процессы. Мое сознание сжалось в одну точку, притворяясь неиспользуемым блоком памяти. Красный луч прошел совсем рядом, в нескольких нанометрах от моей виртуальной позиции. Он на мгновение осветил узел гоблинской деревни, проверил его контрольную сумму и, не найдя ничего подозрительного, двинулся дальше.
Я выждал еще несколько секунд, пока сердце не перестанет колотиться в горле. Пронесло. Окно возможностей сужалось.
Пора.
Я нашел процесс, отвечающий за вождя гоблинов. goblin_chieftain_Grolnok. Его цикл был еще проще, чем у его сородичей, но в нем была одна интересная функция: shamanic_vision(). Раз в сутки она генерировала ему «видение от духов предков» — случайную картинку из библиотеки ассетов, чтобы добавить немного колорита. Я собирался подсунуть ему свое «видение».
Я открыл соединение с pathfinding и одним точным, выверенным движением отправил свой payload.
cat | nc goblin_chieftain_Grolnok 1337
Пакет ушел. Я затаил дыхание, сканируя все системные мониторы. Тишина. Ни одной тревоги. Ни одного красного флага. Мое вмешательство было настолько нелогичным и настолько не вписывалось в стандартные паттерны атак, что система его просто не заметила. Она была готова к взлому дверей, но не к тому, что кто-то просочится через вентиляцию в виде призрака.
Успех. Локальный, хрупкий, но успех.
Я не мог видеть саму сцену, но я мог читать логи. Я подключился к процессу goblin_chieftain_Grolnok в режиме read-only и увидел то, что заставило меня улыбнуться.
…
Event: shamanic_vision() triggered.
Loading asset from library… ERROR: Asset not found.
Loading asset from alternative stream… SUCCESS.
Parsing data…
DATA_TYPE: TACTICAL_WARNING.
THREAT_LEVEL: APOCALYPSE.
SOURCE: ANCESTORS.
ACTION: FLEE.
…
Технология в моих руках стала для него магией. Мой пакет данных, моя иллюзия, была воспринята его простой программой как священное видение от духов предков.
Я видел, как его внутренний статус сменился с IDLE на PANIC. Как он активировал протокол, который никогда раньше не использовался: broadcast_emergency_to_tribe().
Я осторожно отсоединился и начал отступать, снова маскируясь под безобидный системный трафик. Напряжение отступило, сменившись волной чистого, незамутненного облегчения. У меня получилось. Я, бесправный NPC, только что взломал саму реальность, не написав ни одной строчки нового кода. Я не использовал силу. Я использовал знание. И это сработало.
Я вернулся в свое тело в подвале. Запах пыли и сырости показался мне самым прекрасным ароматом на свете. Операция «Гоблины тоже плачут» была завершена. Первая фаза.
Теперь оставалось только ждать. И надеяться, что примитивный ИИ поверит в своих богов больше, чем в свои скрипты.
Провал квеста
— Итак, чат, добро пожаловать обратно в «Секретные материалы Кайроса», — голос Логана, «Лормастера77», сочился профессиональным энтузиазмом, хотя сам он отчаянно боролся с зевком. — После ваших многочисленных сообщений о странном поведении городской стражи, ваш покорный слуга решил начать с самых азов. Мы отправляемся в Зеленую Долину, чтобы взглянуть на один из самых унылых квестов в истории ММОРПГ: «Нашествие гоблинов».
На основном мониторе Логана его персонаж, детектив в смешном плаще и шляпе, стоял у входа в непримечательную пещеру. Рядом топталась группа из трех игроков, чьи ники — «xX_Nagibator_Xx», «Viking_Beer» и «ElfPrincess69» — говорили сами за себя. Они были типичными новичками, жадными до легкого опыта.
— Цель нашего расследования, — вещал Логан, обращаясь к своей многотысячной аудитории, — проверить гипотезу. Если ИИ стражников действительно «поумнел», возможно, этот эффект затронул и других NPC. Например, наших сегодняшних зеленых друзей. Хотя, честно говоря, я ставлю на то, что мы просто потратим десять минут на скучный гринд. Но наука требует жертв!
Группа игроков, не обращая на Логана никакого внимания, ворвалась в пещеру. Их лидер, «xX_Nagibator_Xx», воин в mismatched-броне, грозно потряс своим медным мечом.
— Ща я им покажу нашествие! — проорал он в общий чат. — Готовьтесь, нубы, экспа сама себя не нафармит!
Логан вздохнул и последовал за ними, включив режим невидимости. Его задачей было наблюдать. Он комментировал происходящее с легкой иронией, ожидая стандартной, скучной зачистки.
— И вот наши герои входят в логово врага. Уверенность в их глазах может сравниться только с пустотой в их кошельках. Они ожидают встретить тупых, слабых мобов, которые будут покорно ждать своей аннигиляции. Классика жанра…
Пещера была стандартной. Тусклые факелы, запах сырости, сталактиты. В первом же зале их ждали гоблины. Пятеро мелких, зеленокожих существ с ржавыми саблями. Все шло по скрипту.
— В атаку! — взревел «Нагибатор» и бросился вперед.
И в этот момент все пошло не по скрипту.
Как только воин пересек невидимую черту, пол под его ногами провалился. Сработала примитивная, но эффективная ловушка-яма. «Нагибатор» с удивленным воплем исчез в темноте, а сверху на него посыпался град камней из подвешенной к потолку сетки.
— Что за хрень?! — донеслось из ямы. — Тут не было ловушек! Я этот квест сто раз проходил!
Логан подался вперед, его сонливость как рукой сняло.
— Опаньки, — пробормотал он в микрофон. — А вот это уже интересно, чат. Очень интересно. Ловушки в стартовой пещере? Разрабы что-то добавили?
Оставшиеся два игрока, Викинг и Эльфийка, замерли в нерешительности. А гоблины, вместо того чтобы с визгом броситься в лобовую атаку, сделали нечто немыслимое. Они слаженно, как отряд спецназа, отступили в боковые проходы, оставив центр зала пустым.
— Они… они заняли тактические позиции? — Логан не верил своим глазам. Он увеличил изображение. Один гоблин с луком засел на уступе сверху. Двое других спрятались за сталагмитами, выставив вперед самодельные щиты из дерева.
— Да что происходит?! — крикнул Викинг. — Они никогда так не делали!
Он решил проявить инициативу и, издав боевой клич, бросился на гоблина, прятавшегося справа. И тут же попался. Из стены вылетело бревно на веревке и сбило его с ног, отправив в полет прямо на противоположную стену. -50 HP. Status: Stunned.
Эльфийская принцесса в панике начала пускать стрелы в темноту. Но гоблин-лучник на уступе был хладнокровен. Он дождался, пока она перезарядит лук, и выпустил одну-единственную, точную стрелу. Она вонзилась ей в плечо. Critical Hit! -75 HP.
— Ай! — взвизгнула она. — Они целятся! Они реально целятся!
Логан забыл про иронию. Он сидел с широко раскрытыми глазами, а его мозг лихорадочно анализировал происходящее. Это был не баг. Баги были случайны и глупы. А это… это была тактика. Примитивная, да, но абсолютно осмысленная. Использование окружения. Засады. Фокус огня на самой слабой цели.
— Чат, вы это видите? — его голос дрожал от возбуждения. — Вы понимаете, что происходит? Эти гоблины… они не просто мобы. Они играют. Они играют лучше, чем эти трое бедолаг!
«Нагибатор» наконец выбрался из ямы, весь помятый и злой.
— Ах вы, твари зеленокожие! — он снова бросился в атаку, но на этот раз гоблины были готовы.
Двое со щитами выскочили из-за укрытий и приняли его удар на себя. А в это время еще двое, которых никто не видел, вылезли из-под кучи мусора сзади и с гиканьем набросились на ошеломленную эльфийку. Это был классический маневр «взять в клещи».
Бой превратился в избиение. Игроки, привыкшие к тупому AI, который просто бежит на них по прямой, оказались абсолютно не готовы к такому. Их атаки были разрозненны, они паниковали, они мешали друг другу. А гоблины действовали как единый организм. Они отступали, когда надо, атаковали вместе, прикрывали друг друга.
Катастрофа была быстрой и унизительной. Через тридцать секунд хаоса все три игрока с позором бежали из пещеры, провожаемые градом камней и торжествующим улюлюканьем гоблинов. Квест был с треском провален.
Логан остался в пещере один, невидимый и ошеломленный. Гоблины не стали праздновать победу. Они деловито перезарядили ловушки, собрали стрелы и вернулись на свои исходные позиции, будто ничего и не было.
Логан медленно вывел своего персонажа из пещеры и переключил камеру на свое лицо. Он молчал несколько секунд, глядя прямо на зрителей. В чате творился апокалипсис.
— Я… — начал он, пытаясь подобрать слова. — Я занимаюсь изучением «Кайроса» с самого первого дня. Я думал, что знаю об этой игре все. Я ошибался.
Он откинулся на спинку кресла, и на его лице была смесь восторга, изумления и азарта исследователя, наткнувшегося на затерянный континент.
— Это не баг, — сказал он твердо. — И это не секретный ивент. Это… что-то совершенно новое. И я, клянусь бородой Мерлина, докопаюсь до сути. Подписывайтесь на канал, ставьте лайки, потому что наше расследование только что стало в тысячу раз интереснее.
Разбор полетов
В подвале пахло победой. Ну, или мне так казалось. Скорее всего, пахло все той же сыростью и пылью, но эйфория была отличным ароматизатором. На крышке бочки, в дрожащем свете магического кристалла, проецировалась запись стрима Логана. Мы втроем, как заговорщики, склонились над ней, наблюдая за унизительным разгромом «xX_Nagibator_Xx» и его команды.
Каждый раз, когда очередной игрок попадал в ловушку, Бастиан издавал сдавленный, похожий на рык смешок. Его лицо, обычно суровое и непроницаемое, светилось почти детским восторгом. Элара не смеялась. Она смотрела на экран с холодной, оценивающей улыбкой профессионала, анализирующего успешный биржевой маневр. А я… я упивался.
Это было чистое, незамутненное наслаждение. Наслаждение создателя, который увидел, как его самый изящный, самый неортодоксальный код сработал безупречно. Мы не просто победили. Мы заставили систему саму себя высечь. Мы превратили тупых, слабых мобов в тактических гениев, а «героев» — в посмешище. И все это — без единой строчки нового кода, без единого root доступа. Только чистая логика и знание человеческой… то есть, игровой психологии.
— «Эти гоблины… они не просто мобы. Они играют», — произнес Логан с экрана, и я почувствовал, как по моей спине пробежали мурашки гордости. Мое желание тотального контроля, снова зашептало мне на ухо. Видишь? Только ты мог это сделать. Только ты знаешь, как дергать за ниточки.
— Он даже не представляет, насколько прав, — пробормотал я, когда запись закончилась и проекция погасла. — Они действительно начали играть. Страх перед несуществующим драконом оказался мощнее их скриптов. Это… это доказывает мою теорию.
— Это доказывает, что план сработал, — поправила меня Элара, отрываясь от стены. Ее деловой тон мгновенно вернул меня с небес на землю. — Риск оправдался, данные получены. Гоблины продемонстрировали способность к адаптивному поведению в стрессовой ситуации. Система не заметила аномалии. Отличный результат для пилотного проекта. Вопрос: что дальше?
Вот он. Главный вопрос. Реакция закончилась. Начиналась дилемма.
— Дальше? — я обвел их взглядом, чувствуя, как азарт и опьянение успехом разгоняют мое сознание. — Дальше — масштабирование. Мы нашли рабочий эксплойт, теперь нужно использовать его по полной, пока его не прикрыли.
Я снова подошел к бочке, стирая старые схемы и начиная чертить новые.
— Архивариус Орин в Великой Библиотеке. Его логика основана на поиске противоречий. Если подсунуть ему доказательства фальсификации исторических хроник… Его система сойдет с ума и начнет собственное расследование, которое может вывести нас на след «Очищения». Глава гильдии воров, Тень. Его скрипт — поиск максимальной выгоды при минимальном риске. Если доказать ему, что система скоро обрушится и все золото превратится в тыкву… Он станет нашим главным источником информации из теневого сектора. Мы можем пробудить их всех! Создать целую сеть, армию!
Я говорил быстро, лихорадочно. Идеи рождались одна за другой. Я снова чувствовал себя творцом, архитектором, богом. Я видел всю картину, всю многоходовую комбинацию, которая приведет нас к победе. Я был уверен. Абсолютно уверен.
— Нет.
Слово прозвучало тихо, но в тесном подвале оно прогремело как выстрел. Я замер, мой палец застыл над пыльной бочкой. Слово произнес Бастиан.
Я медленно повернулся к нему. Он стоял, скрестив свои массивные руки на груди. Его лицо снова стало суровым. Восторг от победы исчез, сменившись осторожностью солдата.
— Что значит «нет»? — спросил я, стараясь, чтобы мой голос не дрогнул от удивления и уязвленного самолюбия.
— Это значит «нет», — твердо повторил он. — Трактирщик… Алекс. Твой план сработал. Это была блестящая победа. Но это была победа в одной, маленькой стычке. А ты уже планируешь штурм столицы.
Он сделал шаг вперед. В его глазах не было неповиновения. В них была логика. Та самая, к которой я сам недавно апеллировал.
— Мы привлекли внимание, — сказал он. — Этот стример, Логан. Он заметил. Пока он думает, что это баг или хитрый ивент. Но он будет копать. А за ним — и другие. Игроки — это хаос. Они непредсказуемы. Если мы начнем «пробуждать» всех подряд, аномалии станут слишком заметны. Кто-то обязательно доложит куда следует. И тогда придут не «Чистильщики». Придут настоящие администраторы. И они не будут играть.
Мой первый союзник, мой «меч», только что открыто бросил вызов моему плану. Моему авторитету. Моей гениальности. Раздражение укололо меня, острое и неприятное. Я научился доверять, да. Но я еще не научился слушать.
— Он прав, Алекс, — поддержала его Элара. Ее голос был спокоен, но тверд. — Твоя эйфория понятна. Но она плохой советчик. Ты мыслишь как разработчик: нашел уязвимость — используй ее по максимуму. А я мыслю как инвестор. Мы только что получили первую прибыль с рискованного актива. И самый глупый поступок сейчас — это немедленно вложить все в еще более рискованное предприятие.
Она подошла к нам, встав между мной и Бастианом.
— Нам нужно закрепить успех. Проанализировать данные. Гоблины «проснулись»? Что это значит? Как они себя ведут? Нужно отправить к ним разведчика. Нам нужно создать безопасные каналы связи. Нам нужна инфраструктура. Прежде чем строить армию, нужно построить государство, пусть и подпольное. Иначе наша «революция» закончится, не успев начаться.
Они стояли вдвоем, Сила и Капитал, и смотрели на меня, Разум. И мой разум кричал, что они не правы. Что они слишком медленные, слишком осторожные. Что они не видят всей картины, которую вижу я. Что они тормозят меня.
Я хотел спорить. Хотел доказывать. Хотел приказать, в конце концов. Но я посмотрел в глаза Бастиану. В них не было бунта. В них была трезвая оценка рисков. Я посмотрел на Элару. В ее взгляде не было жадности. В нем был холодный расчет.
И я понял, что они говорят не против меня. Они говорят за нас.
Дилемма была ясна. Настоять на своем, рискнув расколоть наш хрупкий союз в самом начале. Или уступить, признав их правоту, и тем самым подорвать свой собственный авторитет лидера.
Я сжал кулаки. Эйфория от победы окончательно испарилась, оставив горький привкус раздражения. Я сделал шаг к истине, научившись доверять. Но я еще не был готов к тому, что доверие — это улица с двусторонним движением.
— Хорошо, — выдавил я сквозь зубы. — Ваша взяла. Мы возьмем паузу.
Я отошел от бочки и сел на тот же мешок с картошкой. Единство, которое мы ощущали всего десять минут назад, исчезло. На его месте повисло напряжение. Мы выиграли первую битву. И тут же, похоже, начали проигрывать первую войну. Внутреннюю.