كيف اكسر حماية برنامج مكتوب بالـ .NET
ستتعلم العديد من المبادئ عن لغة مايكروسوفت الوسيطة و ستتعرف على كيفية كتابة برامج باستخدامها ,و
في نهاية هذا الدرس ستكون قادرا على استخدام برنامج ilasm و برنامج ildasm من خلال موجه الاوامر , كما و ستتمكن من تحويل البرنامج التنفيذي الناتج عن Visual Studio .NET إلى لغة ميكروسوفت الوسيطة MSIL و ستتمكن في النهاية من التعرف على كيفية فك حماية البرنامج المكتوب بتقنية .NET
- Windows XP Professional SP2
- Windows Notepad
هل تعرف برنامج Reflector ؟ إن لم تكن تعرفه مسبقا فالان ستتعرف عليه , هذا البرنامج عبارة تطبيق تستطيع من خلاله
القيام بهندسة عكسية لأي برنامج مكتوب بتقنية .NET , و بالتالي ستحصل على شيفرة البرنامج بكل سهولة و في دقائق معدودة (و لربما استغرق غيرك أشهرا ليكتب برنامجه) .
تبين لك الصورة أعلاه برنامج 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 بعيد عن موضوعنا الان)
افتح اية محرر نصوص , انا استخدم مفكرة ويندوز , و اكتب ما يلي:
{
.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
اذهب إلى السواقة C ستجد ان ملفا تنفيذيا يدعى il2exe.exe قد أنشأ . (هذا الملف لايقوم بأي شيء لكن الهدف توضيح الفكرة).
اذا ننتقل للمرحلة الثانية و هي تحويل شيفرة برنامج تنفيذي إلى IL .
قم بتشغيل VS.NET 2005 ستكون لغة البرمجة التي سأعتمدها هي C#
أنشأ مشروع ويندوز جديد و فم بتسميته ILTest .
اذهب إلى الحدث Paint للنموذج و اكتب ما يلي :
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 . سيعمل البرنامج و ستظهر رسالة كما في الصورة أدناه :
اذا نقرت موافق فستظهر النافذة الرئيسة للبرنامج كما في الصورة :
الان فلننتقل للعمل المهم :
قم بنسخ النسخة التنفيذية من برنامجنا و ضعها على السواقة C .
الان قم بتشغيل موجه الاوامر كما قمنا في المرحلة السابقة ثم اكتب ما يلي :
Ildasm ILTest.exe /out=ILTest.il
كما في الصورة :
ستجد انه قد تم انشاء ملف على السواقة C يحمل اسم ILTest.il هذا الملف هو ملف اللغة الوسيطة لبرنامجنا التنفيذي
قم بفتح الملف من خلال المفكرة
ثم قم بحذف الجزء التالي من الشيفرة
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
هذا القسم هو الرسالة التي يبين ان البرنامج نسخة تجريبية
الا قم بالبحث عن Tammam و استبدل اسمي باسمك و من ثم قم بحفظ الملف
الان اذهب إلى موجه الوامر كما فعلنا في المرات السابقة و اكتب :
ilasm iltest.il
ستشاهد كما في الصورة التالية :
سيتم توليد ملف تنفيذي جديد قم بتشغيله و ستجد ان الرسالة قد اختفت و ان اسمي قد استبدل باسمك
لتحميل شيفرة البرنامج :
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 ميلادي
يجوز نشر هذه المقالة أو أجزاء منها بشرط المحافظة على اسم الكاتب و عنوانه , أعلم أنه يمكنك ألا تفعل ذلك لكنها تبقى أمانة في عنقك .
روابط للتوسع في الموضوع :
و قد نشر عبى مدونتي السابقة قبل ان يتوقف الموقع المستضيف لذا ستجد في الصور رابط المدونة القديمة
ُEmail : TammamKoujan@Gmail.com
يجوز نشر هذه المقالة أو أجزاء منها بشرط المحافظة على اسم الكاتب و ذكر المصدر
