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