موضوع مقاله: قفل نرم‌افزاری | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # قفل نرم‌افزاری | مقدمه: این مقاله دربارهٔ شیوه و راهکارهای گوناگون طراحی و پیاده‌سازی قفل‌های نرم‌افزاری می‌باشد. | ## بخش 1: قفل نرم‌افزاری | ضرورت بکار بردن قفلهای نرم‌افزاری آنجا مشخص می‌شود که حاصل تلاش شبانه‌روزی یک برنامه‌نویس، به سادگی و بدون آنکه چیزی نصیب او شود مورد استفاده همگان قرار می‌گیرد. البته گونه دیگری از قفل‌ها وجود دارد که به جای نرم‌افزار از یک قطعه سخت‌افزاری برای جلوگیری از کپی و استفاده غیرمجاز استفاده می‌کند. اجزای اصلی قفلهای نرم‌افزاری برنامه اصلی برنامه اصلی، برنامه‌ای است که می‌خواهیم بر روی آن قفل بگذاریم، این برنامه باید بگونه‌ای تغییر کند که بدون اجرای ماژول گارد اجرا نشود. در این ماژول زمانی که کلید پیدا شود آنگاه به برنامه اصلی اجازه اجرا داده می‌شود. ماژول گارد قطعه کدی است که به برنامه اصلی اضافه می‌شود و به آن اجازه اجرا می‌دهد. ماژول گارد دو وظیفه اصلی دارد: الف) تشخیص کلید ب) تبدیل برنامه اصلی به یک فرم اجرایی که این عملیات باید کاملاً دور از چشم کاربران و به صورت محرمانه انجام شود. دستکاری ماژول گارد باید کاملاً غیرممکن باشد، همچنین باید با مخفی سازی رمزگذاری واستفاده از تله‌گذاری دی باگ به‌طور کامل نگهداری شود. (تله دی باگ قطعه کدی است که به ماژول گارد اضافه می‌شود و در صورت تغییر ماژول از اجرا برنامه اصلی جلوگیری می‌کند). کلید فیزیکی یک قطعه فیزیکی یا یک خصوصیت ویژه که به‌طور مصنوعی برای برنامه ساخته شده‌است. آشنایی با روش‌های قفل‌گذاری و نحوه طراحی آن‌ها قفل‌گذاری با استفاده از شماره سریال اصلی دیسکت همان‌طور که می‌دانید، سیستم‌عامل جهت هر دیسکت یک شماره سریال واحد (UNIQUE) اختصاص می‌دهد، بطوری‌که شماره سریال هر دو دیسکت با هم یکی نیستند؛ بنابراین همین خود یک راه تشخیص دیسکت کلید (قفل) می‌باشد. جهت استفاده از این قفل می‌بایست شماره سریال دیسکت را خوانده و سپس در داخل برنامه آن را کنترل نمائیم. ضریب اطمینان این قفل در مورد دیسکت‌ها ۵٪-۲٪ بوده و در رابطه با هارد دیسک ۶۰٪-۵۰٪ می‌باشد. دلیل این اختلاف این است که در حالت قفل دیسکتی، با عمل کپی Boot Sector، قفل بر روی دیسکت دیگر قرار خواهد گرفت اما در رابطه با هارد دیسک اینکار به سادگی انجام پذیر نیست. قفل‌گذاری با استفاده از مشخصات سیستم در این نوع قفل نرم‌افزاری، برنامه قبل از اجرا ابتدا مشخصات سیستم را خوانده (که اینکار از طریق مراجعه به بخش‌های خاصی از حافظه یا مراجعه به اطلاعات بایوس انجام می‌شود) سپس آن را با فایلی که قبلاً توسط نویسنده نرم‌افزار بر روی کامپیوتر کپی گردیده، مقایسه می‌کند و در صورت عدم برابری، اجرای برنامه پایان می‌پذیرد. این نوع قفل هنوز هم در بسیاری از برنامه‌ها استفاده می‌گردد، اما نکته قابل ذکر این است که جهت اطمینان بیشتر به قفل، لازم است فایل حاوی مشخصات به صورت کد شده نوشته شده باشد تا امکان دستکاری آن توسط قفل شکنان به حداقل ممکن برسد. قفل با استفاده از موقعیت فایل روی هارد دیسک این نوع قفل فقط بر روی هارد دیسک قابل استفاده بوده و به این صورت است که فایل اجرایی به موقعیت خود بر روی هارد حساس می‌باشد چرا که قبل از اجرا ابتدا موقعیت خود را از روی سکتورهای ROOT خوانده و سپس شماره کلاستر اشاره گر به خودش را بدست می‌آورد، سپس آن را با شماره کلاستری که قبلاً توسط برنامه‌نویس بر روی یکی از فایل‌های برنامه (ممکن است به صورت کد شده باشد) قرار داده شده، مقایسه کرده و در صورت برابر بودن اجرا می‌شود. این نوع قفل نسبت به قفل قبلی (شماره ۲) استفاده کمتری دارد، چون در صورتی که برنامه از روی بخشی از هارد به ناحیه دیگری انتقال یابد، اجرا نخواهد شد و این از نظر کاربر بسیار ناپسند می‌باشد. قفل با استفاده از فرمت غیر استاندارد این شیوه یکی از رایج‌ترین قفل‌های نرم‌افزاری است که هنوز هم به صورت جدی مورد استفاده قرار می‌گیرد. برخی از دلایل اهمیت آن عبارتند از: - امکان استفاده از روش‌های متفاوت در این روش - راحتی و سرعت زیاد به هنگام استفاده از آن - وجود ضریب اطمینان بالا و انعطاف‌پذیری زیاد آن - عدم وجود نرم‌افزار خاصی جهت باز کردن این نوع از قفل‌ها همان‌طور که می‌دانید سیستم‌عامل جهت دسترسی به اطلاعات یک دیسکت از فرمت خاصی (۱۸ سکتور در هر تراک) استفاده می‌کند، اما اگر یه تراک به صورت غیر استاندارد فرمت شود، (مثلاً ۱۹ سکتور در تراک) سیستم‌عامل دیگر توانایی استفاده از سکتورهای غیرمجاز را نخواهد داشت (برای مطالعه بیشتر در این مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) و بنابراین تمام نرم‌افزارهای تحت سیستم‌عامل مزبور نیز از سکتورهای مخفی استفاده نکرده، در نتیجه امکان کپی‌برداری از آن‌ها بسیار ضعیف است. استفاده از این روش این‌گونه است که تراک آخر دیسک را مثلاً به صورت یک سکتوری و با شماره ۲۰ فرمت کنید. سپس جهت کنترل دیسکت به سکتور فوق مراجعه کرده و در صورت وجود آن کنترل و اجرای برنامه را پی بگیرد. | ## بخش 2: قفل نرم‌افزاری | البته غیر از تغییر شماره سکتور می‌توان از اندازه غیرمجاز نیز استفاده کرد، یعنی به جای اینکه سکتورها را به صورت ۵۱۲ بایتی فرمت کنیم، از اندازه ۱۰۲۴, ۲۰۴۸ و … استفاده کنیم. (قفل نرم‌افزاری Copy Control که معروفترین در نوع خود می‌باشد، از همین روش استفاده می‌کند) این قفل فقط جهت فلاپی دیسک قابل استفاده می‌باشد و در صد اطمینان در این روش حدود ۹۵٪-۸۵٪ می‌باشد. قفل با استفاده از شماره سریال ساختگی این روش قفل‌گذاری که قویترین قفل می‌باشد، به صورت مخلوطی از روش‌های ۱ و ۴ می‌باشد. یعنی ابتدا تراک خاصی را به صورت غیر استاندرد فرمت کرده و سپس اطلاعات خاصی را درون آن قرار می‌دهند (شماره سریال فرضی). این قفل فقط جهت فلاپی دیسک قابل استفاده بوده و ضریب اطمینان آن حدود ۹۸٪-۹۰٪ می‌باشد. در زیر چند روش به عنوان مثال آورده شده‌است: الف: غیرفعال کردن وقفه‌ها جهت جلوگیری از اجرای مرحله به مرحله (Trace کردن) برنامه می‌توان وقفه‌های کنترلر ۸۳۵۹ را غیرفعال ساخت. (در مورد وقفه‌ها بحث‌های نسبتاً مفصل و کاملی در سایت میکرو رایانه انجام شده برای مطالعه بیشتر در این مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) آدرس این کنترلر ۲۱h بوده و IRQهای ۷–۰ را کنترل می‌کند IRQ۱ همان وقفه مربوط به صفحه کلید می‌باشد. (۰۳) حتماً بخاطر بسپارید که در پایان برنامه دوباره آدرس بردار وقفه تغییر داده شده را بازیابی کنید. در صورتی که این پرچم روشن شده باشد، مشخص است که دیباگر در پشت صحنه در حال اجراست. جهت خارج کردن فایل از حالت کد شده (Decode) نیز، کافیست مقدار فوق را از تمام بایت‌های فایل کم کنیم. ب: XOR کردن کل فایل در این روش نیز پس از خواندن کل فایل، تمام بایت‌های آن را با رشته کاراکتری یا عدد ثابت خاصی یای مانعةالجمع کرده و سپس مقدار جدید را در فایل حاصل ضبط می‌نمائیم. الف) یک امضای دیجیتالی که به عنوان کلید مورد استفاده قرار می‌گیرد و در هنگام کپی توسط نرم‌افزارهای کپی دیسک فشرده، کپی نمی‌شود. ب) عملیات مخفی سازی ج) استفاده از تله‌های دیباگ برای جلوگیری از دستکاری کد برنامه این دیسک‌های فشرده شامل یک ساختار درست‌شناسی می‌باشند، هنگامی که دیسک فشرده اصلی داخل درایور قرار می‌گیرد، ساختار درست شناسی، امضای دیجیتالی را چک می‌کند و در صورت موفقیت به برنامه اجازه بالا آمدن و اجرا می‌دهد. این قفل در دو نسخه مختلف ارائه شده که هر دو از لحاظ ساختار کاملاً شبیه به هم هستند و تنها تفاوت آن‌ها در فایلهایی است که بر روی دیسک فشرده ایجاد می‌کنند. این دیسک‌های فشرده در حدود ۱۰۰۰۰ سکتور غیرقابل خواندن دارد که معمولاً از سکتور ۸۰۰ شروع می‌شوند. در نسخه دو دیگر فایل‌های با پسوند Icd وجود ندارد، ماژول گارد نیز مستقیماً به داخل برنامه اصلی منتقل شده ولی بقیه فای‌ها موجودند. Secu Rom این قفل که توسط شرکت سونی به بازار عرضه شده‌است، بیشترین طرفدار را در بین شرکت‌های تولیدکننده دیسک فشرده دارد. این علامت‌گذاری که در آن یک سری داده خراب و غیرقابل کپی به دیسک فشرده اضافه می‌شود، هنگام صیقلی کردن دیسک فشرده انجام می‌شود. علاوه بر آن یک نوار دایره‌ای شکل که شامل این سکتورهای خراب می‌باشد در روی سطح دیسک فشرده قابل مشاهده‌است. در این متد هر دیسک فشرده دارای یک اثر انگشت منحصر به فرد است که توسط تمام دیسک خوان‌ها قابل خواندن است ولی فقط توسط دستگاه خاصی قابل تکثیر است. این اثر انگشت بدین صورت است که هنگام ساخت، یک نرم‌افزار ساختار دیسک‌های فشرده را چک می‌کند و با توجه به آن یک کد ۸ رقمی تولید می‌کند. | ## بخش 3: قفل نرم‌افزاری | این کد هشت رقمی هنگام نصب برنامه، بر روی سیستم نصب می‌شود و از آن پس برنامه هنگامی اجرا می‌شود که دیسک فشرده اصل در درایو باشد وگرنه اجرا نمی‌شود. میزان امنیت این قفل‌ها بسیار بالا بوده و به‌طور معمول کپی این دیسک‌های فشرده غیرممکن است. هنگامی که از یک دیسک فشرده اصلی استفاده می‌شود این امضا ظاهر شده و این باعث آشکار سازی(Decryption) برنامه‌های اجرایی و اجرای آن‌ها می‌شود. اما بر روی دیسک‌های فشرده کپی این امضا ظاهر نشده و در نتیجه برنامه اجرایی موفق به اجرا نمی‌شود در این‌گونه موارد یک پیغام مبنی بر کپی غیرقانونی ظاهر می‌شود یا نسخه نمایشی نرم‌افزار اجرا می‌شود. اما یکسری دادهها خاص بر روی قسمت‌هایی از دیسک فشرده(SubChannel) قرار می‌دهد که فقط توسط سرویس‌های آشکارسازی خودش قابل دستیابی است. این دیسک‌های فشرده، توسط دیسک فشرده درایوهایی که توانایی خواندن ونوشتن در حالت RAW و همچنین توانایی خواندن ونوشتن کانال‌های فرعی(SubChannel) را دارند قابل کپی هستند. ماژول گارد هنگام اجرا داده‌های خراب را چک می‌کند در صورت مطابقت به برنامه اجازه اجرا می‌دهد. CrypKey در این متد قفل‌گذاری که از سیستم کنترل زمان استفاده می‌کند، احتیاج به هیچ گونه کلیدی نیست. بدین ترتیب که فقط یک ماژول به نرم‌افزار اصلی اضافه می‌شود، هنگام نصب، این ماژول با توجه به مشخصات سیستمی از جمله شماره سریال دیسکها، یک کد تولید می‌کند. این کد تولید شده وابسته به خصوصیات ماشین است بنابراین بر روی هر سیستمی متفاوت است پس از ارائه کد، یک کد همسنگ آن را کاربر در خواست می‌کند. در صورتی‌که کد همسنگ دریافت شده پس از کد شدن معادل کد ارائه شده باشد یا به عبارتی دیگر کد ارائه شده از طرف کامپیوتر، مکمل کد دریافت شده از شرکت باشد برنامه اجزا اجرا می‌یابد. پس از ورود کد، این کد در مکانی از سیستم مثلاً ریجستری یا یک فایل به صورت کد شده قرار می‌گیرد و هر بار کامپیوتر برنامه را اجرا می‌کند به جای در خواست کد از کاربر، کد را از ریجستری یا فایل مورد نظر پس از کدیابی بکار می‌برد. با توجه به استفاده روزافزون از این قفل‌ها به بررسی نقاط ویژگی‌ها وکاستی‌های این قفل‌ها می‌پردازیم کاستی‌ها الف) این قفل‌ها نیاز به دریافت کد از شرکت دارند یعنی اینکه کاربر حتماً باید به شکلی با شرکت تولیدکننده تماس بگیرد؛ و نمی‌تواند برنامه را پس از خرید بلافاصله استفاده کند. ب) برای هر سیستم یک کد یکتا ارائه می‌شود و در صورت استفاده از چند سیستم باید برای دریافت هر کد جداگانه اقدام کرد ج) این کدها ممکن است با فرمت کردن یا پارتیشن‌بندی تغییر یابند. د) در صورت تغییر یا تعویض قطعه‌ای از قطعات سخت‌افزاری، برنامه تصور می‌کند که سیستم تغییر یافته و دیگر اجرا نمی‌شود. دیسک فشرده یک جدول مشخصات دارد که در مورد سایز فایل‌ها موقعیت واسم هر فایل روی دیسک فشرده اطلاعاتی در خود نگه می‌دارد. هنگامی که شرکت‌های نرم‌افزاری یک دیسک فشرده را تهیه می‌کنند، می‌توانند اندازه فایل‌ها را به‌طور دستی تغییر دهند این کار باعث می‌شود تا در زمان کپی، پیغامی مبنی بر بزرگ بودن اندازه دیسک فشرده و عدم امکان کپی توسط برنامه کپی صادر شود. روش شناسایی این متد بدین صورت است که به علت حجم بیش از اندازه فایها، ظرفیت دیسک فشرده، در حدود چند گیگا بایت می‌باشد. در این متد یکسری داده اضافی به دیسک فشرده اضافه می‌شود به‌طوری‌که محتویات دیسک فشرده از مقدار استاندارد، فضای بیشتری اشغال کند. برای مثل قرار دادن ۷۰۵ MB داده‌ها در یک دیسک فشرده با ظرفیت ۷۰۰ MB، اکثر دیسک درایوها توانایی خواندن و نوشتن این قسمت اضافی را ندارند و هنگام کپی دچار خرابی می‌شوند. روش شناسایی به این صورت است که محتویات دیسک فشرده کمی بیشتر از حد استاندارد دیسک فشرده، ظرفیت دارند. | ## جمع‌بندی | این روش قفل‌گذاری تا هنگامیکه دیسک‌های فشرده با ظرفیت بالا به بازار عرضه نشده بود، روش موفق بود.