برنامه های دات نتی چگونه کرک می شوند؟ چگونه می توان جلوی Crack شدن این نرم افزارها را گرفت؟ تمام کامپایلرهای مبتنی بر پلاتفرم دات نت، کد نوشته شده را پس از کامپایل به کدی با نام IL یا Intermediate Language که یک زبان میانی مانند زبان اسمبلی است تبدیل می کنند. این کد توسط کامپایلری به نام JIT یا Just In Time Compiler به کد ماشین تبدیل شده و سپس اجرا می شود.دلیل استفاده از کد IL امکان اجرای برنامه های نوشته شده مبتنی بر پلاتفرم .NET در سایر پلاتفرم ها مانند MAC و Linux قابل اجرا باشند. همین موضوع دست افراد رو برای کرک کردن برنامه های دات نت باز گذاشته.
در این مطلب قصد دارم به شما دو ابزاری که در این کار استفاده می شوند و البته توسط خود مایکروسافت نیز عرضه شدند آموزش بدم.از این دو ابزار برای استخراج کد IL از فایل های کامپایل شده و همچنین تبدیل مجدد کدهای IL به فایل های exe یا dll استفاده می شوند. برای ادامه کار برنامه ای در محیط کنسول می نویسیم که یک نام کاربری و کلمه عبور از کاربر دریافت کرده و در صورت صحیح بودن کلمه عبور پیغام مناسبی به کاربر نمایش می دهد. سپس با ابزارهای ذکر شده برنامه را کرک خواهیم کرد:
class Program { public static void Main() { Console.Write("Username: "); var username = Console.ReadLine(); Console.Write("Password: "); var password = Console.ReadLine(); if (username.ToLower().Equals("hossein") && password.Equals("ITPro")) { Console.WriteLine("Welcome to ITPro.ir!"); } else { Console.WriteLine("Oops! Username or Password is invalid!"); } Console.ReadKey(); } }
بعد از کامپایل کردن برنامه یک فایل اجرایی exe برای ما تولید می شود. در اینجا ما باید شرطی که در متد Main نوشتیم را جوری تغییر بدیم که برنامه با هر ورودی اجرا شود. در ابتدا به ابزار ildasm.exe نیاز داریم. برای اجرای این ابزار، کافیست Developer Command Prompt for VS2015 را اجرا کنید. در صورتی که از نسخه های پایین تر Visual Studio استفاده می کنید محیط Command Prompt مربوطه وجود دارد. پس از اجرا، در خط فرمان عبارت ildasm.exe را تایپ کرده و کلید enter را بزنید تا پنجره ildasm باز شود:
از منوی فایل گزینه Open را انتخاب کرده و سپس فایل exe ایجاد شده از پروژه کنسول نوشته شده را انتخاب کنید. این فایل در پوشه پروژه کنسول، پوشه bin\debug وجود دارد. پس از انتخاب فایل لیستی از محتویات فایل انتخابی برای شما نمایش داده می شود:
در این پنجره با دوبار کلیک کردن بر روی هر یک از بخش های نمایش داده شده، اطلاعاتی به شما نمایش داده می شود. برای مثال، با دوبار کلیک بر روی متد Main کدهای مربوط به این متد برای شما نمایش داده می شود:
کد IL ایجاد شده برای متد Main به صورت زیر است:
.method private hidebysig static void Main(string[] args) cil managed { .entrypoint // Code size 106 (0x6a) .maxstack 2 .locals init ([0] string username, [1] string password, [2] bool V_2) IL_0000: nop IL_0001: ldstr "Username: " IL_0006: call void [mscorlib]System.Console::Write(string) IL_000b: nop IL_000c: call string [mscorlib]System.Console::ReadLine() IL_0011: stloc.0 IL_0012: ldstr "Password: " IL_0017: call void [mscorlib]System.Console::Write(string) IL_001c: nop IL_001d: call string [mscorlib]System.Console::ReadLine() IL_0022: stloc.1 IL_0023: ldloc.0 IL_0024: callvirt instance string [mscorlib]System.String::ToLower() IL_0029: ldstr "hossein" IL_002e: callvirt instance bool [mscorlib]System.String::Equals(string) IL_0033: brfalse.s IL_0042 IL_0035: ldloc.1 IL_0036: ldstr "ITPro" IL_003b: callvirt instance bool [mscorlib]System.String::Equals(string) IL_0040: br.s IL_0043 IL_0042: ldc.i4.0 IL_0043: stloc.2 IL_0044: ldloc.2 IL_0045: brfalse.s IL_0056 IL_0047: nop IL_0048: ldstr "Welcome to ITPro.ir!" IL_004d: call void [mscorlib]System.Console::WriteLine(string) IL_0052: nop IL_0053: nop IL_0054: br.s IL_0063 IL_0056: nop IL_0057: ldstr "Oops! Username or Password is invalid!" IL_005c: call void [mscorlib]System.Console::WriteLine(string) IL_0061: nop IL_0062: nop IL_0063: call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey() IL_0068: pop IL_0069: ret } // end of method Program::Main
برای درک کدهای IL، می بایست با زبان IL آشنا باشید. برای مرحله بعد می بایست از برنامه باز شده در ildasm خروجی بگیریم. برای اینکار ابتدا در یکی از درایو ها یک پوشه با نام Cracking Source ساخته، سپس از پنجره اصلی ildasm، از منوی فایل گزینه dump را انتخاب کرده، در پنجره Dump Options نیازی به تغییری نیست، بر روی دکمه OK کلیک کنید، در ادامه مسیر پوشه ای که ساختید را انتخاب کنید. بعد از اینکار یک فایل با پسوند il و یک فایل با پسوند res برای شما ساخته می شود. برای کرک کردن برنامه شما باید این فایل il را تغییر دهید. در داخل فایل به دنبال کد مربوط به متد Main گشته و قسمت مربوط به شرطی که نام کاربری و کلمه عبور بررسی می شود را تغییر می دهیم. کد مربوط به قسمت شرط برنامه به صورت زیر است:
IL_0042: ldc.i4.0 IL_0043: stloc.2 IL_0044: ldloc.2 IL_0045: brfalse.s IL_0056
در خط 45 ام، گفته می شود اگر شرط صحیح نبود، به خط 56 ام برو که پیغام مربوط به صحیح نبودن نام کاربری و کلمه عبور نمایش داده می شود. کافیست در خط 45 ام، عبارت brfalse.s را brtrue.s تغییر دهیم. یعنی اگر شرط صحیح بود به خط 56 ام برو. کد این بخش را به صورت زیر تغییر می دهیم:
IL_0042: ldc.i4.0 IL_0043: stloc.2 IL_0044: ldloc.2 IL_0045: brtrue.s IL_0056
فایل il تغییر داده شده را ذخیره می کنیم. حال باید از روی فایل تغییر داده شده مجدد یک فایل اجرایی ایجاد کنیم. برای اینکار باید از ابزار ilasm.exe استفاده کنیم. این ابزار برای ساختن اسمبلی های دات نت از روی فایل های il استفاده می شود. در همان محیط Developer Command Prompt به پوشه ای می رویم که فایل il را در آن dump کردیم. دستور زیر را در خط فرمان می نویسیم:
ilasm.exe source.il /exe
با این کار، یک فایل اجرایی با نام source.exe برای ما تولید می شود که همان فایل اجرایی ما است، با این تفاوت که این فایل کرک شده و حال با هر نام کاربری و کلمه عبوری (به جز نام کاربری Hossein و کلمه عبور ITPRO) می توان به سیستم وارد شد.
اما راهکار پیش گیری کرک شدن کدهای دات نت چیست؟ نمی توان راهکاری ارائه کرد که صد در صد جوابگو باشد، اما می توان بوسیله ابزارهایی که اصطلاحاً به آن ها Obfuscator گفته می شود، کاری کرد که کدهای IL به راحتی قابل فهم نبوده یا نتوان آن ها را با ابزارهایی مثل ildasm باز کرد. در یک مطلب جداگانه در مورد ابزارهای Obfuscator صحبت خواهیم کرد. امیدوارم که این مطلب مورد توجه شما قرار گرفته باشد.
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود