আমার একটি পিডিএফ ফাইল রয়েছে যা আমার পাঠক (জাথুরা) খুলবেন না। আমার অন্য পাঠক আছে (এমপিডিএফ) যা এটি খুলবে। আমি বিশ্বাস করি যে জাথুরা ফাইলের যাদু মান সনাক্ত করার উপর নির্ভর করে (প্রথম কয়েকটি বাইট) কারণ এটি পিডিএফ ছাড়াও অন্যান্য ফর্ম্যাটগুলি খুলতে পারে।
পরিদর্শন করার সময়, আমি লক্ষ্য করেছি যে এটি হিসাবে চিহ্নিত হয়েছে Java serialisation data, version 5
।
$ file document.pdf
document.pdf: Java serialization data, version 5
প্রথম কয়েকটি বাইট পরিদর্শন করা:
00000000: aced 0005 7572 0002 5b42 acf3 17f8 0608 ....ur..[B......
00000010: 54e0 0200 0078 7000 0389 9525 5044 462d T....xp....%PDF-
সাধারণত একটি পিডিএফ শুরু হবে %PDF
বাইট 0 দিয়ে।
আমি যদি প্রথম 27 বাইটগুলি সরিয়ে ফেলি তবে আমি ফাইলটি খুলতে পারি:
$ dd if=~/Downloads/file.pdf skip=27 bs=1 of=/tmp/file.pdf
আরও পরিদর্শন দেখায় যে ফাইলটি অ্যাপাচি এফওপি সংস্করণ 1.1 দ্বারা উত্পাদিত হয়েছিল। গুগলের বেশ কিছুটা সত্ত্বেও আমি পিডিএফের জন্য এই বিন্যাসের কোনও সন্ধান খুঁজে পাচ্ছি না।
এটি কি পিডিএফের জন্য বৈধ বিন্যাস?
আপডেটটি শিরোনামটিতে কিছুটা vedুকে পড়ে এটি জাভা সিরিয়ালযুক্ত অ্যারে বলে মনে হয় যেখানে 'অ্যারে' পিডিএফ ফাইলের ডেটা রয়েছে। আমি দিকে তাকিয়ে বৈশিষ্ট ধারাবাহিকতাতে প্রোটোকল এবং বিশেষ করে, ব্যাকরণ বিবরণ যা থেকে আমি 27 বাইট হেডার যেমন ডিকোড পারে:
AC ED
=STREAM_MAGIC
ফাইলের সামগ্রীটি সিরিয়ালাইজেশন প্রোটোকল হিসাবে চিহ্নিত করে।00 05
=STREAM_VERSION
সিরিয়ালকরণ সংস্করণ।75
=TC_ARRAY
72
=TC_CLASSDESC
00 02
= শ্রেণীর নামের দৈর্ঘ্য।5b 42
= শ্রেণীর নামur
AC F3 17 F8 06 08 54 E0
=SerialVersionUID
, শ্রেণীর ক্রমিক সংস্করণ সনাক্তকারী।02
= পতাকাSC_SERIALIZABLE
- অবজেক্ট সিরিয়ালাইজেশন সমর্থন করে।00 00
= এই শ্রেণিতে ক্ষেত্রের সংখ্যা (শূন্য!)78
=TC_ENDBLOCKDATA
।70
=TC_NULL
(অবজেক্টের কোনও প্যারেন্ট ক্লাস নেই)।00 03 89 95
= "অ্যারে" এর দৈর্ঘ্য = 231829 = বাইটগুলিতে ডেটার আকার
উত্তোলিত পিডিএফ প্রকৃতপক্ষে 231829 বাইট দীর্ঘ
$ dd if=document.pdf skip=27 bs=1 | wc -c
231829 bytes
এটি সূচিত করবে যে ফাইলটি দুর্নীতিগ্রস্থ নয় এবং প্রকৃতপক্ষে একটি জাভা সিরিয়ালযুক্ত অ্যারে যা পিডিএফ ডকুমেন্ট ধারণ করে। তবে এটিকে কি একটি বৈধ পিডিএফ হিসাবে বিবেচনা করা হবে?