Bên cạnh các công cụ dựa trên GUI được đề cập trong các câu trả lời khác, có một số công cụ dòng lệnh có thể chuyển đổi mã nguồn PDF ban đầu thành một biểu diễn khác cho phép bạn kiểm tra (tệp hiện đã được sửa đổi) bằng trình chỉnh sửa văn bản. Tất cả các công cụ dưới đây hoạt động trên Linux, Mac OS X, các hệ thống Unix khác hoặc Windows.
qpdf
(yêu thích của tôi)
Sử dụng qpdf để giải nén (hầu hết) các luồng của đối tượng và cũng phân ObjStm
tách các đối tượng thành các đối tượng gián tiếp riêng lẻ:
qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf
qpdf
tự mô tả bản thân nó như một công cụ thực hiện "chuyển đổi cấu trúc, bảo toàn nội dung trên tệp PDF" .
Sau đó, chỉ cần mở + kiểm tra uncompressed-qpdf.pdf
tệp trong trình soạn thảo văn bản yêu thích của bạn. Hầu hết các byte được nén trước đây (và do đó, nhị phân) bây giờ sẽ là văn bản thuần túy.
mutool
Ngoài ra còn có mutool
công cụ dòng lệnh đi kèm với trình xem PDF MuPDF (là một sản phẩm chị em với Ghostscript, được sản xuất bởi cùng một công ty, Artifex ). Lệnh sau cũng giải nén các luồng và giúp kiểm tra chúng dễ dàng hơn thông qua trình soạn thảo văn bản:
mutool clean -d orig.pdf uncompressed-mutool.pdf
podofouncompress
PoDoFo là một thư viện FreeSoftware / OpenSource để làm việc với định dạng PDF và nó bao gồm một số công cụ dòng lệnh, bao gồmpodofouncompress
. Sử dụng nó như thế này để giải nén các luồng PDF:
podofouncompress orig.pdf uncompressed-podofo.pdf
peepdf.py
PeePDF là một công cụ dựa trên Python giúp bạn khám phá các tệp PDF. Mục đích ban đầu của nó là để nghiên cứu và mổ xẻ phần mềm độc hại dựa trên PDF, nhưng tôi thấy nó cũng hữu ích để điều tra cấu trúc của các tệp PDF hoàn toàn lành tính.
Nó có thể được sử dụng tương tác để "duyệt" các đối tượng và luồng có trong PDF.
Tôi sẽ không đưa ra một ví dụ sử dụng ở đây mà chỉ đưa ra một liên kết đến tài liệu của nó:
pdfid.py
và pdf-parser.py
pdfid.py
và pdf-parser.py
là hai công cụ PDF của Didier Stevens được viết bằng Python.
Nền tảng của chúng cũng là để giúp khám phá các tệp PDF độc hại - nhưng tôi cũng thấy hữu ích khi phân tích cấu trúc và nội dung của các tệp PDF lành tính.
Đây là một ví dụ cách tôi trích xuất luồng không nén của đối tượng PDF không. 5 vào tệp * .dump:
pdf-parser.py -o 5 -f -d obj5.dump my.pdf
Ghi chú cuối cùng
Xin lưu ý rằng một số phần nhị phân bên trong PDF không nhất thiết phải không nén được (hoặc có thể giải mã thành mã ASCII có thể đọc được của con người), vì chúng được nhúng và sử dụng ở định dạng gốc bên trong các tệp PDF. Các phần PDF như vậy là hình ảnh JPEG, phông chữ hoặc cấu hình màu ICC.
Nếu bạn so sánh các công cụ trên và các ví dụ dòng lệnh được đưa ra, bạn sẽ phát hiện ra rằng chúng KHÔNG tạo ra tất cả các đầu ra giống nhau. Bản thân nỗ lực so sánh chúng để tìm ra sự khác biệt có thể giúp bạn hiểu rõ hơn về bản chất của cú pháp và định dạng tệp PDF.