Tammam Koujan

Welcome to my world

Archive for February 1st, 2007

كيف اكسر حماية برنامج مكتوب بالـ .NET

Posted by tammamkoujan on February 1, 2007

كيف اكسر حماية برنامج مكتوب بالـ .NET

بسم الله الرحمن الرحيم
ماذا ستتعلم من هذا الدرس :

ستتعلم العديد من المبادئ عن لغة مايكروسوفت الوسيطة و ستتعرف على كيفية كتابة برامج باستخدامها ,و
في نهاية هذا الدرس ستكون قادرا على استخدام برنامج ilasm و برنامج ildasm من خلال موجه الاوامر , كما و ستتمكن من تحويل البرنامج التنفيذي الناتج عن Visual Studio .NET إلى لغة ميكروسوفت الوسيطة MSIL و ستتمكن في النهاية من التعرف على كيفية فك حماية البرنامج المكتوب بتقنية .NET

هذا الدرس مطبق على :
- Microsoft Visual Studio .NET 2005
- Windows XP Professional SP2
- Windows Notepad
مقدمة :

هل تعرف برنامج Reflector ؟ إن لم تكن تعرفه مسبقا فالان ستتعرف عليه , هذا البرنامج عبارة تطبيق تستطيع من خلاله
القيام بهندسة عكسية لأي برنامج مكتوب بتقنية .NET , و بالتالي ستحصل على شيفرة البرنامج بكل سهولة و في دقائق معدودة (و لربما استغرق غيرك أشهرا ليكتب برنامجه) .

Reflector

تبين لك الصورة أعلاه برنامج Reflector و قد فككت من خلاله مكون EAN13Barcode الذي استغرق مني بضعة ايام لكتابته , صحيح اني كتبته هذا المكون في وقت فراغي و ليس لأسباب تجارية لكن تخيل عندما تتعب على برنامج معين لعدة اشهر و من ثم تجد ان ما كتبته و تعبت من أجله و صرفت عليه ما صرفت قد قام غيرك بالحصول على برمجته بدقائق.
يمكنك ان تحمل برنامج Reflector من الموقع :

اذا لنحمي شيفرتنا يجب ان نعلم كيف يتم فكها أولا . و لنعلم آلية فك الشيفرة يجب ان نعلم ما الذي يحصل للشيفرة بعد كتابتها
إن اللغة التي تكتبها بأي لغة تقع تحت مظلة .NET مثل C# و Visual Basic .NET و غيرها من لغات .NET
تحول في نهاية المطاف إلى لغة وسيطة تدعى لغة ميكروسوفت الوسيطة (Microsoft Intermediate Language )
أو اختصارا MS IL او IL فقط
هذه اللغة تحول فيما بعد و عند تشغيل البرنامج يقوم إطار عمل دوت نت (.NET Framework) بتحويلها إلى لغة المجمع
المناسبة للجهاز الذي يعمل عليه.
يمكنك كتابة البرامج مباشرة من خلال لغة IL و لكن هذه العملية ستكون معقدة واكثر صعوبة من الكتابة باللغات التقليدية
لكن عند كتابة برنامج بلغة IL يمكنك ترجمته إلى نسخة تنفيذية من خلال برنامج اسمه ilasm.exe
و بطريقة معاكسة يمكنك ان تحول برنامج تنفيذه إلى مقابله بلغة IL باستخدام برنامج يدعى ildasm.exe

لنجرب ان نكتب برنامج بلغة IL (سيكون هذا المثال مجرد انتاج ملف تنفيذ لأن التوسع في IL بعيد عن موضوعنا الان)
افتح اية محرر نصوص , انا استخدم مفكرة ويندوز , و اكتب ما يلي:

.method void Test()

{

.entrypoint

}

أغلق الملف و احفظه باسم IL2EXE.il ( عند الحفظ من خلال المفكرة تأكد من ان الخيار Save Type في مربع
الحوار Save As قد حدد على All Documents )

الان اذهب إلى قائمة ابدأ ثم انتق Microsoft Visual Studio 2005 ثم اذهب إلى Visual Studio Tools و قم
بتشغيل موجه الاوامر Visual Studio 2005 Command Prompt (يمكنك العمل من موجه الاوامر الخاص بويندوز
مباشرة لكن هذا يتطلب منك المزيد من العمل لربط و تحديد مسارات الملفات الاساسية)
اكتب ما يلي في موجه الاوامر على افتراض ان الملف الذي كتبناه قد تم حفظه كالتالي : il2exe.il C:\
اكتب : ilasm c:\il2exe.il

CMD

اذهب إلى السواقة C ستجد ان ملفا تنفيذيا يدعى il2exe.exe قد أنشأ . (هذا الملف لايقوم بأي شيء لكن الهدف توضيح الفكرة).

اذا ننتقل للمرحلة الثانية و هي تحويل شيفرة برنامج تنفيذي إلى IL .

قم بتشغيل VS.NET 2005 ستكون لغة البرمجة التي سأعتمدها هي C#
أنشأ مشروع ويندوز جديد و فم بتسميته ILTest .

VS2005IDE

اذهب إلى الحدث Paint للنموذج و اكتب ما يلي :

Point myPoint = new Point(10,10);
Brush myBrush = Brushes.DarkGreen;
Font myFont = new Font(“Tahoma”,12, FontStyle.Bold );
e.Graphics.DrawString(“Tammam Koujan”, myFont, myBrush, myPoint);
myBrush = Brushes.RoyalBlue;
myPoint = new Point(10,30);
e.Graphics.DrawString(“Tammam84@yahoo.com”, myFont, myBrush, myPoint);
myBrush = Brushes.SaddleBrown;
myPoint = new Point(10, 50);
e.Graphics.DrawString(“My Blog : http://www.enashir.com/blogs/TammamKoujan/”, myFont, myBrush, myPoint);

الهدف من هذه الشيفرة هو ان نظهر شيئاً على النموذج لا أكثر .

اذهب الان إلى الحدث Load للنموذج و اكتب ما يلي :
MessageBox.Show(“You are using demo version of Tammam Program”);

ستقوم هذه الشيفرة باظهار رسالة تبين للمستخدم ان هذه النسخة هي نسخة تجريبية من البرنامج .
الان انقر على F5 . سيعمل البرنامج و ستظهر رسالة كما في الصورة أدناه :

DemoMSG

اذا نقرت موافق فستظهر النافذة الرئيسة للبرنامج كما في الصورة :

Program

الان فلننتقل للعمل المهم :
قم بنسخ النسخة التنفيذية من برنامجنا و ضعها على السواقة C .
الان قم بتشغيل موجه الاوامر كما قمنا في المرحلة السابقة ثم اكتب ما يلي :
Ildasm ILTest.exe /out=ILTest.il
كما في الصورة :

ildasm

ستجد انه قد تم انشاء ملف على السواقة C يحمل اسم ILTest.il هذا الملف هو ملف اللغة الوسيطة لبرنامجنا التنفيذي
قم بفتح الملف من خلال المفكرة

ثم قم بحذف الجزء التالي من الشيفرة

IL_0000: nop
IL_0001: ldstr “You are using demo version of Tammam Program”
IL_0006: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
IL_000b: pop
il

هذا القسم هو الرسالة التي يبين ان البرنامج نسخة تجريبية
الا قم بالبحث عن Tammam و استبدل اسمي باسمك و من ثم قم بحفظ الملف
الان اذهب إلى موجه الوامر كما فعلنا في المرات السابقة و اكتب :

ilasm iltest.il

ستشاهد كما في الصورة التالية :

il-cmd

سيتم توليد ملف تنفيذي جديد قم بتشغيله و ستجد ان الرسالة قد اختفت و ان اسمي قد استبدل باسمك

cracked
الشيفرة :

لتحميل شيفرة البرنامج :
http://www.arabteam2000-forum.com/index.php?act=Attach&type=post&id=30681

كلمة أخيرة :

اتمنى ان تكون قد استفدت من الدرس , اذا كان عندك اية ملاحظات او اكتشفت اي خطأ أو كنت تملك معلومات اضافية قد تساعدني
اتمنى ان تراسلني و تخبرني بما عندك .

للمزيد من الدروس يمكنك زيارة مدونتي الإلكترونية http://tammamkoujan.wordpress.com/
أو يمكنك زيارة مندى المبرمجين العرب حيث اشارك في منتديات البرمجة هناك http://www.arabteam2000.com
اذا كنت ترغب بمراسلتي Tammam84@Yahoo.com
ملاحظاتك و استفساراتك مرحب بها على الدوام .
تمام كوجان
‏الثلاثاء‏، 7 جمادى الأولى 1427 هجري الموافق 24‏ كانون الثاني‏، 2006 ميلادي

يجوز نشر هذه المقالة أو أجزاء منها بشرط المحافظة على اسم الكاتب و عنوانه , أعلم أنه يمكنك ألا تفعل ذلك لكنها تبقى أمانة في عنقك .

روابط للتوسع في الموضوع :

ملاحظة : كتب هذا الموضوع بالاصل بتاريخ 24‏ كانون الثاني‏، 2006 كما ذكر في نص المقالة
و قد نشر عبى مدونتي السابقة قبل ان يتوقف الموقع المستضيف لذا ستجد في الصور رابط المدونة القديمة
تمام كوجان في 30/01/2007
ُEmail : TammamKoujan@Gmail.com
يجوز نشر هذه المقالة أو أجزاء منها بشرط المحافظة على اسم الكاتب و ذكر المصدر

Posted in برمجة | 9 Comments »