ورود

View Full Version : بررسی امنیت نرم افزار (Crack me)



SalarSoft
چهارشنبه 17 بهمن 1386, 14:05 عصر
از دوستان اگه وقت بزارین و امنیت این فایل رو بررسی کنید ممنون میشم.

هدف بررسی یک شیوه است که به کار گرفته شده.

توضیح اضافه:
برای اجرای برنامه به پکیج های C++.NET نیاز خواهید داشت:

YourDrive:\Microsoft Visual Studio 2005\SDK\v2.0\BootStrapper\Packages\vcredist_x86

http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en

raravaice
چهارشنبه 17 بهمن 1386, 14:16 عصر
inline System.Void UnP.pMain()
{
System.Int32 i;
System.Object arrobj;
System.Reflection.Assembly assembly;
System.Byte arrbyt;
System.Int32 i1;
System.String str = 0;
arrbyt = 0;
assembly = 0;
arrobj = 0;
str = System::Windows::Forms::Application::ExecutablePat h;
System.Byte ptrbyt = (*__try_cast<__box System.Byte * >(_Noise::DoFileDecodeDecopress((*__try_cast<__box System.SByte * >(CommonUtility::StringToPCharAnsi(str))), (*__try_cast<__box System.Int32 * >(i1)))));
arrbyt = CommonUtility::PByteToByteArray((*__try_cast<__box System.Byte * >(ptrbyt)), 0, i1);
free((*__try_cast<__box System.Void * >(ptrbyt)));
if ((arrbyt->Length > 0))
{
assembly = System.Reflection.Assembly::Load(arrbyt);
arrobj = new System.Object *[assembly->EntryPoint->GetParameters()->Length];
i = 0;
while (true)
{
if ((i >= arrobj->Length))
{
break;
}
arrobj[i] = new System.String *[0];
i++;
}
assembly->EntryPoint->Invoke(0, arrobj);
}
}


:چشمک:

SalarSoft
چهارشنبه 17 بهمن 1386, 14:26 عصر
Nope
خیر، پاسورد را بدید.

همیشه Reflector به کار نمیاد

SalarSoft
یک شنبه 21 بهمن 1386, 16:30 عصر
کسی نبود؟
من هنوز منتظرم

Mr.reCoder
دوشنبه 22 بهمن 1386, 05:28 صبح
حل شد.
پسورد اینه:
crackme123456789CRACKME

SalarSoft
دوشنبه 22 بهمن 1386, 07:32 صبح
تشکر فراوان.
انتظارش رو داشتم. ولی شیوش رو نمی دونم. کمی توضیح می دید.

Mr.reCoder
دوشنبه 22 بهمن 1386, 08:24 صبح
توضیح مفصلش نیازمند یک آموزش مفصل است. اما به صورت اجمالی اینجا میارمش.

نمیدونم این برنامه باچی پک شده بود یعنی نیازی نبود که بفهمم. به هر حال از حافظه بوسیله olly دامپ کردم. سپس با reflector دیس اسمبلر کردم. بعد روتین پسورد را که بنام doit بود یافتم که متن داخل TextBox1 درون آن چک شده بود. خیلی خیلی راحت بود.:چشمک:






---------------------------------------------------------------------------------
با تشکر Mr.reCoder

SalarSoft
دوشنبه 22 بهمن 1386, 12:22 عصر
تشکر
دقیقا همان چیزی که انتظارش رو داشتم اتفاق بیافته. ولی در مورد dotNET مطمئن نبودم.

Shila7
سه شنبه 23 بهمن 1386, 07:41 صبح
به نظر من در کل امنیت .NET خیلی پایینه.

Mr.reCoder
چهارشنبه 24 بهمن 1386, 06:27 صبح
امنیت نرم افزارهای برنامه نویسی به برنامه نویس مربوط میشه!
اگه ما بگیم Dot Net خیلی امنیت پایینی داره شاید درست باشه. اما برای کرکرهای حرفه ای حتی کرک برنامه های delphi یا borland c builder هم راحت تر است. به این دلیل میگویم delphi یا borland c builder که این کامپایلرها برای خودشان توابع درون ساخته دارند و کمتر از توابع API استفاده میکنند. توابعی همچون DialogBoxParamA یا DialogBoxIndirectParamA یا MessageBoxA یا MessageBoxIndirectA اصلا بوسیله ی این کامپایلر ها در حالت عادی استفاده نمیشود.
اینکه برنامه های dot net امینت پایینی دارند به دلیل ساختاریست که توضیحات کامپایلی زیادی از توابع و روتین های برنامه در خود برنامه ی exe گنجانده میشود. تا بعدا دیباگ و خطا یابیش (نه کرک کردن و نفوذ به برنامه!!!!) راحت تر باشد. که البته این مورد فقط در vb و c# دات نت صدق میکند. به دلیل استفاده از کتابخانه ی Mscore.dll براحتی قابل شناسایی و نفوذ هستند. اما با بکار گیری برخی راهکارهای کامپایلر و به اصطلاح p-code کردن برنامه انالیز برنامه کمی شخت خواهد شد.

matrix_commandline
پنج شنبه 25 بهمن 1386, 12:55 عصر
در .NET خیلی راحت میشه Reflection رو بست. با حذف کردن meta data از assembly .
بعد فکر نمیکنم برنامه های درست و حسابی رو بدونه Pack کردن بدن بیرون.
همه چیز برمیگرده به برنامه نویس که اگه سطح اطلاعات برنامه نویسیش واسه .NET اندازه شما باشه ملومه نتیجه چی میشه. :قهقهه:

مهدی کرامتی
پنج شنبه 25 بهمن 1386, 13:25 عصر
اطلاعاتی که بعنوان Metadata در اسمبلی های دات نت گنجانده میشه بخاطر امکان Reflection است. امکان Reflection کمک میکنه شما کد نوشته شده در زبانهای مختلف مبتنی بر دات نت رو برای تولید یک اسمبلی واحد استفاده کنید. همچنین با استفاده از این تکنولوژی می توان نمونه ای از یک Type ناشناس ایجاد کرد و ... در این موارد میشه از Reflection استفاده کرد:

When you need to access attributes in your program's metadata.
For examining and instantiating types in an assembly.
For building new types at runtime. Use classes in System.Reflection.Emit.
For performing late binding, accessing methods on types created at run time. See the topic Dynamically Loading and Using Types.
بهرحال Reflection چیز بدی نیست، اما اگر برنامه نویس نکاتی رو رعایت نکرده باشه میتونه مورد سوء استفاده قرار بگیره.