کرک نرم افزار: کرک کردن روشی است که برای شکستن دسترسیهای نرم افزار رایانه یا کل سیستم امنیتی و معمولا با نیتهای مخرب استفاده میشود. این کار اگرچه از نظر عملکردی مشابه هک کردن است، اما اهداف و روشهای متفاوتی دارد.
کرک به هر شکل یا روشی که باشد، به معنای عبور از سیستم امنیتی است. در سادهترین حالت ممکن، کرک نرم افزار را میتوان به این صورت تعریف کرد: اصلاح نرم افزار برای حذف ویژگیهای ناخواسته یا باز کردن قفل و دسترسی به ویژگیهای بیشتر مانند ویژگیهای مشمول کپیرایت.
قبل از توضیح درباره خود کرک، لازم به یادآوری است که استفاده از نرمافزارهای کرک شده، خطرات و مشکلات خود را نیز دارد.
بهتر است این نرمافزارها را از منابع امن و قابل اعتماد دانلود کنید یا اگر ضرورت ندارد، چنین کاری را انجام ندهید. از خطرات استفاده از نرمافزارهای کرک میتوان به موارد زیر اشاره کرد.
• درباره ی هکرها مراقب باشید: دانلود و نصب نرمافزارهای کرک شده، رایانه یا گوشی شما را بسته به میزان دسترسیهای آن برنامه، در معرض خطر قرار میدهد. اطلاعات و دادههای شخصی شما در معرض خطر هستند؛ زیرا هکرها میتوانند به راحتی به فایلهای خصوصی شما دسترسی پیدا کنند.
• غیرقانونی است: همانطور که قبلا ذکر شد، دانلود و استفاده از یک نرم افزار دزدی، غیرقانونی است. البته میزان مجازات آن در کشورهای مختلف متفاوت است و در ایران شاید با استفاده از نرم افزارهای کرک شدهی خارجی به مشکلی برنخورید.
• خطرالوده شدن دستگاه: هیچ اطمینانی به آلوده نبودن نرم افزار کرک شده نیست. برای دانلود نرم افزار روی لینک خاصی کلیک میکنید، اما ممکن است با همان کلیک کامپیوتر خود را آلوده کنید.
• خطر دیتا لاست: فرض کنید که نرم افزاری را از سایتی غیرقانونی با قیمت ارزانتر خریداری کردهاید و آن نرم افزار کار نمیکند. شما هیچ ساپورت یا تضمینی از آن سایت نرم افزار دریافت نخواهید کرد و ممکن است که به دستگاهتان آسیب وارد شود. در صورتی که یک سایت رسمی در ازای خدمات ارائه شده، پشتیبانی و حفاظت از دادهها را نیز به شما میدهد.
کرک نرم افزار چیست؟
کرک نرم افزار حالتی است که شخصی یک نرم افزار را تغییر میدهد تا یک یا چند ویژگی آن را غیرفعال یا به طور کامل حذف کند. برای مثال استفاده رایگان از نرم افزارهایی که برای یک بخش یا ویژگیهای اضافه پول دریافت میکنند یا تبلیغات آزاردهنده دارند، مهمترین دلایل کاربرد نرمافزارهای کرک شده است.
کرک نرم افزار و استفاده از آن به دلیل نقض قانون کپی رایت در خیلی از کشورها غیرقانونی است. با این حال کرک کردن در حوزه مهندسی معکوس با اهداف آموزشی، قانونی در نظر گرفته می شود. در عین اینکه دعاوی و اقدامات زیادی برای جلوگیری از کرک کردن وجود دارد، اقدامات توسعهدهندگان نرم افزار برای جلوگیری از چنین کاری موفقیت کمی داشته است. برای کرک نرم افزارها حداقل از یکی از ابزارها یا تکنیکهای زیر استفاده میشود:
• کرک
کرک کد نرم افزار را میشکند تا تعداد روزهای دوره آزمایشی آن افزایش یابد. فرض کنید، برنامهای به شما یک دوره ۱۵ روزه میدهد. کرک ساخته شده برای آن نرم افزار میتواند با کرک کردن و تغییر کد نرم افزار، محدودیت دوره آزمایشی ۱۵ روزه را به چیزی در حدود ۳۶۵ یا ۳۶۵۰ روز افزایش دهد.
کرک، یک نرم افزار اضافی است که پس از نصب نرم افزار اصلی باید آن را اجرا کنید.
کرک از کاربر میخواهد که پوشه اصلی نصب نرمافزار و فایل نرمافزار اصلی داخل آن پوشه را جستجو کند. پس از دسترسی به آن فایل، کد را تغییر داده و دوره استفاده از آن نرم افزار را افزایش میدهد. کرکها بیشتر برای نرمافزارهایی که به اینترنت وصل نمیشوند، به درستی عمل میکنند.
(پچ)Patch
پچ در واقع فایل اصلی از قبل کرکشدهی نرم افزار است که به همراه نرم افزار اصلی در یک بسته ارائه میشود. کاربران بعد از نصب فایل اصلی باید نرم افزار اصلی را با فایل پچ آن نرم افزار جایگزین کنند. پچها موقعی که کرک ها از کار میافتند، برتری دارند. برخی از نرم افزارها به طور دورهای مجوز نرم افزار را با سرور خود از طریق اینترنت چک میکنند.
بنابراین مشکل کرکها این است که وقتی یک نرم افزار را کرک کردید، دفعهی بعدی که نرم افزار به اینترنت وصل شد، ممکن است کد آن را با سرور خود بررسی کند. اگر نرمافزار بهطور غیرقانونی فعال شود، به کاربر اطلاع میدهد که نرمافزار مجوز ندارد و تعداد روزهای معینی را در اختیار کاربر قرار میدهد تا آن را ثبت و یا مجوز اصلی را خریداری کند. در صورتی که پچ کد را تغییر میدهد و ویژگی بررسی مجوز نرم افزار را کلا حذف میکند.
Keygen یا کدساز
Keygen از نظر عملکردی محدود است. Keygen به شما امکان میدهد که کلیدهای (key) مجوز غیرقانونی برای نرم افزار ایجاد کنید. هر کلید تولید شده توسط keygen ممکن است کار نکند، یعنی ممکن است نرم افزار را ثبت یا فعال نکند. گاهی اوقات کاربران نیاز به تولید کلیدهای زیادی دارند و آنها را یکی یکی امتحان میکنند تا کلیدی را که درست کار میکند، به دست آورند.
توسعهدهنده Keygen الگوریتم مورد استفاده در نرمافزار اصلی را برای تولید کلیدهای آن نرمافزار خاص تحلیل کرده، سپس از همان الگوریتم در Keygen خود استفاده میکند. Keygenها برای طیف وسیعی از نرم افزارها ساخته شدهاند.
تاریخچه کرک نرم افزار چیست؟
اصطلاح کرک در اواسط دهه ۸۰ میلادی به وجود آمد و البته آن موقع تنها مربوط به کرک نرم افزار نبود. این اصطلاح توسط هکرهایی ابداع شد که میخواستند خود را از افرادی که تنها هدفشان نفوذ مخفیانه به سیستمهای امنیتی است، متمایز کنند. در حالی که تنها هدف هکرها نفوذ به سیستمهای امن است، کرکرها بیشتر علاقهمند به کسب دانش در مورد سیستمهای کامپیوتری و احتمالاً استفاده از این دانش برای شوخی یا سوءاستفاده هستند. به زبان سادهتر میتوان گفت هدف هکرهای واقعی فراتر از تنها کرک کردن یک سیستم است.
همین نزدیکی کار این دو گروه نیز سبب شده این دو اصطلاح (هک و کرک) خیلی اوقات به جای یکدیگر استفاده شوند.
اکثر کرکرهای اولیه، علاقهمندان به کامپیوتر بودند که گروههایی را تشکیل میدادند و در زمینه کرک و توسعه نرمافزارها با یکدیگر رقابت میکردند. کرک کردن یک طرح جدید کپیرایت در سریعترین زمان ممکن، اغلب به عنوان فرصتی برای نشان دادن برتری فنی فرد در نظر گرفته میشد. بسیاری از کرکرهای نرم افزار بعداً به مهندسان معکوس بسیار توانا تبدیل شدند.
دانش اسمبلی مورد نیاز برای شکستن موارد حفاظتی، آنها را قادر میسازد که درایورها را مهندسی معکوس کرده و از درایورهای ویندوز به درایورهایی با کد مرجع برای لینوکس و سایر سیستمعاملهای اوپنسورس منتقل کنند.
نحوه کرک کردن نرم افزار
در اولین قدم باید بتوانید خود برنامه را در شکل اصلاح نشدهی آن درک کنید. قبل از اینکه کرک ایجاد کنید، باید بفهمید که چه ویژگیهای نامطلوبی (از نظر سازنده) وجود دارد یا چه ویژگیهایی باقی مانده است که بتوانید روی آنها کار کنید. افزودن ویژگیها معمولاً «Modding» نامیده میشود که به طور قابلتوجهی سختتر از «کرک کردن» (غیرفعال کردن برخی ویژگیها) است.
برای مثال اگر یک کرکر بخواهد مجوز یک بازی را دور بزند، ممکن است مجبور شود بازی را برای خودش بخرد و تا انتها بازی کند. یا مثلاً اگر یک برنامه محدودیت زمانی دارد، باید بررسی کرد که دقیقا چه ویژگیهایی بعد از گذشت محدودیت زمانی غیرفعال میشود.
در قدم دوم باید مانند یک معمار فکر کنید. به طور خاص، کرکر خود را در ذهنیت مهندس برنامه قرار میدهد تا تلاش کند و حدس بزند که چگونه ویژگی نامطلوب پیادهسازی شده است. این روش اساس برخورد کرکر را با مشکل تشکیل میدهد. برخی از آزمایشات سادهای که کرکر انجام میدهد، این است که ببیند آیا هکهای ساده مانند پاک کردن مقدار رجیستری یا تنظیم ساعت به عقب میتوانند برنامه مد نظر را دور بزنند یا خیر.
قدم سوم و اصلی، مهندسی معکوس است. مهندسی معکوس یک نرم افزار بسیار شبیه باز کردن قطعات یک ماشین و قرار دادن آن با چشمبند است. در این روش، حتی مطمئن نیستید که چه مدل ماشینی را از هم باز میکنید، اما تقریباً میدانید ماشین چگونه کار میکند و میتوانید با دستان خود احساس کنید که چه قطعاتی به یکدیگر متصل میشوند، چه قطعاتی برای عملکرد آن ماشین حیاتی هستند و …
از نظر فنی، تنها چیزی که برای کرک کردن نرمافزار نیاز دارید، یک ویرایشگر متن (text editor) است که میتواند مقادیر هگزادسیمال را در یک باینری ویرایش کند (نرمافزار ویرایشگر Hex برای این کار مناسب است). کرک کردن یک نرم افزار در نهایت به بازنویسی چند بیت انتخابی در یک باینری خلاصه میشود. با این حال، درک یک باینری پیچیده با نگاه کردن به مقادیر hex تقریبا غیرممکن است، چه برسد به این که آن را اصلاح کنید.
بنابراین نرمافزارهای Disassembler (مانند Ada pro) و ابزارهای runtime visualization (BinaryAnalysisPlatform /qira) میتوانند به تجسم/ بازرسی ویژگیهای سطح بالاتر برنامه کمک کنند، بنابراین کرکر میتواند بفهمد که در داخل یک برنامه چه میگذرد. این مرحله تا حد زیادی سختترین مرحله است، زیرا اغلب برنامهها ویژگیهای حفاظتی متعددی اعمال میکنند تا به راحتی نتوانید از سد آنها رد شوید. حوزههای تحقیقات امنیتی و مهندسی معکوس به طور مداوم در حال نوآوری هستند و همین مسئله هم حوزه مهندسی معکوس را بسیار جالب میکند.
این مرحله زمان زیادی میبرد. خواندن صدها خط کد نوشته شده توسط شخصی دیگر، حتی با مستندات و ارجاعات کامل هم به اندازه کافی سخت است، چه برسد به کدخواندنی که فاقد مستندات است و عمداً با نمادهای مبهم و سخت ارائه میشود . کرکرها معمولاً بسیار صبور و دقیق هستند و زمانی طولانی را برای دستیابی به نتایج خود صرف میکنند. در یک کلام میتوان گفت کرک کردن مانند حل یک پازل بسیار پیچیده است.