GUI для исследования внутренностей PDF

Добро пожаловать на наш форум!

Спасибо за посещение нашего сообщества. Пожалуйста, зарегистрируйтесь или войдите, чтобы получить доступ ко всем функциям.


Gibby

Автор
Команда проекта

Регистрация
Сообщений
1,635
Репутация
45
Сделок
Как известно, 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 лет назад. Новые версии уже не выпускаются, продукт заброшен, а исходный код так и не опубликован:

0.png
PDF Dissector

Несколько десятилетий назад основными инструментами для реверс-инжиниринга считались утилиты Дидье Стивенса, в том числе PDF Tools. Вот как работает парсер pdf-parser.py из того набора:

1.png
Хотя они стали стандартом де-факто, но для их использования из консоли приходилось запоминать большую комбинацию флагов и сообщать номера различных объектов.

2.png
Шаблон 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 (исходные изображения и другие объекты):

 
Сверху