PDF: вложение, спрятанное опечаткой

стеганография · задача 08   pdfдокументыbase64root-me

epreuve_BAC_2004.pdf — 12 страниц экзаменационного задания, и все страницы картинками. pdftotext выдаёт только разделители страниц.

Платформа
Root-Me
Носитель
PDF
Приём
вложенный файл с искажённым ключом в каталоге
Инструменты
pdfdetach, pdf-parser, base64
Статус
решено

Почему стандартный инструмент молчит

pdfdetach -list epreuve_BAC_2004.pdf
0 embedded files

pdfdetach ищет вложения строго по спецификации, ключом /EmbeddedFiles. А pdf-parser просто показывает все объекты подряд, и в каталоге документа видно ключ /Embeddedfiles с маленькой f. Опечатка, скорее всего намеренная, прячет файл от «правильных» утилит, но данные никуда не делись.

Catalog/Embeddedfiles ✗Names/Names [...]obj 78 Filespec/F <4869…> /EFobj 77 EmbeddedFilestream (Flate)pdfdetach ищет ключ /EmbeddedFiles (с большой F) → не находит → «вложений нет»pdf-parser просто показывает все объекты → цепочка видна целиком
Цепочка объектов: каталог → имена → описание файла → поток с данными

Извлечение

Имя вложения записано в hex: <48696464…> → Hidden_b33rs.txt. Описание файла (Filespec, объект 78) ссылается на поток (объект 77). Достаём поток с распаковкой:

pdf-parser -s Embedded epreuve_BAC_2004.pdf        # найти, где упоминается вложение
pdf-parser -o 77 -f -d hidden.txt epreuve_BAC_2004.pdf   # -f распаковать, -d сохранить
head -c 20 hidden.txt
/9j/4AAQSkZJRgABAQ…

/9j/4 в начале — это base64 от байтов FF D8 FF E0, то есть от JPEG. Последний шаг:

base64 -di hidden.txt > hidden.jpg && xdg-open hidden.jpg

На картинке и написан ответ.

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

Что вынести

  • Стандартный инструмент видит только стандартное. Если он говорит «ничего нет», смотри сырую структуру (pdf-parser, qpdf --qdf, xxd).
  • Стоит выучить начала base64 у популярных форматов: /9j/ — JPEG, iVBOR — PNG, UEsDB — ZIP, JVBER — PDF.