Несколько секунд я просто вглядывался в хаотический набор символов и выводы системы о сбоях. И вдруг… что-то во мне щёлкнуло. Я ощутил лёгкое покалывание где-то в районе шеи, будто мимолётный удар тока. Тот самый зуд, который я иногда ловил, когда просматривал наши алгоритмы. Но на сей раз всё было ярче.
Код перестал быть просто текстом на экране: я видел структуру, видел, как вирус перемещался, как он перекраивал функции, подменял сигнатуры. И, что самое главное, я видел точки уязвимости, через которые его можно было остановить.
— Макс, — тихо сказал я. — Дай-ка мне минуту.
Он отодвинулся, глядя на меня с немым вопросом: «Ты что задумал?». Но я не стал ничего объяснять, просто велел:
— Открой вот этот модуль. Видишь функцию расшифровки маг-объектов?
— Ну… да, вижу, — Макс кликнул по строке, на экране открылся фрагмент кода.
— Смотри, здесь нужно изменить логику. Пусть наша функция не просто анализирует сигнатуру, а генерирует случайный магический ключ при каждом запросе.
— Это зачем? — Макс приподнял брови. — Ведь это всё равно…
— Делай, — перебил я, чувствуя прилив странной уверенности. — Потом увидишь. Сейчас ещё вот эти три строчки — нужно передвинуть в другой блок.
Макс видел, что я говорил уверенно, и принялся быстро печатать. Я комментировал:
— Окей, хорошо, теперь перенеси вот эту команду внутрь цикла. Да-да, вот туда, где мы отслеживаем входящие сигнатуры. Ещё поставь проверку на корневой доступ, но с дополнительным флагом, чтобы вирус думал, что всё ок.
Я действительно видел путь — точно знал, куда вставить проверку, чтобы взять вирус в ловушку и направить в тупиковый блок, где он начнёт сам себя разъедать. Мой мозг работал, как компьютер: я находил уязвимости и затыкал их.
— Тим, — прошептал Макс, не отрывая глаз от экрана, — как ты это понял?
— Я не знаю, — ответил я, и это была правда. — Просто вижу.
За нашими спинами сгрудились все, кто мог оторваться от паники. Лёха, Гоша, Зу, Алла, Даша, Мила и даже несколько ребят из Аркадии. Они смотрели, как мы редактируем код — точнее, как я указывал, а Макс печатал, при этом я чувствовал некую вибрацию в воздухе.
Похоже моя «сверхспособность» буквально ворвалась в реальность. Я будто видел нити магической структуры, понимал, как вирус думает и где ему перекрыть воздух.
Минут пятнадцать мы с Максом писали кодовые заплатки в бешеном темпе. Иногда Макс успевал спросить «Тим, а зачем этот костыль?» или «Не ломает ли это совместимость с базой?», но я отсекал сомнения:
— Давай, давай, печатай! Потом разберёмся, лишь бы вирусу поставили заслон.
Затем подключился Гоша, который отлавливал мелкие синтаксические ошибки, и Зу, который параллельно перестраивал настройки брандмауэра. Я выдавал подсказки направо и налево, временами соображал быстрее, чем мог сформулировать вслух. Внутри всё пылало от напряжения, но и заряжало адреналином.
Через полчаса неистовой работы мы выдохнули. Макс нажал «развернуть» и заглянул в логи. Все наши «заплатки» залились в основную систему, и оставалось лишь ждать — сожрёт их вирус или подавится. Мы затаили дыхание.
— Работает⁈ — Зу широко открыл рот. — Ты хочешь сказать…
Макс быстро переключился на статистику нагрузки:
— Смотри, — произнёс он, — вирус отключён. Тот код, который он раньше использовал для размножения, теперь не работает — мы отрезали пути.
Мила, которая обычно была молчалива, вскрикнула:
— Оно оживает! Сервер отвечает!
Буквально за пару минут графики на мониторе стали приходить в норму. А ведь только что мы считали, что всё: капут, проект в мусорке. А теперь сервис снова шевелится.
— Тим, ты колдун! — выдохнул Макс, глядя на меня. — Я программагист с десятью годами стажа, но такой хардкорной фиксы я не встречал. Как ты вообще это видел?
Я пожал плечами, чувствуя, как меня внутри распирает от гордости и облегчения:
— Да я же говорил, у меня чутьё.
Народ зааплодировал. Я не шучу, прямо в офисе — крики «Ура!», «Живём!». Даже из ХексПэй прибежали двое, спрашивая, как мы смогли убить этого монстра. А я внутренне понимал: видимо, мой странный дар действительно растёт и крепнет. Кто бы мог подумать, что я стану ещё и спасителем кода, а не только управленцем.
Я оглядел горящий энтузиазмом опенспейс:
— Так, народ, не расслабляемся! Вирус остановили, но теперь надо поднимать коммуникации. Зу, помоги Максу настроить новую защиту, чтобы в следующий раз, если они снова попытаются, столкнулись с нашей суперкрепостью. Гоша, Лёха — займитесь аналитикой, соберите статистику, сколько у нас отток, и что можно предложить пользователям, чтобы они вернулись. Может, врубим спец-акцию «Вернись в МагНет и получи премиум-стикеры».
— Стикеры? — переспросил Гоша, скептически приподняв бровь.
— Ну или что-нибудь в этом духе, — отмахнулся я. — Главное, заманить.
— Понял, сделаем, — Лёха помахал рукой и бросился к своему столу.
Я приблизился к Максу, похлопал его по плечу:
— Эй, боец, ты как?
— Норм, — отозвался он, теряя напряжение с лица. — Честно говоря, на секунду я уже думал, что всё — конец.
— Рад, что мы не сдались, — сказал я. — И спасибо, что печатал, как машина. Без тебя я был бы как глухой дирижёр без оркестра.
— Да это тебе спасибо, — Макс усмехнулся. — Если честно, я впервые видел код настолько чётко. Раньше мне всегда приходилось полдня тестировать перед развертыванием. А тут — бах-бах — и за полчаса в продакшене.
— Ну что ж, — я расплылся в ухмылке, — значит, это только начало. Дальше будет ещё круче.
Мы обменялись коротким рукопожатием, левыми руками, ибо правые ещё побаливали после нашего «кровного ритуала». В этот момент я заметил, как в дверях офиса появилась Дина.
Девушка увидела меня, молча кивнула в сторону коридора: мол, «Тим, нам нужно поговорить». Я понял, что, вероятно, она пришла с ответом на моё предложение о слиянии Ауреи с нашим холдингом.
Мы отошли в сторону от громкого опенспейса, в небольшой уголок рядом с кулером, где обычно народ отдыхал с чашкой чая. Я заметил, что Дина смотрит на меня уже не так настороженно, как раньше. Скорее, с любопытством и лёгким восхищением.
— Привет, — сказал я, стараясь выглядеть дружелюбно. — Рада, что ты пришла именно сейчас — у нас тут лихой день.
— Да, я слышала, — кивнула она. — Видела, что у вас всё было «в оффлайне», но потом вроде заработало. Вы, похоже, отразили атаку?
— Да, — я усмехнулся. — Полдня паники, и вот мы снова на коне. Всё по классике магтех-проектов.
Дина улыбнулась, потом коротко вздохнула:
— Тим, я не хочу тянуть. Я принимаю твоё предложение. Согласна встать под флаг МагНет и войти в ваш холдинг, или как там вы хотите всё провернуть.
— Серьёзно? — я расплылся в радостной ухмылке. — Отличные новости! Добро пожаловать в команду.
— Надеюсь, не пожалею, — призналась она с полуулыбкой, — но, глядя на вашу сплочённость и энергетику, я решила, что лучше идти вместе, чем пытаться одной плавать в этом бешеном океане.
— Правильный выбор, — сказал я. — Я не сомневаюсь, что вместе мы вырастем на порядок быстрее. Сейчас у нас большие планы, мы переезжаем в новый офис, там будет место и для тебя, и для твоей команды.
— Ого, — удивилась Дина, — так быстро?
— Ну, мы в стадии активного роста, — ответил я, пожимая плечами, — да и наш нынешний опенспейс уже не тот уровень. В общем, готовься к переезду и совместной работе. Подробности сделки утрясём позже — я всё оформлю с юристами и вышлю тебе драфты.
— Поняла, — кивнула она. — Буду ждать.
Мы пожали друг другу руки: я ещё успел заметить, что бинт на моей ладони вызвал у неё вопросительный взгляд, но она не стала спрашивать. Я лишь усмехнулся про себя: «лучше и не знать».
Спустя час, когда в офисе немного улеглась суматоха, я пошёл к Гео. Он стоял возле окна, глядел, как под нашими окнами снуют люди с кофе, курьеры и кучи машин.
— О, Тим! — Гео повернулся ко мне и улыбнулся. — Ну ты дал, я уже думал, всё пропало. Сижу, понимаешь, готовлю прощальную речь на случай кончины проекта, а тут бах — и всё наладилось!
— Да уж, не пришлось сочинять некролог, — усмехнулся я. — Но расслабляться рано, мы ещё далеко не на вершине.
— Это верно, — согласился Гео, — нам нужны инвестиции. Как насчёт второго раунда? Я же говорил, что у нас есть необходимость привлечь средства, чтобы укрепить позиции и масштабироваться.
— Слушай, — я устало потер шею, — именно сейчас самое время обговорить цифры. Как у тебя с оценкой нашей стоимости?
Гео достал планшет, быстро что-то прокрутил и показал мне несколько графиков. Я увидел там сумасшедшую кривую прогноза, уходящую ввысь.
— Мои аналитики считают, что МагНет за пару лет может вырасти до двухсот миллиардов рублей. Значит, уже сейчас мы можем прикинуть, что твой стартап стоит весьма прилично.
— И во сколько конкретно ты нас оцениваешь? — уточнил я, прищурившись.
— Думаю, можно говорить о раунде в районе 300 миллионов за 10% компании, — Гео кивнул, подтверждая свои слова. — Это будет, кстати, и маркетинговый мощный ход, и буст по инфраструктуре.
— Хм, — я хмыкнул, — это примерно те цифры, которые я и прикидывал. Значит, сходится. Но есть нюанс: у тебя есть эти 300 миллионов?
Гео развёл руками с чуть смущённой улыбкой:
— Не совсем. У меня сейчас не лучший период. Некоторые вложения не сыграли, я пока не располагаю такой суммой в одиночку. Но я готов вложить 60 миллионов за 2%. Остальные деньги нужно будет привлекать у сторонних инвесторов.
— Понял, — я покачал головой. — Я рассчитывал, что ты можешь дать нам весь пакет, но ладно. В конце концов, второй раунд подразумевает, что в дело войдут другие участники.
— Именно. И я могу помочь с контактами, сам организую встречи, — добавил Гео. — А 60 миллионов я внесу от себя — ты знаешь, я всегда готов поддержать.
— Отлично, — сказал я, — будем считать, что на этом договорились.