3.7 KiB
Пропавший коллега
В руках — пачка артефактов сотрудника компании NordTech:
| Артефакт | Что содержит |
|---|---|
resume.pdf |
Резюме, ID сотрудника NT-3893 |
business_card.png |
Визитка с ИНН |
commits.log |
Лог коммитов внутреннего репозитория |
profile_photo.jpg |
Фото с EXIF |
postal_codes.csv |
База почтовых индексов с координатами |
repo_snapshot.txt |
Снимок внешнего репозитория |
browser_render.png |
Скриншот из браузера |
Флаг собирается из четырёх частей, и каждая спрятана в своей цепочке.
Решение
Часть 1 — br34d. В resume.pdf в профиле сотрудника указан ID NT-3893. В business_card.png — ИНН 7707083893, и последние четыре цифры совпадают с ID. Сотрудник привязан к NordTech. Лезем в commits.log:
feat(NT-3893): integrate module-br34d
Регуляркой feat\(NT-3893\): integrate module-(\w+) выдёргиваем кодовое слово — br34d.
Часть 2 — crumbs. Из EXIF profile_photo.jpg вытаскиваем GPS, конвертируем DMS в десятичные:
55.7616 N, 37.6385 E → район Чистопрудного бульвара, Москва
Идём в postal_codes.csv и ищем ближайшую точку по манхэттенскому расстоянию. Находится запись:
postal_code = 101000
sector_code = 6372756d6273
Декодируем hex → ASCII:
63 72 75 6d 62 73 → c r u m b s
Вторая часть — crumbs.
Часть 3 — l34d . В commits.log кроме «нашего» коммита торчит отсылка на внешний репо вида See commit <sha> in <repo>. Вытаскиваем короткий SHA (7 символов) и имя репо регуляркой See commit\s+(\w+)\s+in\s+([\w\-\.\/]+). Идём в repo_snapshot.txt и находим блок именно этого коммита (от нашего SHA до следующего полного 40-символьного). Внутри блока ищем base64-строки длиной от 20 символов — одна декодируется в:
module-l34d-integration-v2.1.0
Первый сегмент после module- до дефиса — l34d.
Часть 4 — h0m3. Открываем картинку в RGBA через PIL, разворачиваем красный канал в одномерный массив, идём по пикселям и забираем младшие биты. Каждые 8 подряд складываются в байт (MSB первым). Нулевой байт — маркер конца. Есть один мелкий нюанс: сырой вывод начинается с трассировочного префикса вида [N/4] — его срезаем регуляркой \[\d/\d\](.*). Остаётся h0m3.
Склеиваем через _:
br34d + crumbs + l34d + h0m3 = br34d_crumbs_l34d_h0m3
Готовый солвер — solve/solver.py.
Флаг
caplag{br34d_crumbs_l34d_h0m3}