Как известно, PDF-файлы часто используются как контейнеры для вирусов и эксплоитов. Они применяются в фишинговых кампаниях и социальной инженерии, когда жертве присылают для просмотра «безобидный документ» в формате PDF, а тот запускает на исполнение вредоносный код через незакрытую уязвимость в браузере или PDF-ридере.
Перед открытием документа всегда желательно посмотреть, что находится внутри. Для этих целей существуют парсеры, которые разбирают PDF. Например, Interactive PDF Analysis (IPA, на скриншоте вверху) и другие.
Даже если перед нами чистый PDF, иногда нужно изучить содержимое и извлечь полезные ресурсы в нетронутом виде — например, оригинальные изображения в JPG.
С помощью таких инструментов можно извлечь из PDF-файлов ресурсы и полезную нагрузку, понять взаимосвязи между объектами и сделать вывод о внутренних элементах.
Interactive PDF Analysis (IPA)
Для создания IPA использовалась Rust-библиотека pdf-rs для парсинга PDF, а также библиотека egui для графических интерфейсов. Источником вдохновения автор называет замечательную программу PDF Dissector от компании Zynamics, которую мы использовали ещё 10−15 лет назад. Новые версии уже не выпускаются, продукт заброшен, а исходный код так и не опубликован:
PDF Dissector
Несколько десятилетий назад основными инструментами для реверс-инжиниринга считались утилиты Дидье Стивенса, в том числе PDF Tools. Вот как работает парсер
pdf-parser.py
из того набора:Хотя они стали стандартом де-факто, но для их использования из консоли приходилось запоминать большую комбинацию флагов и сообщать номера различных объектов.
Шаблон
PDFTemplate.bt
для редактирования файлов PDF в текстовом редакторе 010 EditorПоэтому продолжаются попытки улучшить и упростить парсеры PDF — создать такие же мощные инструменты, только с графическим интерфейсом.
Графика даёт дополнительные возможности для анализа, например, наглядно показывает взаимосвязи между объектами, на какие страницы они ссылаются и типы объектов (изображения, шрифты, цвета, метаданные). Через GUI проще экспортировать содержимое потоков и просматривать содержимое словарей в виде таблиц.
Функции IPA
- Извлечение и анализ метаданных: автор, дата создания, история изменений и другие важные сведения.
- Изучение структуры PDF-документа, анализ объектов (текст, изображения и шрифты) и страниц, их взаимосвязь и расположение.
- Визуализация ссылок на другие объекты или места в файле (изображения, шрифты, определённые разделы)
- Извлечение и сохранение потоков необработанных данных из PDF в указанном месте, что позволяет детально изучить и проанализировать бинарный контент.
- Извлечение полезной информации из повреждённого или частично повреждённого файла, даже если традиционные методы парсинга не работают.
Программа компилируется из исходного кода. Для этого нужно клонировать репозиторий и запустить
cargo
:git clone https://github.com/seekbytes/IPA
cd IPA
cargo b --release
В системе должен быть установлен Rust, иных зависимостей нет.
Текущие ограничения
- мало эвристик (автор просит открывать тикеты или писать ему по почте, если есть идеи);
- нет поддержки зашифрованных PDF (даже если вы знаете пароль, программа падает при попытке открыть такой файл);
- не все файлы PDF открываются из-за строгих требований
pdf-rs
.
Другие инструменты
Вот некоторые другие похожие инструменты для просмотра внутреннего содержимого файлов PDF (исходные изображения и другие объекты):
-
PDF debugger.
- Питоновская библиотека PDFSyntax.
Использование:
python3 -m pdfsyntax inspect foo.pdf > output.html
-
Polyfile, питоновская реализация libmagic.
Использование:
polyfile --html output.html foo.pdf
-
PDFViewer. Есть онлайн-демо, куда можно загрузить свой файл PDF для проверки.
-
PDF Inspector, работает в браузере
-
PDFedit: GUI-редактор и мультиплатформенная библиотека для работы с документами PDF.
-
iText RUPS (Reading and Updating PDF Syntax).
-
PDFXplorer.
plsoft
Еще есть PDFStreamDumper, бесплатный, исходный код открыт.
xivman
А есть что-то похожее под андроид?
plsoft
Не встречал, но я и андроид для исследования pdf не использовал.