یکشنبه, ۲۳ اردیبهشت, ۱۴۰۳ / 12 May, 2024
مجله ویستا

قفل های نرم افزاری چگونه طراحی می شوند


قفل های نرم افزاری چگونه طراحی می شوند

از آنجا كه متاسفانه قانون Copyright در تمام جهان بجز ایران و چند كشور دیگر اجرا می گردد, بحث كنترل كپی های غیرمجاز حساس تر می شود

با توجه به فزونی نرم افزار در سیستم های كامپیوتری از یك طرف و توانایی كنترل كپی های غیرمجاز ( از دیدگاه اقتصادی آن ) از طرفی دیگر دلیلی محكم جهت بررسی این شاخه از مهندسی نرم افزار می باشد.

از آنجا كه متاسفانه قانون Copyright در تمام جهان بجز ایران و چند كشور دیگر اجرا می گردد, بحث كنترل كپی های غیرمجاز حساس تر می شود. در این مقاله سعی بر این است تا علاوه بر آشنایی با انواع قفل های نرم افزاری و اختلاف آن ها با قفل های سخت افزاری, بتوانیم به عنوان طراح یك قفل نرم افزاری از محصولات نرم افزاری خودمان حمایت كنیم. ضمنا علاوه بر آشنایی با مفاهیم فوق, نوشتن روتین های ضد دیباگ و همچنین نحوه كد كردن اطلاعات نیز لحاظ شده است. لازم به ذكر است كه این مقاله حاصل تجربیات چند ساله و زحمات زیادی است كه تقدیم می گردد.

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

● آشنایی با قفل های نرم افزاری و سخت افزاری

تعریف قفل های نرم افزاری: به هر برنامه ای كه كنترل كپی آن فقط از طریق نرم افزار و بدون نیاز به سخت افزار اضافی قابل انجام باشد, گویند.

تعریف قفل های سخت افزاری: به هر برنامه ای كه كنترل كپی آن از طریق سخت افزار اضافی قابل انجام باشد, گویند.

با توجه به تعاریف فوق می توان به تفاوت قفل های سخت افزاری و نرم افزاری پی برد. قفل های سخت افزاری با توجه به اضافه كردن یك سخت افزار جدید به كامپیوتر ( اغلب از طریق ارتباط با پورت چاپگر ) برنامه خود را كنترل می كنند. برنامه قبل از اجرا ابتدا با توجه به مراجعه به آدرس سخت افزار نصب شده ( اضافه شده با استفاده از دستور Port ) به سخت افزار مورد نظر خود مراجعه كرده و در صورت یافتن آن, تست های مختلف اعم از تست رمز, خواندن اطلاعات و ... می تواند تصمیم گیری نماید. اما در قفل های نرم افزاری برنامه بدون نیاز به سخت افزار اضافی و با كنترل رسانه ذخیره سازی می تواند تصمیم گیری كند. ضمنا لازم به توضیح است كه هدف از طراحی قفل های نرم افزاری/ سخت افزاری این نیست كه هیچكس توانایی شكستن ( باز كردن ) آنرا ندارد بلكه مقصود بالا بردن سطح كنترل كپی های غیر مجاز تا حد ممكن می باشد. ( چرا كه می دانیم اطلاعات همه در یك سطح نیست. )

● طریقه استفاده از قفل نرم افزاری در برنامه مورد نظر

با توجه به نوع كاربرد برنامه ( كوچك وقابل كپی بر روی یك دیسكت, تحت شبكه و ... ) می توانیم از انواع روش هایی كه جهت حفاظت از نرم افزار در نظر داریم ( و متعاقبا توضیح داده خواهد شد ) استفاده كنیم. اما مساله قابل بحث این است كه چگونه از یك قفل منتخب استفاده نمائیم؟

جواب این سوال متغییر و وابسته به شرایط زیر می باشد:

الف) اعتقاد طراح نرم افزار به اینكه كاربر حتما باید آنرا خریداری نماید تا از امكانات آن مطلع گردد.

در این حالت قفل نرم افزاری در ابتدای شروع به كار برنامه كنترل می گردد حتی طراح می تواند در مواقع حساس نیز قفل را مجددا كنترل كند و یا در حالتی كه طراح واقعا سخت گیر باشد, می تواند در زمان های مشخصی از وجود قفل اطمینان حاصل نماید ( مثلا هر ۴ ثانیه ). البته در این حالت طراح باید روشی را كه جهت كنترل قفل استفاده می كند, نیز در نظر بگیرد.

ب) اعتقاد طراح نرم افزار به این كه كاربر می تواند از نرم افزار به عنوان نسخه نمایشی نیز استفاده كند.

طراح در این حالت می بایست در مكان های خاصی از برنامه, قفل را كنترل كند. مثلا در یك برنامه حسابداری می توان تمام بخش های سیستم را آزاد گذاشته ( یعنی برنامه نیازی به قفل نداشته باشد ) اما در صورتی كه كاربر مایل به استفاده از امكانات گزارشگیری سیستم باشد, قفل نرم افزاری در خواست گردد. مزیت این روش بر روش قبلی این است كه دیگر نیاز به طراحی نسخه نمایشی جهت مشاهده كاربران وجود ندارد.

● آشنایی با نحوه قفل گذاری بر روی یك برنامه

الف) طراح به سورس برنامه دسترسی دارد.

در این حالت طراح پس از انتخاب روش قفل گذاری, كافیست آنرا به زبان مورد نظر خود پیاده سازی نموده و در برنامه خود بگنجاند. ( كه مكان های قرار دادن قفل در عنوان قبلی توضیح داده شد. )

ب) طراح ( مجری پروژه ) به سورس برنامه دسترسی ندارد.

گاهی اوقات به یكسری برنامه های ارزشمندی برخورد می كنیم كه فاقد قفل هستند, بنابراین نیاز به قفل گذاری وجود دارد. ( البته این حالت بیشتر در كشور ما و چند كشور دیگر كه در آن ها قانون Copyright معنی ندارد, كاربرد دارد. ) جهت تزریق قفل به این گونه برنامه ها, نیاز به آشنایی كامل به ساختار فایل های اجرایی (EXE, COM, SYS, …) وجود دارد چرا كه باید برنامه ای طراحی كنیم تا همانند یك ویروس كامپیوتری به فایل اجرایی مشخصی بچسبد. البته جهت اینكار بهترین زبان برنامه نویسی, اسمبلی می باشد. ( بدلیل توانایی دخالت در روند اجرای برنامه )

البته در رابطه با نحوه نوشتن این گونه برنامه ها, روش های زیادی وجود دارد كه خود بحثی مجزا را می طلبد و از حوصله این مقاله خارج است.

ضمنا برای بالا بردن سطح امنیت برنامه لازم است تا یكسری كد های ضد دیباگ در برنامه گنجانده شوند. كدهای ضد دیباگ, دستوراتی به زبان اسمبلی هستند كه در حالت اجرای عادی برنامه, هیچ تغییری در روند اجرای نمی گذارند بلكه در صورتی كه برنامه توسط دیباگرها اجرا گردد ( مورد ارزیابی قرار گیرد ) بتواند از اجرای آن جلوگیری نماید. با اضافه كردن كد های ضد دیباگ به ابتدای برنامه ( یا قبل از كنترل قفل ) می توان احتمال دستكاری در برنامه را پائین آورد. ( نحوه نوشتن كد های ضد دیباگ در پیوست A آورده شده است.)

● آشنایی با روش های قفل گذاری و نحوه طراحی آن ها

۱) قفل گذاری با استفاده از شماره سریال اصلی دیسكت

همانطور كه می دانید, سیستم عامل جهت هر دیسكت یك شماره سریال واحد (UNIQUE) اختصاص می دهد, بطوریكه شماره سریال هر دو دیسكت با هم یكی نیستند. بنابراین همین خود یك راه تشخیص دیسكت كلید ( قفل ) می باشد.

جهت استفاده از این قفل می بایست شماره سریال دیسكت را خوانده و سپس در داخل برنامه آنرا كنترل نمائیم. یك راه ساده جهت خواندن شماره سریال, اجرای دستور VOL بصورت شكل مقابل است:

VOL >>C:DOSLCK.TMP

بعد با باز كردن فایل LCK.TMP, می توانیم به محتویات آن دسترسی پیدا كنیم. راه دیگر مراجعه به Boot Sector جهت كنترل قفل می باشد.

ضریب اطمینان این قفل در مورد دیسكت ها, ۵%-۲% بوده و در رابطه با هارد دیسك ۶۰%-۵۰% می باشد. دلیل این اختلاف این است كه در حالت قفل دیسكتی با كپی Boot Sector, قفل بر روی دیسكت دیگر قرار خواهد گرفت اما در رابطه با هارد دیسك اینكار به سادگی انجام پذیر نیست.

۲) قفل گذاری با استفاده از مشخصات سیستم

در این نوع قفل نرم افزاری, برنامه قبل از اجرا ابتدا مشخصات سیستم را خوانده ( كه اینكار از طریق مراجعه به بخش های خاصی از حافظه و یا مراجعه به اطلاعات BIOS انجام می شود. ) سپس آنرا با فایلی كه قبلا توسط نویسنده نرم افزار بر روی كامپیوتر كپی گردیده, مقایسه می كند و در صورت عدم برابری, اجرای برنامه پایان می پذیرد.

این نوع قفل هنوز هم در بسیاری از برنامه ها استفاده می گردد, اما نكته قابل ذكر این است كه جهت اطمینان بیشتر به قفل لازم است فایل حاوی مشخصات بصورت كد شده نوشته شده باشد تا امكان دستكاری آن توسط قفل شكنان به حد اقل ممكن برسد.

درصد اطمینان این نوع قفل ۷۵%-۶۵% می باشد.

۳) قفل با استفاده از موقعیت فایل روی هارد دیسك

این نوع قفل فقط بر روی هارد دیسك قابل استفاده بوده و به این صورت است كه فایل اجرایی به موقعیت خود بر روی هارد حساس می باشد چرا كه قبل از اجرا ابتدا موقعیت خود را از روی سكتورهای ROOT خوانده و سپس شماره كلاستر اشاره گر به خودش را بدست می آورد, سپس آنرا با شماره كلاستری كه قبلا توسط برنامه نویس بر روی یكی از فایل های برنامه ( ممكن است بصورت كد شده باشد ) قرار داده شده, مقایسه كرده و در صورت برابر بودن اجرا می شود.

این نوع قفل نسبت به قفل قبلی ( شماره ۲ ) استفاده كمتری داشته چرا كه در صورتیكه برنامه از روی بخشی از هارد به ناحیه دیگری انتقال یابد, اجرا نخواهد شد و این از نظر كاربر بسیار ناپسند می باشد. ( ضمنا امكان Defra, Scandisk, و ... نیز وجود ندارد چرا كه شماره كلاستر اشاره گر به فایل تغییر خواهد كرد. )

ضریب اطمینان این نوع قفل نیز ۸۰%-۷۰% می باشد.

منبع : IRITN.com


شما در حال مطالعه صفحه 1 از یک مقاله 2 صفحه ای هستید. لطفا صفحات دیگر این مقاله را نیز مطالعه فرمایید.