Инспектор Лыков имел вид человека, который только что обнаружил, что его умный холодильник ведёт двойную жизнь. Стоя на пороге моего кабинета-лаборатории, он мял в руках планшет, словно надеялся, что данные на нём перетасуются в более удобный порядок.
— Арсений, дело-то пустяковое. На первый взгляд. Но есть тут одна деталь… — он замялся, ища слово. — Диссонирует.
Со своего кресла я наблюдал за тремя мониторами, где в реальном времени сходились потоки данных: логи серверов одного хедж-фонда, температура процессоров на городской метеостанции и расшифровка диалогов из популярного чата для собаководов. Рядом, на кожаном диване, Мирон, мой хронический гость и автор скандальной телеграм-ленты «Анатомия быта», доедал шаверму.
— «Пустяковое», — проговорил я, не оборачиваясь. — Вы продолжаете путать субъективную простоту с отсутствием информации. Вы здесь потому, что автоматическая система классификации происшествий дала сбой? Или потому, что погибший оставил в цифровом пространстве артефакт, не укладывающийся в ваши сценарии «несчастного случая» или «бытового конфликта»?
Лыков вздохнул. Он терпел мои выходки, потому что я, подобно дорогому, но глючному софту, иногда выдавал результат, недостижимый для штатных процедур.
— Так и есть. Пётр Алексеевич Сомов, тридцать восемь лет, архитектор баз данных. Найден в своём «умном» доме в состоянии биологической смерти. Признаков насилия — ноль. Датчики фиксировали обычную активность до момента остановки сердца. Но его планшет… За минуту до падения жизненных показателей он сделал скриншот.
— И что на нём? Предсмертное признание? Угрожающее сообщение? — оживился Мирон, хватая блокнот.
— Ничего особенного, — мрачно сказал Лыков. — Вот, смотрите.
Он вывел изображение на центральный монитор. Скриншот. Обычный рабочий стол. Окно файлового менеджера, несколько иконок, панель задач, часы в углу. Полная цифровая рутина.
— Последний скриншот, — констатировал я, наконец поворачиваясь к ним. — И вы не понимаете, зачем человек, стоящий на пороге небытия, сохраняет изображение столь банальной конфигурации.
— Может, хотел сохранить путь к файлу? Или зафиксировать ошибку? — предположил Мирон.
— В два часа ночи? В воскресенье? — Я поднял бровь. — Нет, Мирон. Это не памятка. Это сигнал. Но не прямой, а инверсный. Он показывает не то, что было важно, а то, что было неправильно.
Я увеличил изображение. Пиксели поплыли, обнажая детали.
— Обратите внимание на файловый менеджер. Открыта папка «Temp_Archive». Внутри — семь файлов с датами за прошлый месяц. Зачем архитектор баз данных, человек, чья профессиональная религия — порядок и номенклатура, хранит временные файлы в папке с таким названием? Это первое противоречие. Второе — иконка погоды на панели задач.
Я ткнул пальцем в маленький значок.
— Отображена «ясная ночь, +3°C». Но на сайте городской метеослужбы, чьи данные я как раз наблюдаю, в тот момент была «пасмурно, 0°C». Виджет планшета Сомова показывал не реальную погоду, а кэшированные, устаревшие данные. Человек его уровня либо отключил бы виджет, либо настроил синхронизацию. Третье — системные часы.
Я перевёл взгляд на правый нижний угол.
— Они показывают 02:17. Но согласно логам умного дома, в 02:16:30 Сомов уже не проявлял признаков сознательной двигательной активности. Его пальцы физически не могли сделать этот скриншот. Либо часы планшета отставали ровно на сорок семь секунд, что маловероятно для устройства, синхронизирующегося по NTP-серверу каждые сутки. Либо…
— Либо скриншот был сделан раньше и… подменён? — медленно произнёс Лыков.
— Нет, — поправил я. — Он был сделан автоматически. По расписанию. И это не скриншот рабочего стола. Это — контрольный снимок. Свидетельство определённого состояния системы. Человек, который его установил, готовился к тому, что его система выйдет из строя. И хотел оставить запись о её последних рабочих мгновениях. Но не для себя. Для того, кто будет разбирать обломки.
В комнате повисло молчание. Мирон быстро строчил в блокноте. Лыков смотрел на экран, как на внезапно проступивший водяной знак на картине, считавшейся подлинной.
— Значит, его смерть не была естественной, — наконец сказал инспектор. — Его «систему» кто-то намеренно остановил. И он, зная об этом, поставил себе… цифрового часового.
— Более того, — продолжил я, переключаясь на другой монитор, где уже бежали строки лога, — этот «часовой» был хитрее. Он не просто фиксировал состояние. Он фиксировал несоответствие. Папка «Temp_Archive» — намёк на временность, хрупкость данных. Неверная погода — символ отрыва от реального мира. Сбитые часы — намёк на искажение времени, на задержку между событием и его обнаружением. Это не крик о помощи. Это отчёт об ошибке. Составленный программистом для программиста.
— Кем? Для кого? — спросил Мирон.
— Для того, кто мыслит категориями кода и логики, — ответил я. — Для нас. Он знал, что обычный осмотр ничего не даст. Но оставил на самом видном месте — на последнем сделанном скриншоте — набор аномалий, которые любой технический специалист сочтет недопустимыми. Это был его SOS, переведённый на язык цифрового этикета. Он не писал «меня убьют». Он показал «в моей системе внедрён вредоносный процесс, нарушающий базовые протоколы».
Лыков медленно кивнул. В его глазах зажёгся не огонь прозрения, а холодный, методичный свет перезагрузки протокола.
— Хорошо. Значит, искать нужно не бытовых врагов. Нужно искать того, кто имел доступ к его системам. Кто мог внедрить этот… вредоносный процесс.
— Совершенно верно, — сказал я, вставая и беря с вешалки длинное пальто. — И теперь, Мирон, нам предстоит самая увлекательная часть. Нам нужно проанализировать жизнь человека не как череду событий, а как запущенный программный комплекс. Найти в его коде чужие, враждебные строки. Убийство в XXI веке, инспектор, редко оставляет кровавый след. Оно оставляет след в журнале событий. Пойдёмте читать логи.
И, бросив последний взгляд на экран с безупречно-странным скриншотом, я добавил про себя: главная трагедия современности — не в зле, а в тихой, невыносимой для логического ума, ошибке в алгоритме. И Пётр Сомов стал её жертвой, успев перед выходом оставить последний, самый важный баг-репорт.