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

تولید قفل و روش های شکستن آن


تولید قفل و روش های شکستن آن

یکی از دغدغه های امروز در حوزه فناوری اطلاعات و فضای سایبر, برقراری امنیت است

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

● مقدمه

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

● انواع قفل‌ها

الف) قفل‌های سخت‌افزاری

ب) قفل‌های نرم‌افزاری

ج) قفل‌های CD، DVD و غیره

د) قفل‌های اینترنتی

الف) قفل‌های سخت‌افزاری

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

▪ روش اول قفل گذاری سخت‌افزاری

روش اول قفل گذاری به این صورت است که تولید کننده نرم‌افزار یک یا چند بایت از اطلاعات را در قفل نوشته و برنامه در هنگام اجرا آن را چک می‌کند. در صورتی که قفل وجود داشته باشد، برنامه به کار خود ادامه می‌دهد و اگر قفل وجود نداشته باشد و یا اطلاعات خوانده شده از روی قفل صحیح نباشد، برنامه متوقف شده و با اعلام خطا، از اجرای صحیح، سر باز می‌زند. این نوع قفل‌ها دارای ساختاری ساده، حافظه‌ای در حد چند بایت و قیمتی ارزان هستند. استفاده از این قفل‌ها بسیار ساده بوده و نیاز به تخصص خاصی ندارد، تنها کافی است نرم‌افزار ویژه قفل را (که توسط شرکت تولید کننده قفل ارایه شده) اجرا کرد. در ابتدا که قفل فاقد اطلاعات است، اول یک کلمه دلخواه، به عنوان کلمه عبور درخواست کرده و سپس با توجه به نوع قفل، یک یا چند کلمه اطلاعات را دریافت و در حافظه قفل ثبت می‌کند. پس از ثبت اطلاعات در قفل، تولید کننده نرم‌افزار، اطلاعات ثبت شده در یک برنامه را چک می‌کند که نحوه چک کردن اطلاعات، با توجه به نوع قفل متفاوت است. در بعضی فقط اطلاعات درون قفل چک می‌شود و در بعضی دیگر، در مرحله اول وجود قفل چک شده و در مرحله بعدی، اطلاعات درون آن چک می‌شود.

▪ روش دوم قفل گذاری سخت‌افزاری

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

ب) قفل‌های نرم‌افزاری

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

الف) اعتقاد طراح نرم‌افزار به اینکه کاربر حتما باید آن را خریداری کند تا از امکانات آن مطلع شود.

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

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

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

▪ محدودیت در تعداد کپی (Copy Limited)

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

▪ استفاده از دیسکت در هنگام اجرای برنامه (Required Disk)

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

▪ روش‌های قفل گذاری نرم‌افزاری

در ادامه چند نمونه از روش‌های قفل گذاری نرم‌افزاری و نحوه طراحی آن آورده شده است.

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

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

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

در این نوع قفل نرم‌افزاری، برنامه قبل از اجرا ابتدا مشخصات سیستم را خوانده (که این کار از طریق مراجعه به بخش‌های خاصی از حافظه و یا مراجعه به اطلاعات BIOS انجام می‌شود.) سپس آن را با فایلی که قبلا توسط نویسنده نرم‌افزار بر روی کامپیوتر کپی شده، مقایسه می‌کند و در صورت عدم برابری، اجرای برنامه پایان می‌پذیرد. درصد اطمینان این نوع قفل ۶۵ تا ۷۵ درصد است.

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

این نوع قفل فقط بر روی هارد دیسک قابل استفاده بوده و به این صورت است که فایل اجرایی به موقعیت خود بر روی هارد حساس است چرا که قبل از اجرا ابتدا موقعیت خود را از روی سکتورهای ROOT خوانده و سپس شماره کلاستر اشاره‌گر به خودش را به دست می‌آورد، سپس آن را با شماره کلاستری که قبلا توسط برنامه نویس بر روی یکی از فایل‌های برنامه (ممکن است به‌صورت کد شده باشد) قرار داده شده، مقایسه کرده و در صورت برابر بودن اجرا می‌شود. ضریب اطمینان این نوع قفل نیز ۷۰ تا ۸۰ درصد است.

۴) قفل با استفاده از فرمت غیر استاندارد

این شیوه یکی از رایج‌ترین قفل‌های نرم‌افزاری است که هنوز هم به‌صورت جدی مورد استفاده قرار می‌گیرد. سیستم عامل برای دسترسی به اطلاعات یک دیسکت از فرمت خاصی (۱۸ سکتور در هر تراک) استفاده می‌کند اما اگر یک تراک به صورت غیر استاندارد فرمت شود (مثلا ۱۹ سکتور در تراک) سیستم عامل دیگر توانایی استفاده از سکتورهای غیرمجاز را نخواهد داشت و بنابراین تمام نرم‌افزارهای تحت سیستم عامل مزبور نیز از سکتورهای مخفی استفاده نکرده، در نتیجه امکان کپی برداری از آنها بسیار ضعیف است. از همین روش برای طراحی قفل مورد نظر استفاده می‌شود. قفل نرم‌افزاری Copy Control که معروف‌ترین در نوع خود است، از همین روش استفاده می‌کند. این قفل فقط برای فلاپی دیسک قابل استفاده است و درصد اطمینان در این روش حدود ۸۵ تا ۹۵ درصد می‌باشد.

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

این روش قفل گذاری که قوی‌ترین قفل است، مخلوطی از روش‌های ۱ و ۴ است، یعنی ابتدا تراک خاصی را به‌صورت غیر استاندارد فرمت کرده و سپس اطلاعات خاصی را درون آن قرار می‌دهند (شماره سریال فرضی) . این قفل فقط برای فلاپی دیسک قابل استفاده بوده و ضریب اطمینان آن حدود ۹۰ تا ۹۸ درصد است.

۶) قفل‌های اکتیو ایکس

در واقع یک اکتیو ایکس که مانع اجرای برنامه در شرایط خاصی شود را قفل اکتیو ایکس می‌نامند. این نوع قفل مانند سایر کامپوننت‌های برنامه نویسی است. برنامه نویس به سادگی آن را بر روی فرم برنامه خود قرار می‌دهد و با تنظیم پارامترها و خصوصیات آن، سبب فعالیت آن می‌شود. این اکتیو ایکس قبل از قرار گرفتن فرم اصلی در حافظه، شروع به کار می‌کند و اگر برای اولین بار اجرا می‌شود برحسب اندازه حافظه، شماره سریال و سرعت پردازنده کد ویژه ای تولید می‌کند این کد تولید شده وابسته به خصوصیات کامپیوتر است بنابراین کد برگشتی این اکتیو ایکس بر روی هر سیستمی متفاوت خواهد بود. پس از ارایه کد، کد معادل آن را از کاربر درخواست می‌کند. کاربر با ارایه کد تولید شده به شرکت تولید کننده نرم‌افزار، کد معادل آن را دریافت می‌کند. این کد را کاربر از طریق تلفن یا پست الکترونیکی و یا اینترنت دریافت می‌کند. در صورتی که کد معادل دریافت شده پس از کد شدن معادل کد ارایه شده باشد یا به عبارتی کد ارایه شده از طرف کامپیوتر مکمل کد دریافت شده از شرکت باشد، اکتیو ایکس اجازه می‌دهد برنامه بدون اشکال شروع به کار کند. کاربر نیز می‌تواند بارها از این کد بر روی کامپیوتر خود (کامپیوتری که کد دریافت کرده) استفاده کند. پس از ورود کد، این کد در مکانی از سیستم مثلا رجیستری یا یک فایل به‌صورت کد شده قرار می‌گیرد و هر بار کامپیوتر برنامه را اجرا کند به جای درخواست کد از کاربر، کد را از رجیستری یا فایل پس از کدیابی مورد استفاده قرار می‌دهد.

▪ نقاط ضعف:

ـ قفل‌های اکتیو ایکس به دریافت کد از شرکت نیاز دارند یعنی کاربر باید به نحوی با شرکت تولید کننده تماس بگیرید و نمی‌تواند برنامه را پس از خرید بلافاصله استفاده کند.

ـ قفل‌های اکتیو ایکس تنها بر روی یک سیستم اجرا می‌شوند و باید برای دریافت کد برای هر کامپیوتر اقدام شود (دشواری در نصب‌های تعداد بالا).

ـ در قفل‌های اکتیو ایکس ممکن است با فرمت کردن، پارتیشن بندی تغییر یابد که شرکت نمی‌تواند دقیقا حدس بزند این قفل برای این سیستم بوده یا واقعا تغییر کرده است. در اکثر قفل‌های ساخته شده تغییرات این کد بسیار مشاهده شده است.

ـ با صدمه دیدن قطعه‌ای از کامپیوتر و یا تعویض یک قطعه، برنامه تصور می‌کند که سیستم تغییر یافته است مثلا با تغییر حافظه سیستم.

▪ نقاط قوت:

ـ امنیت بالا برای برنامه نویس از نظر کپی برداری با تعداد بالا.

ـ دارای بیشترین امنیت نسبت به سایر قفل‌های نرم‌افزاری یا CD.

ـ سازگاری بسیار بالا نسبت به سایر قفل‌های نرم‌افزاری.

ـ قابلیت آمارگیری فروش برنامه توسط شرکت ارایه کننده کد معادل قفل‌های CD را می‌دهد.

ج) قفل‌های روی CD

با متداول شدن CDو یا لوح فشرده به عنوان بهترین، ارزان‌ترین و آسان‌ترین روش مبادله و تکثیر اطلاعات، نیاز به حفاظت از آن در برابر تکثیر غیرمجاز هر چه بیشتر احساس شد.

ج) روش‌های قفل گذاری روی CD

۱) یک روش قفل گذاری اجرای برنامه از روی CD است. در این حالت برنامه هنگام اجرا، به CD رجوع کرده و نقاط خاصی از آن را چک می‌کند. این نقاط بخش‌هایی هستند که به صورت فیزیکی علامت گذاری شده اند و در واقع به نوعی صدمه دیده اند و معمولا این خرابی با تابش اشعه لیزر انجام می‌شود. به این ترتیب نقاط معینی از CD به اصطلاح لیزرسوز می‌شود. این نقطه یا نقاط، به عنوان قفل CD عمل می‌کند و از عمل تکثیر یا کپی برداری و همچنین استفاده غیرمجاز از آن جلوگیری به عمل می‌آورد.

۲) قفل‌های حجمی: در این روش فایل‌های CD را به حدود چند گیگا بایت افزایش می‌دهند که امکان کپی شدن روی هارد را نداشته باشند. یکی از ساده‌ترین و عمومی‌ترین روش‌هایی که تاکنون برای حفاظت از CD دیده شده، افزایش مجازی طول چند فایل درون CD است به نحوی که آنها تا چند صد مگا بایت به نظر می‌رسند. برای انجام چنین کاری تنظیمات مربوط به طول آن فایل را در Image بر روی هم قرار می‌دهند ولی برنامه حجم واقعی هر فایل را می‌داند و عمل خواندن را تا آن نقطه انجام می‌دهد. بنابراین برنامه به خوبی کار می‌کند.

۳) یکی از روش‌های نادر برای حفاظت از CDها کنترل بر روی درایو CD است. از این روش بیشتر در حفاظت بازی‌ها استفاده می‌شود و نحوه ایجاد آن به دانش بالایی نیاز دارد. روش آن چنین است که اطلاعاتی نادرست (عمدی) در قسمت ECC (تصحیح خطا) یک سکتور داده نوشته می‌شود. CD نویس‌های استاندارد به‌صورت خودکار این خطاها را هنگام نوشتن تصحیح می‌کنند. هنگام خواندن، برنامه سکتور داده را به‌صورت RAW و بدون تصحیح خطا در حافظه برای تطبیق با داده‌های اصلی بار می‌کند و در صورت تناقض با داده‌های اصلی، برنامه اجرا نمی‌شود.

۴) متداول‌ترین روشی که برای محافظت از CDدیده می‌شود، ایجاد فاصله‌هایی (gaps) غیراستاندارد ما بین تراک‌های صوتی و قرار دادن اندیس‌ها در مکان‌هایی دور از انتظار است. CDکه با این روش قفل گذاری می‌شود در بسیاری موارد توسط نرم‌افزارهای کپی برداری معمولی و CDنویس‌هایی که از Disc at once پشتیبانی نمی‌کنند غیرقابل کپی برداری است. ولی با پیشرفت تکنولوژی، این روش نیز به سرعت در حال کناره گیری است.

۵) امروزه قرار دادن فاصله خالی یا سوراخ گذاری بر روی CDمتداول شده است. به این ترتیب بسیاری از برنامه‌ها که قصد خواندن یک تراک از ابتدا تا انتها را دارند با مشکل مواجه می‌شوند.

۶) با استفاده از دستکاری TOC سی دی. یک قفل ساز سعی دارد با دستکاری TOC اطلاعاتی دروغین را به CD پیوند بزند. TOC در واقع اولین تراک از CD است که اطلاعات CD مثل اندازه فایل‌ها بر روی CD، چگونگی قرار گرفتن آنها و غیره را در خود نگهداری می‌کند.

د) قفل‌های اینترنتی

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

▪ تکنیک‌های شکستن قفل‌های نرم‌افزار

۱) تغییرJMP: بعضی از نرم‌افزارها طوری نوشته می‌شوند تا فقط در صورت وارد شدن شماره سریال صحیح، برنامه به مرحله بعد برود و در غیر این صورت در همان مرحله بماند و یا از برنامه خارج شود. وقتی این نوع برنامه به کد اسمبلی تبدیل می‌شود، در کد اسمبلی دو دستور JMP داریم که یکی از آنها در صورت مساوی بودن عدد وارد شده با شماره سریال صحیح رخ می‌دهد و دیگری در صورت وارد شدن شماره سریال اشتباه. حال اگر جای این دو JMP عوض شود، نرم‌افزار با هر عددی به جز شماره سریال اصلی از آن مرحله خواهد گذشت. بنابراین در این روش قفل شکن بدون پی بردن به شماره سریال صحیح با ایجاد تغییر در برنامه باعث می‌شود هر شماره سریال دلخواه، به عنوان شماره سریال صحیح تشخیص داده شود.

۲) یافتن شماره سریال از داخل کد برنامه: در این روش وقتی یک شماره سریال توسط کاربر وارد شد، نرم‌افزار باید آن را با شماره سریال صحیح مقایسه کند تا به صحت یا اشتباه بودن آن پی ببرد. بنابراین در لحظه مقایسه، شماره سریال صحیح می‌بایست در جایی به طور موقت ذخیره شود تا امکان مقایسه ایجاد شود. این مکان موقتی می‌تواند محل خاصی از RAM یا جایی در هارددیسک و یا در رجیسترهای داخلی پردازشگر باشد. قفل شکنان حرفه ای قادرند با استفاده از نرم‌افزارهایی که هر نوع تغییر در RAM و هارددیسک و غیره را ثبت می‌کنند، شماره سریال واقعی را بیابند.

۳) Brute force attack: در این روش قفل شکنان برنامه‌ای را می‌نویسند که بتواند تمامی حالت‌های ممکن یک شماره سریال را وارد نرم‌افزار کرده و بالاخره شماره سریال واقعی را بیابد. البته استفاده از این روش ممکن است چند روز و یا بیشتر طول بکشد.

۴) کد رجیستر کردن (Registration Code): قفل شکنان برای کد رجیستر کردن توسط نرم‌افزار debugger مکان محاسبه کد از روی نام استفاده کننده را پیدا می‌کنند و به رابطه ریاضی بین این دو پی می‌برند.

۵) محدودیت زمانی Time trial: قفل شکنان برای از کار انداختن محدودیت زمانی از دو روش استفاده می‌کنند: یا روتین‌های چک کردن زمان را در برنامه پیدا کرده، آن را غیرفعال می‌کنند و یا زمان را طوری تغییر می‌دهند تا نرم‌افزار به تمام شدن دوره زمانی از پیش تعیین شده، پی نبرد. برای این کار معمولا برنامه‌ای می‌نویسند تا قبل از اجرای نرم‌افزار اصلی، زمان کامپیوتر را تغییر دهد.

● جمع بندی

با توجه به اهداف crackerها که شناسایی قفل و سپس شکستن این سد و نفوذ است، انواع آن به شرح ذیل تقسیم می‌شود:

▪ قفل‌هایی که شکستن آنها به منظور دستیابی به محصول صورت می‌گیرد.

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

هانیه کارخانه

کارشناس مرکز پدافند غیرعامل