وبلاگ شخصی علیرضا داودی

وبلاگ شخصی علیرضا داودی دانشجوی کارشناسی ارشد هوش مصنوعی

وبلاگ شخصی علیرضا داودی

وبلاگ شخصی علیرضا داودی دانشجوی کارشناسی ارشد هوش مصنوعی

وبلاگ شخصی علیرضا داودی

مطالبی که به نظرم جالب می آید را در این وبلاگ منتشر خواهم کرد.

تشخیص نوع فایل های بدون پسوند

يكشنبه, ۱۸ خرداد ۱۳۹۳، ۰۶:۱۶ ب.ظ

به طور عادی هر فایل دارای یک پسوند هست که مشخص کننده ی نوع فایل هست و هم به ما و هم سیستم عامل در مواردی کمک می کند. مثلا به سیستم عامل کمک می کند که به وسیله ی یک جدول نگاشت ساده هر فایل را با یک برنامه ی خاص باز کند و به ما در مواردی مثل شناسایی ماهیت واقی یک فایل برای مقاصد امنیتی و رفع اشکالات کمک می کند.

حال با فایل های بدون پسوند چه کار باید کرد؟ یا فایل هایی که افراد به خاطر مقاصد خاصی پسوندشان را تغییر می دهند!؟

بگذارید با یک مثال این مساله را باز کنم. فرض کنید فایلی به دست شما رسیده است (مثلا از طریق ایمیل)؛ پسوند این فایل jpg است. ولی آیا واقعا این یک فایل Jpg است؟! حتی اگر با باز کردن آن فایل یک عکس هم نشان داده شود نمی توان گفت که آن فایل یک ویروس نبوده است!! بله ویروس ها می توانند خود را به انواع فایل ها بچسبانند.

خوب در مواقعی مثل مورد بالا باید چه کار کرد؟

در این مواقع تنها راهکار استفاده از آنتی ویروس ها است. کاری که بیشتر آنتی ویروس ها انجام می دهند چک کردن هدر فایل است. به قسمتی از فایل که اطلاعاتی در مورد نوع فایل در آن وجود دارد، هدر فایل می گویند.

آنتی ویروس ها با بررسی کردن هدر فایل تشخیص می دهند که یک فایل واقعا از چه نوعی است. حال اگر تناقضی وجود داشت آن را گزارش می دهد.

اما تشخیص نوع یک فایل از روی هدر آن کار آسانی نیست. زیرا هزاران نوع فایل داریم که ممکن است برخی هدر ها تا حدی شبیه هم باشند. مثلا هدر فایل های اجرایی مثل dll ها و exe ها و ocx و ... بسیار شبیه هم هستند. ضمن اینکه خود این فایل ها داری انواع مختلفی هستند. به عنوان مثال 5 نوع فایل Jpg داریم.

برای حل این مشکل از یک الگوریتم امتیاز دهی استفاده می کنیم. یعنی یک هدر را می گیریم و با ویژگی های کلیدی آن را بررسی می کنیم و به هر نوعی که دارای آن ویژگی باشد امتیازی می دهیم و در نهایت نوعی که بیشترین امتیاز را کسب کرده باشد به عنوان محتمل ترین گزینه برای نوع آن فایل گزارش می دهیم.

در یک پروژه به خاطر نیاز به همچین برنامه ای بعد از تحقیق در اینترنت به برنامه ای به نام TrIDNet رسیدم. این برنامه از یک سری فایل xml که مشخصات کلیدی نوع های مختلف در آنها ذخیره شده است،برای تشخیص نوع فایل استفاده می کند. اما مشکلی که وجود داشت این بود که این برنامه فقط در نسخه ی 32 بیت منتشر شده است و نسخه ی 64 بیت که مورد نیاز ما بود، وجود ندارد. به گفته ی تیم توسعه دهنده ی این نرم افزار نسخه ی 64 بیت در آینده منتشر خواهد شد؛ ولی برای ما دیر بود.

به همین دلیل با استفاده از همان فایل های xml برنامه ای نوشتم که همان کار را انجام می داد.

به نظرم برنامه های این چنینی که تکنولوژی خاصی ندارد را باید در اختیار همگان قرار داد. این کار به توسعه ی سریعتر علم کمک می کند.

به همین جهت بنده سورس این نرم افزار را در اختیار عموم قرار می دهم که با ذکر نام استفاده کنند.


این برنامه با زبان c++ و کتابخانه ی Qt نوشته شده است.



دریافت سورس
عنوان: سورس برنامه ی تشخیص نوع فایل
حجم: 481 کیلوبایت
توضیحات: سورس برنامه

دریافت فایل اجرایی
عنوان: برنامه تشخیص نوع فایل
حجم: 16.7 مگابایت
توضیحات: فایل اجرایی برنامه تشخیص نوع فایل


موافقین ۱ مخالفین ۰ ۹۳/۰۳/۱۸
علیرضا داودی

نظرات  (۴)

سلام
دستور file توی لینوکس هم همین کار رو میکنه دیگه ؟
پاسخ:
سلام
چند نکته در مورد دستور file وجود داره:
  1. فقط مختص لینوکس هست
  2. از روش بایت های جادویی ( یا magic bytes) استفاده می کنه.

مورد اول برای کاربران ویندوز ایجاد مشکل می کنه.

مورد دوم هم چون استاندارد جهانی برای magic byte ها نیست، نمیشه برای تشخیص فایل ها فقط روی اونها حساب باز کرد. ضمن اینکه ممکنه فرمت های مختلف دارای magic byte یکسانی باشند.

سلام
dll های مورد نیاز رو از کجا بگیریم ؟
MSVCR100.dll
تشکر
پاسخ:
سلام
باید microsoft visual c++ runtime رو نصب کنید.
سلام آقا
آقا من هر 5 تا 64 بیتی اینو نصب کردم :
http://www.yasdl.com/35204/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-microsoft-visual-c.html

ولی هنوز ارور میداد.
دیگه دستی دو تا فایل mscvp100.dll و msvcr100.dll رو اضافه کردم.

الان 2 تا ارور میده :

http://upload.tehran98.com/upme/uploads/d29b0e59731dff781.png
http://upload.tehran98.com/upme/uploads/d29b541ead0f06342.png

: (

سلام یه سوال

فرض کنیم یک نرم افزار داریم که بر اساس پسوند فایل ها رو از اینترنت دانلود میکنه.

مثلا  می نویسیم jpg و اون تمام عکس ها با این پسوند رو دانلود میکنه . حالا اگر بخواهیم این نرم افزار تمام ویدئوهای بدون پسوند رو دانلود کنه چه پسوند یا تکسی رو بنویسیم؟

پاسخ:
سلام
اگر نرم افزارتون این قابلیت رو داره می تونید magic bits های هر فایل بدون پسوند رو بررسی کنید (یعنی تقریبا 1 کیلوبایت ابتدایی هر فایل بدون پسوند رو دانلود کنید و در اون به دنبال بیت های جادویی برگردید.)

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی