FF D8 FF E0 00 10 4A 46 49 46 00 01
Порівняв її з початком байтової послідовності в терміналі Linux:
ff d8 ff e0 00 10 4a 46 49 46 00 01…
Більше ніяких сумнівів. Вони збігалися. Повністю. Перед ним абсолютно точно JPEG-файл у двійковому форматі. Або принаймні початок JPEG-файла.
Тоха підхопився й узявся міряти кроками спальню. Від збудження змокріли долоні. Що далі? Байти після сигнатури повинні б формувати зображення, але як його прочитати? Перед очима немовби блискавка шугнула, і хлопець ляснув себе по лобі. Футер [16] Від англ. footer — букв. нижній колонтитул. Тут: унікальний набір байтів, яким закінчується файл певного формату.
. Звісно! Як він забув? Якщо це справді графічний файл, обов’язково мусить бути футер!
Тоха знову метнувся до ноутбука, перемкнувся на wiki-сторінку з інформацією про JPEG і відшукав стандартний футер усіх JPEG-файлів:
ff d9
Усього два байти. Хлопець виділив їх, повернувся до термінала Linux і через пошук спробував знайти футер у hex-версії першої послідовності. Знайшов майже миттєво, але, на подив Тохи, футер розташовувався не наприкінці послідовності, а значно ближче до її початку.
Кілька секунд хлопець збентежено кліпав, а потім, придивившись, помітив, що відразу після футера йде наступний хедер.
…ff d9 ff d8 ff e0 00 10 4a 46…
Отже, у послідовності закодовано більше ніж одне зображення.
Через пошук Тоха встановив, що перша Ліндина послідовність охоплює чотири хедери та чотири футери, тобто чотири послідовні зображення. Хлопця тіпало від нетерплячки, так кортіло спробувати їх декодувати, та перед тим він вирішив з’ясувати, скільки зображень і чи зображення взагалі приховують інші дві послідовності.
Він відкрив другий doc-файл.
××××××××××○××○○○×××××××××××○○○○○○○○○○○○○○○○×○○○○○×○○×○×○
○×○○○××○○×○○×○○×○×○○○××○○○○○○○○○○○○○○○○×○○○○○○○×○○○○○○○
○○○○○○○○○○○○○○○○×○○○○○○○○○○○○○○○×○○○○○○○○○○○○○○○○××××××
××××○××○××○○○○○○○○○×○○○○××○○○○○○○○○○○××○○○○○○×○○○×○○○×○
○×○○○○×○×○×○○○×○○×○○○○○××××○○○××○○○…
Замінив хрестики на одинички, а кружечки на нулі. Отриманий масив нулів та одиничок перекинув до Linux-термінала й розбив на байти:
11111111 11011000 11111111 11100000 00000000 00010000
01001010 01000110 01001001 01000110 00000000 00000001
00000001 00000000 00000000 00000001 00000000 00000001
00000000 00000000 11111111 11011011 00000000 01000011
00000000 00011000 00010001 00010010 00010101 00010010
00001111 00011000…
В онлайн-конвертері замінив двійкову послідовність шістнадцятковою:
ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01
00 01 00 00 ff db 00 43 00 18 11 12 15 12 0f 18…
І відхилився від екрана. Футери шукати не став. Усе й без них було зрозуміло. Перші дванадцять байтів збігалися з початком попередньої послідовності: Тоха бачив перед собою початок ще одного JPEG-малюнка. Наступні байти відрізнялися, проте так і мало бути — далі, після тринадцятого, починалося саме зображення.
От тільки зображення чого?
Серце істерично товклося об ребра.
Тоха перемкнувся на термінал, відшукав першу, отриману в шістнадцятковому форматі послідовність, виділив у ній байти, що мали б відповідати першому зображенню (перший хедер, перший футер і все, що між ними), скопіював їх у hex-редактор і зберіг у файл на жорсткому диску. Після збереження вручну додав до назви новоствореного файла розширення .jpg, потім навів на нього вказівник і, не усвідомлюючи, що затамував подих, двічі клацнув лівою кнопкою миші.
Хлопець підсвідомо очікував на стандартне повідомлення про помилку, щось про невідомий формат чи про неможливість прочитати файл абощо, проте помилився. На весь екран розгорнулася чітка та яскрава картинка — фотографія, — й Антонова щелепа відвисла.
— Щоб я здох, — слова вилазили з горлянки, наче грудки мокрої шерсті. Тоха вдихнув так раптово та глибоко, що ледь не вдавився слиною. — Щоб я, на хер, усрався!
Не кліпаючи, він витріщався на монітор.
Це не міг бути збіг.
Це аж ніяк не випадковість.
3
Лінда Деккер відповіла на дев’ятому гудку.
— Чувак, ти, блін, знаєш, котра година? — Голос немовби плавав поза слухавкою, спросоння дівчині ніяк не вдавалося дати раду смартфонові, і той раз по раз вислизав з рук.
Від збудження впродовж перших секунд Тоха не міг говорити.
— Алло?.. — долинуло з динаміка. — Алло?! — вдруге сердитіше.
Зрештою…
— Ліндо, — ламким від збудження голосом озвався хлопець, — маю для тебе новини.
— Що може бути аж таким важливим, щоби будити мене о пів на… — Лінда раптом замовкла. Вона видала горлянкою дивний звук (Тоха подумав про старі заіржавілі завіси) і випалила: — Це стосується позитронів?
Читать дальше