Yellow dots: следящие точки принтера

стеганография · задача 06   печатьmicstegsolveroot-me

Скан распечатанной страницы. Нужно узнать, когда и на каком принтере её напечатали: время, дату и серийный номер.

Платформа
Root-Me
Носитель
изображение распечатки
Приём
жёлтые точки принтера (MIC), схема Xerox DocuColor 15×8
Инструменты
Stegsolve, GIMP
Статус
решено

Что это вообще такое

Многие цветные лазерные принтеры печатают на каждой странице почти невидимый узор из жёлтых точек: Machine Identification Code. В нём закодированы дата, время и серийный номер устройства. Это настоящая стеганография, причём встроенная производителем. По таким точкам находили источник утечки распечатанного секретного документа.

Как увидеть точки

Жёлтый цвет — это отсутствие синего. Поэтому на белой бумаге жёлтые точки лучше всего видны в синем канале. В Stegsolve их проявила Blue plane 6, а в GIMP помогает Colors → Components → Decompose и смотреть канал B.

Как читать сетку DocuColor

Узор повторяется по странице блоком 15 столбцов × 8 строк. Первая строка и первый столбец — биты чётности, они служебные. Каждый остальной столбец — 7-битное число, веса строк сверху вниз 64, 32, 16, 8, 4, 2, 1.

12мин345час6день7мес8год91011SN12SN13SN14SN15чёт643216842137138112612345678=
Пример с придуманными значениями: 13:37, 08.11.2026, серийный 78 56 34 12 → читается справа налево
grid = [...]   # 8 строк × 15 столбцов, 1 = точка; строки сверху вниз
col = lambda c: int(''.join(str(grid[r][c - 1]) for r in range(1, 8)), 2)
print(f'{col(5):02}:{col(2):02} {col(6):02}/{col(7):02}/20{col(8):02}')
print('SN:', ''.join(f'{col(c):02}' for c in (14, 13, 12, 11)))

Формат ответа в задаче: чч:мм дд/мм/гггг серийный.

[ответ скрыт] Это задача с Root-Me, а правила платформы просят не выкладывать ответы. Метод выше полный: по нему ответ получается за пару минут.

Что вынести

  • Цветное и «почти невидимое» ищи по каналам и битовым плоскостям (Stegsolve, Decompose).
  • Для ИБ: распечатка тоже несёт метаданные. Список принтеров с такими метками публиковал EFF.