File Signature - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : File Signature (/showthread.php?tid=15807) |
File Signature - silverlight - 26-05-16 السلام عليكم ورحمة الله وبركاته هذا الموضوع الهدف منه توضيح ماهية File Signature الخاصة بجميع الملفات الشهيرة و المعروفة لنظام التشغيل في جهاز الكمبيوتر ما هو File Signature هو عبارة عن خليط من حروف و أرقام يتم إضافتها في بداية الملف ومن خلاله تستطيع تحديد هوية الملف و هذا الخليط من الحروف و الأرقام يعمل بمثابة ختم أو Stamp للملف ومنه يستطيع نظام التشغيل Operating System الموجود علي جهاز الكمبيوتر الخاص بك تحديد نوعية البرنامج الذي يصلح لفتح الملف بشكل عام هذا الخليط من الأرقام و الحروف يتم كتابته الي الملف علي هيئة بايت Byte أيضا هذا الخليط غالبا له قيمة ثابتة و في بعض الأحيان تقوم الشركات بتغيير قيمة هذا الخليط طبقا لإحتياجاتها وأيضا كل شركة شهيرة من شركات الكمبيوتر تستخدم قيمة خاصة بها حسب نوعية الملفات وكمثال توضيحي للفكرة لنفترض أنك قمت بتشغيل برنامج Paint ثم فتحت ملف جديد من خلال البرنامج و سواء رسمت أو لم ترسم شيئا في الملف ثم قمت بحفظ الملف هنا يقوم برنامج Paint بإضافة قيمة معينة وهذه القيمة ممثلة في الحرفان BM ويتم اضافة هذان الحرفان في بداية الملف بحيث يعمل هذان الحرفان بمثابة التوقيع لهذا الملف و يحلو للبعض أن يطلق علي هذه القيمة اسم File Signature و البعض الأخر يحلو له أن يطلق عليها الإسم Magic Number أيضا هناك بعض الشركات قد تضيف هذه القيمة إما في نفس الملف أو تضيفها في ملف أخر منفصل و لكي تتأكد مما أقول حاول أن تفتح أي مللف يكون له الامتداد BMP بأي برنامج Hex Editor و حينها ستري شئ مشابه للصورة الموجودة في المرفقات فوائد File Signature من خلاله يتم تحديد نوع الملف حتي و ان كان الملف لم يكن له أي امتداد من خلاله يتم تحديد نوع البرنامج الذي يصلح لفتح الملف من خلاله يتم ربط البرنامج مع الملفات التي لها نفس الامتداد وهذا الامر مفيد في عمل امتداد خاص ببرنامجك من خلاله قد تستطيع من تحديد معرفة اسم الشركة المنتجة للملف طبعا ربما هناك فوائد اخري و الأمر هنا متروك لمخيلة القارئ للتفكير في اي فوائد اخري أو في التفكير في كيفية الاستفادة من هذا الموضوع في برامجه الخاصة الكود كمثال لناخذ الملفات التي من النوع PDF وهي ملفات شهيرة ومعروفة للجميع و قيمة File Signature لهذا النوع من الملفات كالتالي وهذه القيمة تم أخذها من أحد المواقع الشهيرة علي شبكة الانترنت و هو موقع Wiki وتم كتابتها علي شكل كود لتوضيحها فقط PHP كود : Dim pdf_Extension As String = "pdf" بشكل عام لو حاولت تحويل المتغير pdf_Ascii من String الي HexString ستجد أن الناتج يساوي قيمة المتغير pdf_HexString والكود التالي يوضح ذلك PHP كود : Dim sb As New System.Text.StringBuilder عموما لا تعتمد كثيرا علي هذا الأسلوب في تحويل البيانات لأنك ستكتشف ان بعض الملفات قد لا تلتزم بنفس منهج تحويل المتغيرات عند كتابة File Signature الي الملف كمثال علي ذلك الملفات من النوع PNG PHP كود : Dim png_Extension As String = "png" لذلك لا تنخدع أو لا تتسرع و تقوم بتحويل البيانات عن طريق كتابة دالة لتحويل الحروف التي تخص File Signature ASCII الي Hex String لأنك قد تحصل علي شئ مختلف أحيانا ملحوظة هامة: هناك حالات قد تجد أكثر من قيمة لنفس النوع من الملفات علي سبيل المثال الملفات التي إمتدادها CAB لها قيمتان أيضا الملفات من النوع GIF لها قيمتان مثلا الملفات التي إمتدادها ينتهي بالحروف[b] CAB والخاصة بشركة مايكروسوفت سنجد أن قيمة File Signature الخاص بها كالتالي [/b] PHP كود : Dim cab_MS_Extension As String = "cab" بينما نفس الملفات و التي هي من انتاج البرنامج الشهير Install Shield سنجد أن القيمة لها كالتالي PHP كود : Dim cab_InstallShield_Extension As String = "cab" مثال أخر الملفات من النوع GIF لها قيمتان القيمة الأولي كالتالي PHP كود : Dim gif87a_Extension As String = "gif" والقيمة الثانية للملفات من النوع GIF كالتالي PHP كود : Dim gif89a_Extension As String = "gif" لذلك وعند التأكد من File Signature الخاص بالملفات والتي لها أكثر من Signature يجب علينا دائما أن نتأكد من جميع القيم كما في حالة الملفات التي لها امتداد GIF يجب هنا ان نتأكد من القيمتان معا مثال أخر الملفات المضغوطة من النوع RAR لها قيمتان أحدهما تعبر عن الملفات من version 1.5 حتي النسخة version 5 من نفس البرنامج ثم من النسخة version 5 فيما فوق لها رقم اخر للأسف وكما تلاحظون أن هذا File Signature قد يتم تغييره لأي أسباب بواسطة الشركات المنتجة للملفات لذلك و عند التأكد من File Signature يجب دوما ان نراعي اي تعديلات تقوم بها الشركات المختلفة كيف نقرأ File Signature الخطوات التالية توضح الكيفية أولا: نحتاج الي حفظ جميع المعلومات عن الملف علي هيئة داتا بيز وهذه المعلومات يتم تجميعها من المواقع المختلفة علي النت أو بأي صورة تجدها مناسبة لك و ما يهمني هنا من تلك البيانات التي يتم تجميعها هي قيمة المتغير HexString الخاصة بكل نوع من الملفات ثانيا: نقوم بتحويل البيانات الخاصة بالمتغير HexString الي مصفوفة Byte ثالثا: نقوم بقراءة الملف المطلوب التاكد من Signature الخاص به الي Stream رابعا: نقوم بقراءة Header الخاص بالملف وهو هنا عبارة عن مصفوفة من Byte خامسا: نقارن بين تلك القيمة التي نقرأها من File Header مع قيمتها الموجودة في الداتا بيز الخاصة بالملفات فإن تساوت القيمتان هنا نستطيع تحديد نوع الملف طبعا الكلام النظري قد يكون غير مفهوم قليلا للبعض لذلك لنقوم بصياغته بشكل عملي و تحويله الي أكواد و سنأخذ الملفات من النوع PDF كمثال PHP كود : ' المرحلة الأولي بالطبع و من الأفضل تحويل الكود أعلاه الي كلاسات تحتوي علي دوال و اجراءات حتي نستطيع التعامل مع جميع الملفات المعروفة كمثال الكود التالي يوضح شكل الدالة التي من الممكن استخدامها لتحويل بعض البيانات من مصفوفة من النوع Integer الي مصفوفة من النوع Byte PHP كود : Private Function ToBytes(hexValues As Integer()) As Byte() مثال أخر الكود التالي يوضح شكل الدالة التي من الممكن استخدامها لقراءة الملف المراد تحديد File Signature الخاص به و تحويله الي Stream PHP كود : Public Function FileToStream(filePath As String) As IO.FileStream مثال أخر الكود التالي يوضح شكل الدالة التي من الممكن استخدامها لمقارنة مصفوفة File Signature و المصفوفة التي نقرأها من File Header الخاص بالملف PHP كود : ''' <summary> لمزيد من التفاصيل عن File Signature يمكنكم زيارة الروابط التالية و الاستفادة من المعلومات الموجودة بها File Signatures RE: File Signature - الوادي - 26-05-16 يا سلفر، مشكور على هذا المجهود الكبير. RE: File Signature - Sajad - 27-05-16 بارك الله فيك موضوع مهم جدا تحياتي لك موفق ان شاءالله RE: File Signature - CLARO - 28-05-16 مشكوووووووور RE: File Signature - myalsailamy - 08-11-16 مشكور على هذا الموضوع الجميل معلومات قيمه ، انا مطور تطبيقات ويب لذلك من المعتاد أن يكون هناك رفع ملفات على الموقع من جهة المستخدم لذلك أعجبني الموضوع في عملية اذا اردت بناء تطبيق أمن جدا بحيث يتحقق تماما من أن الملف صحيح و مسموح برفعه وليس ملف مفيرس و تم تغيير امتداده الى ملف مسموح به على الموقع RE: File Signature - egbest2 - 29-05-19 شكرا جدا على الموضوع الاكثر من رائع _______________________________________________ التسامح الحق لا يستلزم نسيان الماضي بالكامل.. سينما كلوب ايجي بست شاهد فور يو سيرا اون لاين مشاهدة فيلم |