pdf-файлы: результаты «pdfid»

Дидье Стивенс создал программу, которая называется «pdfid» ( https://blog.didierstevens.com/2009/03/31/pdfid/ и https://blog.didierstevens.com/programs/pdf-tools/#pdfid. ).

Он говорит:

«Я разработал новый инструмент для сортировки PDF-документов, PDFiD. Он помогает различать PDF-документы, которые могут быть вредоносными, и документы, которые, скорее всего, нет».

И это то, для чего я хочу использовать это.

«PDFiD будет сканировать PDF-документ на предмет заданного списка строк и подсчитывать вхождения (суммарные и запутанные) каждого слова:»

obj endobj stream endstream xref trailer startxref /Page /Encrypt /ObjStm /JS /JavaScript /AA /OpenAction /AcroForm /JBIG2Decode /RichMedia /Launch /XFA 

Насколько я знаю, значения «obj» и «endobj» должны совпадать, что означает, что нет ни одного открытого объекта, который не был бы закрыт (возможно, из-за переполнения буфера или чего-то еще).

И в идеале

/ JS / JavaScript / AA / OpenAction / AcroForm

должен иметь нулевое значение.

Тем не менее, я видел довольно много pdf-документов с «obj» и «endobj», которые не совпадают, но другие значения кажутся нормальными

Пример: использование_FreeDOS.pdf с http://www.freedos.org/ebook/download/using-freedos-24.pdf .

Pdfid-результаты:

  PDF Header: %PDF-1.4 obj 520 endobj 519 stream 193 endstream 193 xref 1 trailer 1 startxref 1 /Page 100 /Encrypt 0 /ObjStm 0 /JS 0 /JavaScript 0 /AA 0 /OpenAction 1 /AcroForm 0 /JBIG2Decode 0 /RichMedia 0 /Launch 0 /EmbeddedFile 0 /XFA 0 /URI 8 /Colors > 2^24 0 

Тем не менее, этот также имеет “/ OpenAction 1”. Я не совсем уверен, насколько это актуально.

тем не менее:

Насколько важен тот факт, что «obj» и «endobj» совпадают, когда остальная часть списка строк и количества в порядке?

Как уже было сказано: существует довольно много pdf-документов, в которых «obj» и «endobj» не совпадают.

One Solution collect form web for “pdf-файлы: результаты «pdfid»”

pdfid, очевидно, выполняет паршивую работу по подсчету пар obj / endobj – в вашем конкретном примере нечетный «obj» является частью streamа FlateDecode:

 $ cat pdf.pl use Compress::Zlib qw(inflateInit Z_STREAM_END); use strict; my ($o); while(<>){ $o -= s/\bendobj\b//g; $o += s/\b\d+\s+\d+\s+obj\b//g; if(/\bstream\s*$/){ local $/ = "endstream"; my $s = <>; $s =~ s/\s*endstream$//; if($s =~ /(\w*obj)/){ my ($d, $err) = inflateInit->inflate($s); if(length($s) == 0 && $err == Z_STREAM_END){ warn "innocuous '$1' in well formed stream\n"; }else{ warn "WARNING: inflateInit: $err\n"; } } } if(/(\w*obj)\b/){ warn "WARNING: possible stray $1\n" } } warn "WARNING: unbalanced obj/endobj: $o\n" if $o; $ perl pdf.pl using-freedos-24.pdf innocuous 'obj' in well formed stream в $ cat pdf.pl use Compress::Zlib qw(inflateInit Z_STREAM_END); use strict; my ($o); while(<>){ $o -= s/\bendobj\b//g; $o += s/\b\d+\s+\d+\s+obj\b//g; if(/\bstream\s*$/){ local $/ = "endstream"; my $s = <>; $s =~ s/\s*endstream$//; if($s =~ /(\w*obj)/){ my ($d, $err) = inflateInit->inflate($s); if(length($s) == 0 && $err == Z_STREAM_END){ warn "innocuous '$1' in well formed stream\n"; }else{ warn "WARNING: inflateInit: $err\n"; } } } if(/(\w*obj)\b/){ warn "WARNING: possible stray $1\n" } } warn "WARNING: unbalanced obj/endobj: $o\n" if $o; $ perl pdf.pl using-freedos-24.pdf innocuous 'obj' in well formed stream 

Примечание: это мало для иллюстрации проблемы; не используйте это, чтобы проверить, безопасен ли pdf 😉

Формат PDF довольно неприятный и сложный; вам действительно нужен полноценный парсер, чтобы понять его структуру. И программа, способная сделать это (для правильной идентификации вредоносных pdf-файлов), сама становится вектором атаки – нет никаких оснований полагать, что специальный анализатор более безопасен, чем libpoppler или libmupdf.

  • Избегайте раздувания размера файла при удалении OCRed текста из файла pdf?
  • Открыть подписанные PDF-файлы в Linux
  • Что случилось с ePDFview?
  • проблема с текстом, добавленным в pdf в Xournal после экспорта в pdf
  • Можно ли перенести текст OCRed из одного PDF в другой PDF-файл?
  • Объединение и экспорт текста OCRed в файл PDF и из него
  • TexLive и RHEL 6 - могу ли я установить 2011 * дополнительно * к 2007 году?
  • конвертировать одностраничный пейзаж pdf в масштабируемый двухстраничный портрет pdf
  • Сценарий Bash с использованием pdfencrypt не работает для определенных символов
  • Отправить факс через SIP
  • Как изменить размер содержимого PDF без изменения размера страницы?
  • Linux и Unix - лучшая ОС в мире.