كيف اكسر حماية برنامج مكتوب بالـ .NET
Posted by tammamkoujan on February 1, 2007
كيف اكسر حماية برنامج مكتوب بالـ .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
يجوز نشر هذه المقالة أو أجزاء منها بشرط المحافظة على اسم الكاتب و ذكر المصدر

Ayoub (Crazy-Man) said
مشكور أخي تمام على هذا الدرس الجميل
تحياتي
tammamkoujan said
لا شكر على واجب اخي ايوب
و شكرا لتعليقك الجميل
استأذن منك بوضع موقعك ضمن المواقع الصديقة
Ayoub (Crazy-Man) said
هذا شرف لي ان يكون موقعي ضمن المواقع الصديقة لديك
هل يمكنني وضع مقالتك هذه في موقعي طبعا مع حفظ جميع الحقوق ؟؟
tammamkoujan said
طبعا اخي ايوب
Wael Dalloul said
درس في غاية الروعة يا تمام
الله يجزيك الخير و ينفع الناس بك
شكرا جزيلا
tammamkoujan said
اهلا وائل
شرفتني و اسعدتني زيارتك
انتظر الموضوع الدسم القادم و الذي يتحدث عن امر معاكس تماما
و هو كيف احمي برامجي المكتوبة بالدوت نت
حاليا احاول تطوير طريقة حماية مبتكرة
ابوطلال said
يعطيك العافية على هذا الموضوع الحلو
وهنيئا لك بهذة المدونة الرائعة
ولي سؤال :
انت شرحت كيف يتم كسر حماية البرنامج لكن كيف تتم حماية البرنامج
و ماهي لغة البرمجة التي كودها لا يمكن الاطلاع عليه
سمعت ان السي بلس بلس دوت نت لا يمكن الاطلاع على كودها
ولك تحياتي
tammamkoujan said
اهلا بك اخ ابو طلال
بالنسبة للحماية توجد هناك عدة طرق لكن تذكر
انه في النهاية لا توجد حماية مطلقة لكنك تصعب الطريق على من يريد كسر برامجك
فلا يكسرها إلى بعد جهد جهيد
بالنسبة للسي بلس بلس دوت نت فالكود يمكن الاطلاع عليه اذا بنيت برنامجك
على انه تطبيق دوت نت اي انه يعتمد على
.NET Framework
اما اذا بنيت تطبيقك على انه
Win32
اي لم تستخدم اي شيء من الدوت نت فلن يتمكن
احد من الحصول على الشيفرة اللهم إلا بشكل شيفرة
بلغة الاسمبلي لكن لن يستفيد منها المخترق كثيرا اي ان كود برنامجك سيبقى محميا
لكن كسره سيكون ممكنا
اي ان المخترق لو استطاع كسر برنامج فسيستطيع استخدامه مجانا لكنه لن يستطيع معرفة الكود
على عكس ما يحص في الدوت نت اذ يستطيع الوصول للكود
لكن هناك طريقة لحماية كود الدوت نت تدعى التشويش تقوم بتحويل المتحولات و الدوال المستخدمة إلى اسماء مبهمة تجعل الكود صعب الفهم
كما قلت عمليات الحماية كثيرة و الهدف منها تأخير المخترق و اطالة الوقت عليه قدر الامكان
مدونة مؤيد » أرشيف المدونة » مثال عملي - كسر حماية أحد برامج الدوت نيت said
[...] التطبيقية لبرامج الدوت نيت، و الآن أقدم لكم هذه مقالة كيف اكسر حماية برنامج مكتوب بالـ .NET و هي مقالة كتبها تمام كوجان. تستخدم هذه المقالة نفس [...]