Как известно, 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 (исходные изображения и другие объекты):

Комментарии (3)


  1. plsoft
    17.12.2024 05:38

    Еще есть PDFStreamDumper, бесплатный, исходный код открыт.


    1. xivman
      17.12.2024 05:38

      А есть что-то похожее под андроид?


      1. plsoft
        17.12.2024 05:38

        Не встречал, но я и андроид для исследования pdf не использовал.