PDA

View Full Version : Crackme: HamisheBahar



Raham
چهارشنبه 18 فروردین 1389, 21:43 عصر
سلام دوستان
آقا واسا واسا این کرک می ماله من نیست واسه HamisheBahar
چون تو عنوان تاپیک .... نوشت تاپیک ش پاک شد

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

صد هزار بار همه گفتن از .Net Reactor استفاده نکنین
آنپک کردم گذاشتم

Hamishebahar
پنج شنبه 19 فروردین 1389, 15:14 عصر
سلام.
ممنونم که توجه کردی...
حالا چی هست پسوردش؟
چطوری این کارو کردی؟
من اگه سورسشم میدادم کسی نمی تونست این کارو کنه....
من که هر کاری میکنم نمیتونم فرم رو اجرا کنم.
خوب حالا بگو ببینم چی کار کردی.

Hamishebahar
پنج شنبه 19 فروردین 1389, 15:19 عصر
آها حالا فهمیدم شما چی کار کردین...
شما در اصل سورس برنامه رو باز کردین...
ولی اونچه که من میخواستم این نبود..من میخواستم ببینم که میتونید Key رو بدست بیارید و فرم رو نمایش بدید یا نه.
تمام سورس برنامه من توی اون فایل dll که خودم رمز نگاری کردم مخفی شده.
.NET Reactor فقط یک رد گمکنیه!!!

Raham
پنج شنبه 19 فروردین 1389, 16:29 عصر
شما اومدين يه فايل اجرايي رو با يه كليد كد كردين بعد تو برنامه اصلي كه نقش لودر رو داره از رمز ورودي كاربر به عنوان كليد قفل كشايي استفاده كردين بعد كفتين اكه ديكد شد حله اكه نشد٠٠٠ خيلي سخت نيست بايد بريم دنبالش و از متد رمزنكاري دنبال كليدي براي ساخت هدر بود كه بقيشم همينطوري درست ميشه من اصلا وقتشو ندارم تازشم دانش كافي رو هم ندارم

Hamishebahar
پنج شنبه 19 فروردین 1389, 17:15 عصر
خيلي سخت نيستنکته همین جاست...
من که سورس برنامه رو دارم نمیتونم فایل رو بدون داشتن کد اجرا کنم.
میخوام ببینم کی میتونه از این الگوریتمی که طراحی کردم بگذره...جایزشم سورس الگوریتم کامله.
بعد اینکه کد رو درست وارد کنی باید فرم زیر نمایش داده بشه:
http://up.iranblog.com/Files/c7d6c5909eda41b7904e.JPG

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

Raham
پنج شنبه 19 فروردین 1389, 18:19 عصر
بنظرم اينطوري نكو دوست عزيز جرا؟ اولا كه اين نشون ميده شما هم مثل من تازه كاريد اين الكوريتم يه طره نيست عزيزه دلم در واقع همنكاري كه برنامه شما در زمان وروك رمز درست لنجام ميده نشان از دو طرفه بودن داره در ضمن جرا حول مي كني؟ اين متد به نظرم فكر نمي كنم اساتيد درجه امنيت ٢ بدن
يكي از راهاش بدست اوردن كدي توسط الكوريتم خودتون هست كه بايت اول ديكد شده تبديل به mz بشه

Hamishebahar
پنج شنبه 19 فروردین 1389, 18:44 عصر
سلام.
خوب من منتظر میمونم.
نصف الگوریتم من توی برنامه هست.
شما حتی اگه الگوریتم رو کامل هم داشته باشی بازم نمیتونی برنامه رو اجرا کنی.دو طرفه هست ولی طرف دوم ناپیداست و اگه کسی ندونه مثل داستان برنامه نویسی میشه که بخواد همه پسورد ها رو روش امتحان کنه.
پس برنامه برای اجرا نیاز به پسورد درست داره.تست درست یا غلط بودن پسورد هم به هیچ عنوان ربطی به پسورد اصلی نداره.
موفق باشید.

Securebit
جمعه 20 فروردین 1389, 19:01 عصر
روشی که شما استفاده کردید مشابه برنامه هایی مثل winrar و امثال اینها هست مشکل این روشها این است که با یک بار بدست آوردن پسورد کارایی خودش رو از دست میده.

Hamishebahar
جمعه 20 فروردین 1389, 21:38 عصر
روشی که شما استفاده کردید مشابه برنامه هایی مثل winrar و امثال اینها هست مشکل این روشها این است که با یک بار بدست آوردن پسورد کارایی خودش رو از دست میده.

سلام.
درسته.
خوب حالا اگه من از قفل سخت افزاری هم توی dll استفاده کنم چی؟ حالا نه کسی به کد دسترسی داره نه میتونه کرک کنه.
کد ها فقط داخل رم اجرا میشن.
کدشم میتونین از لینک زیر بگیرین.
حالا کد داخل فایل رو کام کپی کنید و داخل کادر متن بزارید و ok کنید نتیجه رو مشاهده کنید.
موفق باشید.

grassdragon
یک شنبه 20 تیر 1389, 06:53 صبح
public partial class Form3 : Form

{
//从它的loader程序中读入,假设都是标准 ,用来验证我们的KEY
byte[] validateByte = new byte[132];//包括'PE'及Machine,假设CPU也指定的一样, 了几个可验证字节
byte[] objprogramByte = new byte[132];

int[] lengthlist;//存求出的password可能的长度;

bool[] finded = new bool[132]; //保存在该位上是否验证过的字节都可 找到值,以确定最后可能的位;
public Form3()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//
if (readValidateByte("Perplex Password Find.exe", "Crypt.dll"))
{
Initbyte();
findPass();
}
}

private void Initbyte()
{
for (int i = 0; i < 132;i++ )
{
finded[i] = true;
}
}

private int findLength()
{
int j = 0;
for (int i = 0; i < 132; i++)
{
if (finded[i])
j++;
}
return j;
}

private bool readValidateByte(string filename,string dllname)
{
bool result = false;
bool result2 = false;
if (File.Exists(filename))
{

using (FileStream stream = new FileStream(filename, FileMode.OpenOrCreate))
{

stream.Seek(0, SeekOrigin.Begin);
stream.Read(validateByte, 0, 132);
result = true;
}
}
if (File.Exists(dllname))
{

using (FileStream stream2 = new FileStream(dllname, FileMode.OpenOrCreate))
{

stream2.Seek(0, SeekOrigin.Begin);
stream2.Read(objprogramByte, 0, 132);
result2 = true;
}
}
return result && result2;
}

private void findPass()
{
TestMe me = new TestMe();


for (int x = 0; x < 132; x++)
{

for (int i = 0; i < 132; i++) //可验证的只有这么多位
{
bool findValue = false;
for (int j = 0; j < 127; j++)//ASCLL全进来吧,省不了多少,相比我往出 的话.(真懒!什么人!鄙视一下!)
{
byte value = objprogramByte[x];
value = me.GoPByte(3, value, true);
value = me.GoPByte(i, value, false);
value = me.GoPByte(j, value, true);
value = me.GoPByte(199, value, false);
value = me.GoPByte(214, value, true);
if (value == validateByte[x])
{
//this.textBox1.Text += "第"+x.ToString()+"字节 值为:"+j.ToString()+"位数:"+i.ToString()+" ";
findValue = true;

}
}
if (!findValue)
{
finded[i] = false;
}
}
//this.textBox1.Text += + Environment.NewLine;
}

MessageBox.Show(findLength().ToString());
lengthlist = new int[findLength()];
int vv = 0;
for (int ii = 0; ii < 132; ii++)
{
if (finded[ii])
{
this.textBox1.Text += ii.ToString() + Environment.NewLine;
lengthlist[vv] = ii;
vv++;
}
}
writeSerialFile();
MessageBox.Show("It Cracked!");
}

private void writeSerialFile()
{
//copy PasswordByte.cs 原作者的文件,只把方法变成public
TestMe me = new TestMe();


for (int x = 0; x < lengthlist.Length; x++)
{

byte[] buffer = new byte[lengthlist[x]];
for (int i = 0; i < lengthlist[x]; i++)
{
for (int j = 0; j < 127; j++)//ASCLL全进来吧,省不了多少,相比我往出 的话.(真懒!什么人!鄙视一下!)
{
byte value = objprogramByte[i];
value = me.GoPByte(3, value, true);
value = me.GoPByte(lengthlist[x], value, false);
value = me.GoPByte(j, value, true);
value = me.GoPByte(199, value, false);
value = me.GoPByte(214, value, true);
if (value == validateByte[i])
{
buffer[i] = (byte)j;
break;
}
}
}
writeFile(x, buffer);

}
}

private void writeFile(int x, byte[] buffer)
{
string filename = x.ToString() + ".dll";
using (FileStream stream = new FileStream(filename, FileMode.OpenOrCreate))
{

stream.Seek(0, SeekOrigin.Begin);
stream.Write(buffer, 0, buffer.Length);

}

}

}



you can down file from china's bbs:http://bbs.pediy.com/showthread.php?t=116583
I can't say your language your dll's DOS handle AND DOS sub no change.so,I can find password.

Nima NT
دوشنبه 21 تیر 1389, 02:18 صبح
خوب حالا اگه من از قفل سخت افزاری هم توی dll استفاده کنم چی؟ حالا نه کسی به کد دسترسی داره نه میتونه کرک کنه.

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


--
راستی این دو User آیا هر جفتشون یکی هستن ؟!
grassdragon و Hamishebahar

grassdragon
دوشنبه 21 تیر 1389, 11:05 صبح
I do not understand your language, the google translate of Mistaken or incorrect, I do not know you at say what.Sorry!Welcome China travel!

欢迎你们,朋友!

Nima NT
دوشنبه 21 تیر 1389, 13:23 عصر
I do not understand your language, the google translate of Mistaken or incorrect, I do not know you at say what.Sorry!Welcome China travel!

欢迎你们,朋友!


and so welcome barnamenevis.org ,thank you