PDA

نسخه کامل مشاهده نسخه کامل : پیاده سازی سیستم قدرتمند حفاظت از فایلهای برنامه (File System Protection)



mbnsoft.ir
18-10-2011, 10:02
پس از ساخت یک نرم افزار توسط یک برنامه نویس و آماده کردن آن برای ارائه نهایی به مشتری ، یکی از مهمترین مباحثی که ذهن سازنده برنامه را درگیر خود خواهد کرد ، حفاظت از فایلهایی از برنامه است که در واقع قرار نیست کاربران برنامه از محتوی آنها سر در بیاورد.



مثال اول:

در یک برنامه آموزشی پس از تهیه فایلهای ویدئویی آموزش و نوشتن برنامه ای که این فایلها را برای کاربر به نمایش بگذارد ، نکته ای که مد نظر می باشد این است که فایلهای ویدئویی تنها در برنامه ای که شما نوشته اید قابل نمایش و پخش باشند. بدین شکل که اگر کاربری خواست فایلهای ویدئویی را بطور جداگانه کپی نموده و به دلخواه خود آنها را مثلا در Media Player ویندوز پخش کند ، این امکان وجود نداشته باشد چرا که در اینصورت ممکن است کاربر اصلا از برنامه ای که شما با زحمت فراوان تهیه نموده اید استفاده نکند و در اصل برنامه شما را دور بیندازد.



مثال دوم:

برنامه ای را در نظر بگیرید که قرار است مجموعه ای از تصاویر را در قالب خاصی نمایش دهد. در صورتی که برنامه شما از روش خاصی برای حفاظت از تصاویر مورد نظر استفاده نکرده باشد ، کاربر نهایی می تواند تصاویر دیگری را جایگزین تصاویر اصلی برنامه شما نموده و مجددا برنامه را به بازار ارائه نمایید. در این حالت به نظر شما چه پیش آمدهای احتمالی متوجه شما و مجموعه شما خواهد بود!!!؟



حتما با خود فکر می کنید که مشکل بسیار کوچکی می باشد و به راحتی قابل حل است. مثلا در مثال دوم با خود می گویید که تصاویر را به صورت Stream باز کرده و تغییرات لازم را انجام میدهیم و سپس آنرا به کاربر نمایش میدهیم. پس اگر این چنین است آیا در مثال اول نیز می توان از این روش ساده استفاده نمود؟ آیا کامپونتی که برای پخش فیلم از آن استفاده می کنید امکان بارگذاری فایل از طریق Stream را به شما خواهد داد؟ در مورد کامپونت Media Player ویندوز که اکثرا در برنامه های خود از آن استفاده می کنند جواب این سوال منفی است. پس با این حساب باید به دنبال روش دیگری که امکان حفاظت از فایلها را در تمامی حالتهای ممکن برای شما فراهم کند ، باشیم.

با توجه به مثال هایی که ذکر شد به عمق نیاز یک برنامه به چنین سیستم حفاظتی پی می بریم. سیستم حفاظت از فایلهای برنامه در واقع واسطی است ما بین برنامه و فایلهایی که قرار است به آن دستیابی پیدا کند. جهت پیاده سازی چنین سیستمی می بایست در ابتدا طریقه ی دستیابی برنامه به فایلها را در ویندوز بررسی کنیم.


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

همانطور که در تصویر مشاهده می کنید در ابتدا برنامه با فراخوانی تابع ReadFile از مجموعه توابع API موجود در هسته سیستم عامل (Kernel) درخواست خواندن از فایل را صادر می کند. سپس سیستم عامل درخواست را پردازش نموده و به لایه ی مدیر ورودی / خروجی (I/O) ارسال می کند. در این لایه صحت وجود فایل در مسیر مربوطه بررسی شده و پس از رسیدگی به خصیصه های دیگر فایل (File Attributes) از طریق تابع NtReadFile که از مجموعه توابع Kernel-Mode Driver است ، برای لایه ی درایورهای سیستم فایل ارسال می کند و پس از آن از طریق درایور دیسک ، فایل مربوطه از روی دیسک مقصد خوانده شده و محتویات فایل درخواستی به برنامه بازگشت داده می شود.

بدین ترتیب مشخص شد که با استفاده از تابع ReadFile چگونه می توان به فایل مورد نظر دسترسی پیدا کرد. این تابع در فرآیند حفاظت از فایل بسیار حائض اهمیت هستند. چرا که در واقع درگاه ارتباط بین برنامه شما و فایل مورد نظر بوده و در صورتی که بتوان راهی پیدا کرد که پیاده سازی این تابع را در خود برنامه انجام داد ، امکان تغییر در محتویات فایلهای درخواستی برنامه نیز میسر می شود.

به تعریف ساده تر اگر برنامه بتواند پس از درخواست فایلی و قبل از در دست داشتن آن به محتوی فایل دسترسی داشته و بتواند تغییرات مورد نیاز را در محتوی انجام داده و سپس آنرا به دست بگیرد ، بدین ترتیب محتوی فایل را می توان با روش دلخواه رمز گذاری کرد و قبل از باز کردن مجددا رمز گشایی نمود. به این روش از تکنیک رمز گذاری و رمز گشایی "On-the-fly encryption" یا به اختصار "OTFE" می گویند که به معنای "رمزنگاری در حین پرواز" است.



[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

همانطور که در تصویر بالا مشاهده می کنید امکان دسترسی به محتوی فایل ، خارج از تابع ReadFile وجود نخواهد داشت. بدین معنی که تمام فرآیند خواندن از فایل و ارائه محتوی آن به برنامه در دل خود تابع انجام می پذیرد. پس نتیجه ای که تا به اینجا می گیریم این است که ما می بایست پیاده سازی تابع ReadFile را در برنامه خود داشته باشیم. تا به محض اینکه برنامه فایلی را درخواست کرد با استفاده از تابعی که خود در برنامه پیاده کرده ایم ، عملیات خواندن از فایل صورت گیرد. حال این سوال پیش می آید که با استفاده از چه تکنیکی می توان توابع API ویندوز را در خود برنامه پیاده سازی کرد؟

ادامه مقاله:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید