PDA

View Full Version : حرفه ای: Crack me:Zomorrod



zomorrod.company
یک شنبه 21 آبان 1391, 15:56 عصر
با عرض سلام و خسته نباشید خدمت اساتید ارجمند:لبخندساده:
من یک قفل نرم افزاری آماده کردم و از دوستان تقاضا دارم سطح امنیت اون رو بررسی کنند. :متفکر:
از اونجایی که من این قفل رو برای نرم افزارهای دات نتی و با دات نت نوشتم مجبور شدم از یک مبهم ساز استفاده کنم تا قفلم اوپن سورس نباشه. ( با توجه به کدهای میانی دات نت و ... چاره ای نیست:گریه: )
روش کار قفل به صورت سریال و کد فعال سازیه. بنابراین نمی تونم نمونه سریال بگذارم که همه جا عمل کنه.
در ضمن کسی که قفل رو درست کرک کنه پیغام ورود به نرم افزار رو ( با متنی متفاوت) دریافت می کنه. برای تست کرک باید روی دکمه مربوط به ورود کد فعال سازی کلیک کرد.

با تشکر:قلب:

Securebit
سه شنبه 23 آبان 1391, 12:58 عصر
private void BClick(object sender, EventArgs e)
{
this.timer1.Stop();
this.list1.Clear();
this.list1.Clear();
for (int i = this.timer1.Interval; i > (this.timer1.Interval - 200); i -= 3)
{
this.list1.Add(this.mtd2(i, false));
for (int m = 41; m < 50; m++)
{
this.list1.Add(this.mtd2(m, false));
for (int n = 7; n < 23; n++)
{
this.list1.Add(this.mtd2(n, true));
}
}
}
new Random(DateTime.Now.Millisecond).Next(100);
this.list1.Clear();
for (int j = this.timer1.Interval; j > (this.timer1.Interval - 200); j -= 3)
{
this.list1.Add(this.mtd2(j, false));
for (int num9 = 41; num9 < 50; num9++)
{
this.list1.Add(this.mtd2(num9, false));
for (int num8 = 7; num8 < 23; num8++)
{
this.list1.Add(this.mtd2(num8, true));
}
}
int num1 = this.timer1.Interval - 90;
}
this.list1.Clear();
for (int k = this.timer1.Interval; k > (this.timer1.Interval - 200); k -= 3)
{
this.list1.Add(this.mtd2(k, false));
for (int num3 = 41; num3 < 50; num3++)
{
this.list1.Add(this.mtd2(num3, false));
for (int num2 = 7; num2 < 23; num2++)
{
this.list1.Add(this.mtd2(num2, true));
}
}
}
this.qeEsVcSeq = false;
Label label = new Label {
Text = Marshal.PtrToStringBSTR(Marshal.SecureStringToBSTR (this.mtd1()))
};
base.Controls.Add(label);
label.Top = 65;
label.Left = 15;
label.Width = 500;
new Random(DateTime.Now.Millisecond).Next(100);
}

zomorrod.company
سه شنبه 23 آبان 1391, 14:35 عصر
سلام خیلی ممنون که وقت گذاشتید
و تبریک می گم که موفق شدید
ظاهرا شما موفق شدید که سورس ها رو برگردونید و قسمتی که پیغام رو نمایش می ده رو پیدا کردید و جایگزین متد مربوط به ایونت کلیک کردین.
در واقع کل فرایند های مختلف مربوط به قفل رو دور زدید.
ظاهرا باید داخل قسمت هایی که قفل چک می شد کارهایی کرد که بدون انجام اونها پیغام درست نمایش داده نشه. مثلا پیغام کم کم پر می شد یا ... .
البته وقتی که کد برگشته یعنی اونجوری هم فقط کار کرکر سخت می شد و باز هم با صرف وقت می تونست قفل رو دور بزنه.
شما راهی می شناسید که این مشکل رو بشه تا حد ممکن برطرف کرد؟ (البته بعیده راهی وجود داشته باشه)
ممنون میشم اگه لطف کنید و پاسخ بدید
با تشکر مجدد

Securebit
سه شنبه 23 آبان 1391, 15:59 عصر
سلام،

ظاهرا شما موفق شدید که سورس ها رو برگردونید و قسمتی که پیغام رو نمایش می ده رو پیدا کردید و جایگزین متد مربوط به ایونت کلیک کردین.

متد رو جایگزین نکردم در متدی که صحت قفل چک میشد شرط مورد نظر دور زده شد و در نتیجه تایمر 4 فعال و به این متد تایید فعال بودن قفل هدایت شد.


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

موفق باشید.

zomorrod.company
سه شنبه 23 آبان 1391, 16:15 عصر
سلام ممنون از جوابتون



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

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

Securebit
سه شنبه 23 آبان 1391, 17:14 عصر
سلام ممنون از جوابتون

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

منظور بنده استفاده از این روش در قفلی بود که در نرم افزارتون به کار میبرید والا استفاده از این روش خلاف قوانین کرک می هست.

zomorrod.company
یک شنبه 19 آذر 1391, 15:41 عصر
سلام
ببخشید چند وقتی بود سرم شلوغ بود و نتونستم کامنتی که گفته بودم رو بگذارم.
اما راه حل :
با استفاده از رمز نگاری نامتقارن با کلید خصوصی خودمون فایل اجرایی برنامه رو امضا می کنیم. بعد فایل حاوی امضا رو کنار برنامه می گذاریم. بعدا در جاهای مختلفی از برنامه باید با استفاده از کلید عمومی فایل اجرایی برنامه رو (همان فایلی که امضا شده اش رو داریم) با فایل امضا شده اعتبار سنجی کنیم که آیا فایل و امضا و کلید عمومی با هم سازگارند یا نه. اینجوری دیگه اگه کرکر فایل برنامه رو تغییر بده برنامه متوجه می شه و دست کرکر و کسی که از کرک استفاده می کنه رو میشه. تنها نکته ای که می مونه اینه که این چک کردن ها باید در جاهای مختفلی انجام بشن (حتی میشه به صورت تصادفی اونا رو اجرا کرد) و به هم وابسته نباشند تا کرکر نتونه اونا رو دور بزنه.

:لبخندساده:

mansour01
دوشنبه 20 آذر 1391, 20:06 عصر
سلام
ببخشید چند وقتی بود سرم شلوغ بود و نتونستم کامنتی که گفته بودم رو بگذارم.
اما راه حل :
با استفاده از رمز نگاری نامتقارن با کلید خصوصی خودمون فایل اجرایی برنامه رو امضا می کنیم. بعد فایل حاوی امضا رو کنار برنامه می گذاریم. بعدا در جاهای مختلفی از برنامه باید با استفاده از کلید عمومی فایل اجرایی برنامه رو (همان فایلی که امضا شده اش رو داریم) با فایل امضا شده اعتبار سنجی کنیم که آیا فایل و امضا و کلید عمومی با هم سازگارند یا نه. اینجوری دیگه اگه کرکر فایل برنامه رو تغییر بده برنامه متوجه می شه و دست کرکر و کسی که از کرک استفاده می کنه رو میشه. تنها نکته ای که می مونه اینه که این چک کردن ها باید در جاهای مختفلی انجام بشن (حتی میشه به صورت تصادفی اونا رو اجرا کرد) و به هم وابسته نباشند تا کرکر نتونه اونا رو دور بزنه.

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

zomorrod.company
دوشنبه 25 آذر 1392, 22:21 عصر
بررسی تصادفی بطوری که از طریق کلاس های جدا اینکار انجام بشه ، با در نظر گرفتن عدم وابستگی زنجیره اعتبارسنجی ، کند بودن رو بدنبال داره و لگ های زیادی ایجاد میکنه ! و میشه کلاس ها رو هر تعداد باشن تغییر داد و نهایتا با پیدا کردن رفرنس ها و جامپ اونها به یک رفرنس کرک شده کار رو مختل کرد .
حالا همه راه های دور زدن در نگاه فایل آفست کنار میگذاریم ، در صورتی که کرک از نوع مموری پچ باشه چطور ؟
سلام
من بررسی تصادفی امضای دیجیتال برنامه رو عرض کردم که این نه کندی رو به دنبال داره و نه لگ های زیاد. علتش هم اینه کار زیاد پیچیده ای نیست. به علاوه این کارو میشه با پیاده سازی های مختلفی که قبلا برای الگوریتم های مشهوری مثل RSA انجام شده اند و تست شده اند انجام داد. بنا براین باگ هم ایجاد نمی شه (چون پیاده سازی های مشهور و تست شده ی زیادی وجود دارند) و رفرنس ها هم به یک جا نیست که کرکر از یکی بقیه رو شناسایی بکنه. (چون با پیاده سازی های مختلف چک می کنیم).:متفکر:
در ضمن تعداد این پیاده سازی ها هم نمی خواد خیلی زیاد باشه. مثلا 5 پیاده سازی کفایت می کنند. که یکی هر بار اجرا میشه. یکی هر صد بار یک بار و همین طور به بالا. و وقتی که یکی از این چک کننده ها فهمید که فایل تغییر کرده با یک کلید عمومی اطلاعات حساس کاربر رو انکریپ می کنه :گریه:و حالا کاربر برای دستیابی به اطلاعاتش چاره ای جز پرداخت هزینه نرم افزار و حتی جریمه به سازنده نرم افزار نخواهد داشت.:چشمک:

منتظر نظرات ارزشمند دوستان هستم.