একটি DOC ফাইল কি?
.doc এক্সটেনশন সহ ফাইলগুলি মাইক্রোসফ্ট ওয়ার্ড বা বাইনারি ফাইল ফর্ম্যাটে অন্যান্য ওয়ার্ড প্রসেসিং ডকুমেন্ট দ্বারা তৈরি নথিগুলিকে উপস্থাপন করে৷ এক্সটেনশনটি প্রাথমিকভাবে বিভিন্ন অপারেটিং সিস্টেমে প্লেইন টেক্সট ডকুমেন্টেশনের জন্য ব্যবহৃত হয়েছিল। এটিতে বিভিন্ন ধরণের ডেটা থাকতে পারে যেমন ছবি, ফর্ম্যাট করা পাশাপাশি প্লেইন টেক্সট, গ্রাফ, চার্ট, এমবেডেড অবজেক্ট, লিঙ্ক, পেজ, পেজ ফরম্যাটিং, প্রিন্ট সেটিংস এবং আরও অনেক কিছু। ম্যানুয়াল, প্রস্তাবনা, স্পেসিফিকেশন, জীবনবৃত্তান্ত, নিবন্ধ বা অনুরূপ নথি লেখার জন্য ব্যবহারকারীদের বিভিন্ন বিকল্পের কারণে বিন্যাসটি সব ধরণের ডকুমেন্টেশনের জন্য জনপ্রিয় ছিল। DOC-এর আপডেট করা সংস্করণ হল DOCX যা Office OpenXML-এর উপর ভিত্তি করে যার স্পেসিফিকেশন খোলামেলাভাবে উপলব্ধ।
সংক্ষিপ্ত ইতিহাস
WordPerfect, a product of Corel, used DOC as the extension of their proprietary format. In 1980s, WordPerfect remained the choice of usage on most of the computers due to its easy availability, conformance with most computer machines and Operating systems. However, WordPerfect saw its downfall on Windows OS when Microsoft introduced Microsoft Word as its product for documents file format and chose DOC extension for their proprietary format. As Microsoft Word became more and more popular, the DOC file format underwent several revisions from Microsoft Word 97 - 2003. এটি ছিল 2007 যখন ডিফল্ট DOC ফাইল ফরম্যাটটি Office Open XML ফরম্যাট (DOCX নামে পরিচিত) দ্বারা প্রতিস্থাপিত হয়েছিল এবং Microsoft Word এর নতুন সংস্করণগুলি এখন এই নতুন এক্সটেনশনটিকে ডিফল্ট ফাইল বিন্যাস হিসাবে ব্যবহার করে।
DOC ফাইল ফরম্যাট স্পেসিফিকেশন - আরও তথ্য
Microsoft didn’t release the DOC file format specifications for a long time until 2008. In Feb 2008, format specifications were released for .doc file format under the Microsoft Open Specification Promise. Though the specification does not describe all of the features used by the DOC format, it gives ample information about the knowledge required to work with this file format. Still, reverse engineering is required to make use of the available information. The specifications have been updated several times and the latest revision is 8.0 which was updated as of August 2018.
কিছু মৌলিক ধারণা
DOC-এর জন্য ফাইল ফরম্যাটের স্পেসিফিকেশন সম্পর্কে কোনো বিস্তারিত জানার আগে, এই ফাইল ফরম্যাটের সাথে কাজ করার জন্য কিছু মৌলিক ধারণা বুঝতে হবে।
ফাইল ইনফরমেশন বেস (ফাইব): ফিব স্ট্রাকচারে ডকুমেন্ট সম্পর্কে তথ্য থাকে এবং ডকুমেন্ট তৈরি করে এমন বিভিন্ন অংশের জন্য ফাইল পয়েন্টারগুলি নির্দিষ্ট করে। Fib হল একটি পরিবর্তনশীল দৈর্ঘ্যের কাঠামো। বেস অংশটি বাদ দিয়ে যা আকারে স্থির করা হয়েছে, প্রতিটি বিভাগের আগে একটি গণনা ক্ষেত্র রয়েছে যা পরবর্তী বিভাগের আকার নির্দিষ্ট করে।
চরিত্রের অবস্থান: CP বা অক্ষর অবস্থান একটি স্বাক্ষরবিহীন 32-বিট পূর্ণসংখ্যার প্রতিনিধিত্ব করে যা নথি পাঠে একটি অক্ষরের শূন্য-ভিত্তিক সূচক হিসাবে কাজ করে। ফাইলের প্রতিটি অক্ষরের অবস্থান এবং আকার সরাসরি পুনরুদ্ধার করা যায় না এবং পূর্ব-নির্দিষ্ট অ্যালগরিদম ব্যবহার করে গণনা করা প্রয়োজন। অক্ষর অন্তর্ভুক্ত:
নথির পাঠ্য
পাদটীকা বা টেক্সটবক্সের মতো বস্তুর অ্যাঙ্কর
নিয়ন্ত্রণ অক্ষর যেমন অনুচ্ছেদ চিহ্ন এবং টেবিল সেল চিহ্ন
PLC: PLC স্ট্রাকচার হল CP-এর একটি অ্যারে যার পরে ডেটা উপাদানগুলির একটি অ্যারে থাকে। যেকোনো PLC-এর ডেটা উপাদানগুলি অবশ্যই শূন্য বা তার বেশি বাইটের একই আকারের হতে হবে এবং এই কারণে, CP-এর সংখ্যা অবশ্যই ডেটা উপাদানগুলির সংখ্যার চেয়ে এক হতে হবে। পিএলসি স্ট্রাকচার বিভিন্ন ধরনের যেখানে প্রতিটি টাইপ নির্দিষ্ট করে যে সেই ধরনের জন্য ডুপ্লিকেট সিপি অনুমোদিত কিনা। একটি পিএলসি কাঠামোর মধ্যে রয়েছে:
aCP (ভেরিয়েবল দৈর্ঘ্য): CP উপাদানগুলির একটি অ্যারে। প্রতিটি ধরনের PLC কাঠামো CP উপাদানের অর্থ এবং অনুমোদিত পরিসীমা নির্দিষ্ট করে।
aData (পরিবর্তনশীল দৈর্ঘ্য): প্রতিটি ধরনের PLC কাঠামো ডেটা উপাদানগুলির গঠন এবং অর্থ, ডেটা উপাদানগুলির সংখ্যার উপর যে কোনও সীমাবদ্ধতা এবং এতে থাকা ডেটার উপর যে কোনও সীমাবদ্ধতা নির্দিষ্ট করে। এটি ডেটা উপাদান এবং সংশ্লিষ্ট CP-এর মধ্যে সম্পর্কও নির্দিষ্ট করে।
বৈধ নির্বাচন: .DOC ফাইলের গঠন প্রধানত CP-এর একটি পরিসর দ্বারা বর্ণনা করা হয়। এই ধরনের ক্ষেত্রে অনুসরণ করার জন্য মাইক্রোসফ্ট দ্বারা নির্দিষ্ট করা অনেকগুলি rules রয়েছে৷
STTB: STTB হল একটি স্ট্রিং টেবিল যা একটি শিরোনাম দ্বারা গঠিত যা উপাদানগুলির একটি অ্যারে অনুসরণ করে। cData মান অ্যারেতে থাকা উপাদানের সংখ্যা নির্দিষ্ট করে।
প্রপার্টি স্টোরেজ: একটি ওয়ার্ড ফাইলের বিভিন্ন উপাদান যেমন টেক্সট, অনুচ্ছেদ, টেবিল, ছবি এবং বিভাগ থাকতে পারে যেখানে প্রতিটির নিজস্ব বৈশিষ্ট্য থাকতে পারে। এগুলোর বৈশিষ্ট্যগুলি ডিফল্ট থেকে পার্থক্য হিসাবে Word ফাইলে সংরক্ষণ করা হয়। এই ধরনের পার্থক্যগুলি PRl দ্বারা নির্দিষ্ট করা হয় যা একটি একক সম্পত্তি পরিবর্তনকারী (Sprm) এবং এর অপারেন্ড নিয়ে গঠিত। একটি অ্যাপ্লিকেশন Prls এর তালিকা প্রয়োগ করে বৈশিষ্ট্যের চূড়ান্ত সেট নির্ধারণ করতে পারে।
পাসওয়ার্ড সুরক্ষা: ওয়ার্ড ফাইলগুলিও পাসওয়ার্ড সুরক্ষিত হতে পারে, যার জন্য নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করা যেতে পারে।
XOR অস্পষ্টতা
অফিস বাইনারি নথি RC4 এনক্রিপশন
অফিস বাইনারি নথি RC4 CryptoAPI এনক্রিপশন
যদি FibBase.fEncrypted এবং FibBase.fObfuscation উভয়ই 1 হয়, ফাইলটি XOR অস্পষ্টতা ব্যবহার করে অস্পষ্ট করা হয়।
যদি FibBase.fEncrypted 1 হয় এবং FibBase.fObfuscation 0 হয়, ফাইলটি অফিস বাইনারি ডকুমেন্ট RC4 এনক্রিপশন বা অফিস বাইনারি ডকুমেন্ট RC4 CryptoAPI এনক্রিপশন ব্যবহার করে এনক্রিপ্ট করা হয়, যার মধ্যে এনক্রিপশনহেডার TBSeyl-এর দ্বারা সংরক্ষিত হয়। EncryptionHeader.EncryptionVersionInfo ফাইলটি এনক্রিপ্ট করতে কোন এনক্রিপশন পদ্ধতি ব্যবহার করা হয়েছিল তা নির্দিষ্ট করে।
ফাইল স্ট্রাকচার
একটি বাইনারি ওয়ার্ড ফাইল এর মৌলিকত্ব একটি OLE যৌগিক ফাইল যা বেশ কয়েকটি স্টোরেজ এবং স্ট্রিম নিয়ে গঠিত। এই স্টোরেজ এবং স্ট্রিমগুলির নিজস্ব গঠন এবং আকার রয়েছে, যা লেখা এবং পড়ার জন্য পরামিতিগুলি নির্দিষ্ট করে৷ এইগুলো:
WordDocument স্ট্রীম
This stream contains the document text and other information referenced from other parts of the file. The stream has no predefined structure other than the FIB at the beginning which is mandatory and should be at offset 0. এই স্ট্রীম 2147 MB এর থেকে বড় হওয়া উচিত নয়৷
1টেবিলস্ট্রীম বা 0টেবলস্ট্রীম
একটি বাইনারি ওয়ার্ড ফাইলে টেবিল স্ট্রিম থাকতে পারে যা 1টেবিল স্ট্রিম বা 0টেবিল স্ট্রিম নামে পরিচিত। এর মধ্যে অন্তত একটি নথিতে উপস্থিত থাকতে হবে। যাইহোক, যদি একটি নথিতে 1Table এবং 0Table উভয় স্ট্রীম থাকে, শুধুমাত্র base.fWhichTblStm দ্বারা উল্লেখিত স্ট্রীম ব্যবহার করা হয়। রেফারেন্সহীন স্ট্রীম অবশ্যই উপেক্ষা করা উচিত। টেবিল স্ট্রীম 2147 MB এর থেকে বড় হওয়া উচিত নয়৷
তথ্য প্রবাহ
ডেটা স্ট্রিমের কোনো পূর্বনির্ধারিত কাঠামো নেই। এটিতে এফআইবি বা ফাইলের অন্যান্য অংশ থেকে উল্লেখ করা তথ্য রয়েছে। এই স্ট্রিমটি উপস্থিত থাকার প্রয়োজন নেই যদি এটির কোন উল্লেখ না থাকে। ডেটা স্ট্রীম 2147 MB এর থেকে বড় হওয়া উচিত নয়৷
অবজেক্ট পুল স্টোরেজ
অবজেক্ট পুল স্টোরেজে এমবেডেড OLE অবজেক্টের স্টোরেজ রয়েছে। নথিতে কোনো এমবেডেড OLE অবজেক্ট না থাকলে এই স্টোরেজটি উপস্থিত থাকার প্রয়োজন নেই।
কাস্টম এক্সএমএল ডেটা স্টোরেজ
কাস্টম XML ডেটা স্টোরেজ হল একটি ঐচ্ছিক স্টোরেজ যার নাম অবশ্যই MsoDataStore হতে হবে।
সংক্ষিপ্ত তথ্য প্রবাহ
সারাংশ তথ্য স্ট্রীম হল একটি ঐচ্ছিক স্ট্রীম যার নাম \005SummaryInformation হতে হবে, যেখানে \005 মান 0x0005 সহ অক্ষর, এবং স্ট্রিং আক্ষরিক \005 নয়।
নথির সারাংশ তথ্য স্ট্রীম
নথির সারাংশ তথ্য স্ট্রীম হল একটি ঐচ্ছিক স্ট্রীম যার নাম \005DocumentSummaryInformation হতে হবে, যেখানে \005 হল 0x0005 মান সহ অক্ষর, স্ট্রিং আক্ষরিক \005 নয়।
এনক্রিপশন স্ট্রীম
এনক্রিপশন স্ট্রীম হল একটি ঐচ্ছিক স্ট্রীম যার নাম অবশ্যই এনক্রিপশন হতে হবে। নিম্নলিখিত উভয় শর্ত পূরণ না হলে এই স্ট্রিমটি উপস্থিত হতে হবে না:
নথিটি অফিস বাইনারি ডকুমেন্ট RC4 CryptoAPI এনক্রিপশন দিয়ে এনক্রিপ্ট করা হয়েছে।
fDocProps মানটি EncryptionHeader.Flags-এ সেট করা আছে।
ম্যাক্রো স্টোরেজ
ম্যাক্রো স্টোরেজ হল একটি ঐচ্ছিক স্টোরেজ যাতে ফাইলের জন্য ম্যাক্রো থাকে। উপস্থিত থাকলে, এটি অবশ্যই একটি প্রজেক্ট রুট স্টোরেজ হতে হবে।
XML স্বাক্ষর সঞ্চয়স্থান
XML স্বাক্ষর সঞ্চয়স্থান হল একটি ঐচ্ছিক সঞ্চয়স্থান যার নাম হতে হবে _xmlsignatures৷
স্বাক্ষর প্রবাহ
স্বাক্ষর স্ট্রীম হল একটি ঐচ্ছিক স্ট্রীম যার নাম অবশ্যই _signatures হতে হবে। এই প্রবাহে ডিজিটাল স্বাক্ষর রয়েছে।
তথ্য অধিকার ব্যবস্থাপনা ডাটা স্পেস স্টোরেজ
ইনফরমেশন রাইটস ম্যানেজমেন্ট ডেটা স্পেস স্টোরেজ হল একটি ঐচ্ছিক স্টোরেজ যার নাম অবশ্যই \006DataSpaces হতে হবে, যেখানে \006 হল 0x0006 মানের অক্ষর, এবং স্ট্রিং আক্ষরিক \006 নয়। এই সঞ্চয়স্থানটি উপস্থিত থাকলে, সুরক্ষিত সামগ্রী স্ট্রীমটিও উপস্থিত থাকতে হবে৷ যদি এই সঞ্চয়স্থানটি উপস্থিত থাকে, তবে এই সঞ্চয়স্থান এবং সুরক্ষিত সামগ্রী স্ট্রীম ছাড়া অন্য সমস্ত নির্দিষ্ট স্ট্রীম এবং স্টোরেজগুলি [MS-OFFCRYPTO]-এ উল্লেখিত সুরক্ষিত সামগ্রী স্ট্রীম থেকে পড়া উচিত এবং যদি সেই স্ট্রিম এবং স্টোরেজগুলির মধ্যে কোনও সুরক্ষিত সামগ্রীর বাইরে বিদ্যমান থাকে স্ট্রিম, তারা উপেক্ষা করা উচিত.
সুরক্ষিত কন্টেন্ট স্ট্রীম
সুরক্ষিত বিষয়বস্তু স্ট্রীম হল একটি ঐচ্ছিক স্ট্রীম যার নাম অবশ্যই \009DRMCcontent হতে হবে, যেখানে \009 হল 0x0009 মান সহ অক্ষর, এবং স্ট্রিং আক্ষরিক \009 নয়। যদি এই স্ট্রীমটি উপস্থিত থাকে, তথ্য অধিকার ব্যবস্থাপনা ডেটা স্পেস স্টোরেজও উপস্থিত থাকতে হবে।