Добрая Фея - Вадим Проскурин
Шрифт:
Интервал:
Закладка:
— Не надо ей никаких алиментов платить, — сказал Андрей. — Ты не возражаешь, если я перееду к тебе жить?
Это было неожиданно. С одной стороны, это хорошо, приятно, что сын любит отца больше, чем суку–мать, как она беситься будет… И в этот момент Костя понял, что больше не злится на Ольгу, жалеет — да, но не злится. Ну, дура, ну, стерва, ну, обидела, но это все в прошлом, жизнь наладилась, с Инной Косте так хорошо, как с Ольгой никогда не было, а у нее с Сашей явно начались серьезные проблемы, раз Андрей больше не хочет с ними жить.
— У вас что–то случилось? — спросил Костя. — Саша достал?
— Нет, — сказал Андрей, удивленно подняв брови. — Саша — отличный мужик, почти как ты. Мама достала, она очень нервная стала, бросается на всех, Саша все время на работе пропадает, тоже какой–то дерганый, но он себя в руках держит, а мама совсем никакая. Срывается, кричит… Можно, я к вам перееду?
— Ну… — сказал Костя и надолго задумался.
Он не знал, что говорить сыну. Не объяснять же ему, что большую часть времени они с Инной проводят в секретном доме отдыха КОБ, что сюда он привез ее на свой страх и риск, что в любой момент какой–нибудь большой генерал может принять решение уничтожить анчутку от греха… Да в конце концов, как объяснить Андрею, что Инна не человек? С другой стороны, не оставлять же его в том гадюшнике, в который Ольга превратила осколок их семьи…
— Давай так решим, — сказал Костя. — Прямо сейчас переезжать нельзя, поживи пока с мамой, немного потерпи. Где–нибудь через неделю мы твой вопрос решим, сейчас просто дел очень много, я дома почти не бываю…
— А Инна? — спросил Андрей.
Инна тоже, — отрезал Костя. Андрей сделал обиженное лицо.
— Нет, ты не так понял, — поспешно сказал Костя. — Я от тебя не отказываюсь, просто прямо сейчас это невозможно. Я и сегодня еле–еле время урвал, чтобы с тобой повидаться, как обычно, по субботам, а переезд сейчас устраивать совершенно нереально. К тому же непонятно, куда переезжать, скоро должны первые большие деньги прийти, мы, наверное, новую квартиру купим… Знаешь, Андрей, за это время, ну, с тех пор как появился ТДМ, я кое–что понял. Это только кажется, что быть крутым и успешным приятно, на самом деле чем больше ты достигаешь, тем больше у тебя становится проблем. Раньше не хватало денег, но зато было полно времени, не приходилось все время трепать нервы…
— Мне бы твои проблемы, — тихо произнес Андрей.
— Тебе бы?! — возмутился Костя. — Ну, на, получай. Олигарх из первой десятки хочет подгрести под себя наш бизнес и повел наезд по всем правилам, через Минздрав, прокуратуру и журналистов. Половину прибыли кладет себе в карман мэр столицы, из второй половины львиная доля тратится на взятки и откаты, чтобы нас совсем не прикрыли. И это только самые маленькие проблемы, о больших я тебе говорить не буду, тебе лучше о них вообще не знать.
— Ты неправильно говоришь, — вмешалась в разговор Инна. — Его не интересуют твои проблемы, он верит, что ты справишься, ему важно знать только одно. Что ты по–прежнему любишь его, что ты поможешь ему, когда будет нужно, и что твоя злость на Ольгу на него не распространяется. Что ты не обижаешься на него за то, что когда вы разошлись, он выбрал мать, а не отца. Андрей, Костя очень любит тебя, но мы действительно не можем тебя принять прямо сейчас, у нас действительно большие проблемы, но они быстро решатся, поверь мне. Я об этом позабочусь.
Произнося последние слова, она посмотрела на Костю и многозначительно подмигнула.
— Ты уж позаботься, — пробормотал Костя.
— Ладно, я все понял, — сказал Андрей. — Неделю как–нибудь перекантуюсь. Но потом ты меня не прогонишь, обещаешь?
Обещаю, — сказал Костя. — Я тебя никогда не прогоню, ты же мой сын.
ГЛАВА ДЕВЯТАЯ
Степа смотрел в окно виртуальной машины и не верил своим глазам. В окне красовался зеленый экран смерти операционной системы, причина смерти была одна из самых распространенных — неверный код команды BE EF FA СЕ, сразу видно, что случилось переполнение буфера и управление передалось в не распределенную память. Если не знать, что предшествовало фатальной исключительной ситуации, можно подумать, что ничего особенного не произошло. Ну, рухнула The Wall, ну, бывает, не первый раз и не последний. Немного странно, что система рухнула из–за ошибки в обычной прикладной программе, это верный признак критической уязвимости в ядре, но таких уязвимостей каждый год находят штук десять. Но если знать, что именно сделала программа, обрушившая систему, приходится признать, что только что произошло нечто из ряда вон выходящее.
То предположение, которое пришло в голову Степы вчера в ресторане, было ошибочным, все оказалось намного проще. Цифры, которые написала Инна на листке из блокнота, представляли собой попросту машинный код процессоров Outfax, тех самых, что стоят внутри почти каждого современного компьютера. Команды были самыми обычными, они загружали в определенные регистры определенные числа, затем делали простую цепочку арифметических операций, и эта цепочка давала совершенно неожиданный результат — управление передавалось на адрес, содержащийся в определенном регистре, при этом полностью отключалась аппаратная защита памяти. Если бы по указанному адресу лежал не мусор, а осмысленный код, он бы выполнился, причем не просто выполнился, а в режиме ядра, с ничем не ограниченными правами доступа. Ну–ка, попробуем вписать в регистр осмысленный указатель…
Снова зеленый экран смерти. Почему? А, понятно, здесь надо использовать не просто абсолютный линейный адрес, а смещение относительно чего–то. Относительно чего? Сейчас проверим…
После пятого зеленого экрана Степа понял, что смещение отсчитывается от текущего значения третьего целочисленного регистра, который, кстати, предыдущими командами никак не инициализировался. Получается, там мусор лежит? Что обычно кладут в третий целочисленный регистр? Счетчики циклов, значения сдвигов для криптографических преобразований, что–то еще…
— Ребята! — позвал Степа. — Что осмысленное может лежать в ir2?
Он не ожидал, что получит вразумительный ответ, Но ответ пришел, причем почти немедленно.
— This! — сказал Вася Васильченко, не отрываясь от дизассемблера.
— Чего? — переспросил Степа.
— This, — повторил Вася. — Текущий объект. Ну, если программа написана на + + D, и текущая функция — член класса, то ссылка на экземпляр объекта передается в ir2.
Степа задумался. Он не умел программировать на объектно–ориентированных языках, кое–какое общее представление имел. Значит, ссылка на экземпляр объекта. Если объект, например, является картинкой, то содержимое картинки лежит внутри тела объекта, при этом смещение от начала заголовка, скорее всего, будет константой, а значит… Неужели рандомизация адресного пространства не работает? Да, точно, не работает! Как бы хитро и запутанно система ни строила карту памяти, сбить с толку эксплойт ей не удастся, загрузчик всегда точно укажет на вирусный код, надо только, чтобы атакуемая программа была написана на объектно–ориентированном языке и чтобы внутреннее представление объекта было известно нарушителю заранее. То есть, если нарушитель имеет конкретную версию конкретной программы и знает, что в атакуемой системе стоит она же, тогда нарушитель направляет этой программе специальный пакет данных и, когда этот пакет начинает обрабатываться, управление передастся внутрь пакета, прямо на вирус. При этом вся аппаратная защита отключается, вирус получает неограниченные полномочия, устанавливает полный контроль над системой и дальше делает с ней все, что захочет. А если версия программы не та? В худшем случае будет зеленый экран, а скорее всего, вообще ничего не случится — если программа сильно переделана, вряд ли новая версия соберет в регистрах процессора ту самую волшебную комбинацию чисел, которая активизирует эксплойт. А если нарушитель точно не знает, какую программу атакует, он может отправить в атакуемую систему несколько пакетов данных, каждый из которых будет заточен под свою конкретную версию. Если пакет данных большой, например видеоклип, можно заложить в разных его местах разные загрузчики, хоть один, да сработает. При этом версия и даже тип операционной системы не имеют никакого значения, регистры–то везде одни и те же.
(adsbygoogle = window.adsbygoogle || []).push({});