15 điểm bởi GN⁺ 2025-08-04 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Phân tích PDF về lý thuyết phải hoạt động dựa trên trình tự và cấu trúc rõ ràng, nhưng các tệp thực tế thường không tuân theo đặc tả này
  • Nhiều lỗi và sự không nhất quán xảy ra khi tìm con trỏ cross-reference (xref) và các offset
  • Trên thực tế, rất nhiều vấn đề phát sinh do dữ liệu thừa trước phần header PDF hoặc do con trỏ và offset nằm sai vị trí
  • Cũng có nhiều trường hợp bản thân bảng xref của PDF không rõ ràng hoặc được định dạng sai
  • Vì vậy, các trình xem phổ biến đều triển khai thêm logic để hỗ trợ cả các tệp PDF phi tiêu chuẩn

Cách tiếp cận lý tưởng đối với việc phân tích PDF

  • Về mặt lý thuyết, phân tích PDF diễn ra theo các bước cố định
    • Tìm chú thích header phiên bản ở phần đầu tệp
    • Tìm con trỏ cross-reference (xref)
    • Thu thập mọi offset của đối tượng
    • Tìm từ điển trailer để truy cập cấu trúc catalog tổng thể

Giới thiệu về đối tượng PDF

  • Đối tượng PDF là đơn vị bao bọc và lưu trữ nhiều thành phần PDF như số, chuỗi, từ điển, v.v.
  • Mỗi đối tượng tồn tại giữa các marker obj/endobj
  • Các đối tượng được liên kết với nhau bằng tham chiếu gián tiếp (indirect reference, ví dụ: 16 0 R)
  • Cách phân chia đối tượng trong tệp là linh hoạt, nhưng một số loại đối tượng bắt buộc phải là tham chiếu gián tiếp

Tìm offset cross-reference

  • Về mặt cấu trúc, PDF có bảng cross-reference (xref), đóng vai trò như chỉ mục vị trí của các đối tượng
  • Ở cuối tệp, một vị trí byte cụ thể được chỉ ra bằng cú pháp startxref như một con trỏ
  • Con trỏ này chỉ định vị trí xref, nhưng giữa đặc tả và tệp thực tế có khác biệt. Ví dụ, marker %EOF lẽ ra phải là dòng cuối cùng, nhưng trong PDF ngoài thực tế, nó có thể xuất hiện ở bất kỳ đâu trong 1.024 byte cuối
  • Trong các tệp thực tế, có thể bắt gặp nhiều biến thể như lỗi định dạng con trỏ (startref, v.v.) hoặc thiếu xuống dòng

Tìm offset của đối tượng

  • Bảng xref gồm xref, số bắt đầu của đối tượng, rồi đến số lượng đối tượng; sau đó offset / số thế hệ / trạng thái của từng đối tượng (n hoặc f) được ghi trên từng dòng
  • Có thể có nhiều bảng xref, hoặc chúng liên kết với nhau qua mục /Prev

Xác định vị trí từ điển trailer

  • Phía trên marker startxreftừ điển trailer, chứa siêu dữ liệu bắt buộc để tìm đối tượng gốc
  • Dựa trên đối tượng gốc, có thể bắt đầu diễn giải toàn bộ cấu trúc

Môi trường thực tế: những vấn đề ngoài dự kiến

  • Có rất nhiều tệp không tuân thủ đặc tả PDF, nên trình phân tích thông thường khó xử lý

  • Những trường hợp thường thất bại khi tìm con trỏ cross-reference

    • Con trỏ không nằm ở cuối tệp hoặc trong 1.024 byte cuối
    • Lỗi gõ (startref, v.v.)
    • Định dạng ngoại lệ
  • Trong khảo sát 3.977 mẫu PDF thực tế, khoảng 0,5% có lỗi khai báo xref

Nội dung PDF bắt đầu tại offset khác 0

  • Nếu có dữ liệu rác (junk) trước header, mọi offset byte sẽ bị lệch, khiến vị trí startxref cũng sai theo
  • Cần tính lại offset dựa trên vị trí của header, đồng thời kiểm tra cả hai vị trí
  • Trường hợp này chiếm khoảng 50% tổng số lỗi

Con trỏ xref trỏ vào giữa bảng xref

  • Offset được chỉ định đôi khi có thể rơi vào chính giữa nội dung của bảng xref
  • Phát hiện khoảng 5 trường hợp trong 3.977 mẫu

Con trỏ nằm gần xref

  • Nhiều khi con trỏ không chính xác hoàn toàn, nhưng chỉ lệch khỏi xref đúng bằng khoảng trắng hoặc ký tự xuống dòng ngay trước hoặc sau nó

Con trỏ đúng nhưng offset xref lại sai

  • Bản thân offset được ghi trong bảng xref cũng có thể sai
  • Có thể một số đối tượng là đúng, còn những đối tượng khác lại có lỗi offset

Con trỏ đầu tiên bình thường nhưng offset trước đó (/Prev) lại bất thường

  • Có nhiều trường hợp con trỏ /Prev được tạo ra khi chỉnh sửa PDF chứa giá trị sai, chẳng hạn 0

Bảng xref có định dạng bất thường

  • Có nhiều dạng như xref dính liền với số mà không có xuống dòng, có nhiều mục hơn số đối tượng đã khai báo, hoặc có dữ liệu rác chen giữa bảng
  • Nhiều trường hợp như vậy đã được báo cáo thành issue trong PdfPig và các dự án khác

Kết luận

  • Theo đặc tả, việc phân tích PDF phải được xử lý theo một trình tự chuẩn hóa, nhưng trong thực tế nhiều tệp không như vậy nên phát sinh rất nhiều vấn đề khi phân tích
  • Các trình xem PDF dùng trong thực tế mặc định đều bao gồm khả năng mở rộng hỗ trợ PDF không đúng chuẩn
  • Nội dung tóm tắt lần này chỉ đề cập đến một phần nhỏ của việc phân tích trong đặc tả PDF (22 trên tổng 1300 trang)

Chưa có bình luận nào.

Chưa có bình luận nào.