أهلا بكم في عالمي


كيف اكسر حماية برنامج مكتوب بالـ .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

كلمة أخيرة :

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

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

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

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

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

Comments on: "كيف اكسر حماية برنامج مكتوب بالـ .NET" (10)

  1. مشكور أخي تمام على هذا الدرس الجميل
    تحياتي

  2. لا شكر على واجب اخي ايوب
    و شكرا لتعليقك الجميل
    استأذن منك بوضع موقعك ضمن المواقع الصديقة

  3. هذا شرف لي ان يكون موقعي ضمن المواقع الصديقة لديك🙂
    هل يمكنني وضع مقالتك هذه في موقعي طبعا مع حفظ جميع الحقوق ؟؟

  4. طبعا اخي ايوب

  5. Wael Dalloul said:

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

  6. اهلا وائل
    شرفتني و اسعدتني زيارتك
    انتظر الموضوع الدسم القادم و الذي يتحدث عن امر معاكس تماما
    و هو كيف احمي برامجي المكتوبة بالدوت نت
    حاليا احاول تطوير طريقة حماية مبتكرة

  7. ابوطلال said:

    يعطيك العافية على هذا الموضوع الحلو

    وهنيئا لك بهذة المدونة الرائعة

    ولي سؤال :

    انت شرحت كيف يتم كسر حماية البرنامج لكن كيف تتم حماية البرنامج

    و ماهي لغة البرمجة التي كودها لا يمكن الاطلاع عليه

    سمعت ان السي بلس بلس دوت نت لا يمكن الاطلاع على كودها

    ولك تحياتي

  8. اهلا بك اخ ابو طلال
    بالنسبة للحماية توجد هناك عدة طرق لكن تذكر
    انه في النهاية لا توجد حماية مطلقة لكنك تصعب الطريق على من يريد كسر برامجك
    فلا يكسرها إلى بعد جهد جهيد

    بالنسبة للسي بلس بلس دوت نت فالكود يمكن الاطلاع عليه اذا بنيت برنامجك
    على انه تطبيق دوت نت اي انه يعتمد على
    .NET Framework
    اما اذا بنيت تطبيقك على انه
    Win32
    اي لم تستخدم اي شيء من الدوت نت فلن يتمكن
    احد من الحصول على الشيفرة اللهم إلا بشكل شيفرة
    بلغة الاسمبلي لكن لن يستفيد منها المخترق كثيرا اي ان كود برنامجك سيبقى محميا
    لكن كسره سيكون ممكنا
    اي ان المخترق لو استطاع كسر برنامج فسيستطيع استخدامه مجانا لكنه لن يستطيع معرفة الكود
    على عكس ما يحص في الدوت نت اذ يستطيع الوصول للكود
    لكن هناك طريقة لحماية كود الدوت نت تدعى التشويش تقوم بتحويل المتحولات و الدوال المستخدمة إلى اسماء مبهمة تجعل الكود صعب الفهم
    كما قلت عمليات الحماية كثيرة و الهدف منها تأخير المخترق و اطالة الوقت عليه قدر الامكان

  9. […] التطبيقية لبرامج الدوت نيت، و الآن أقدم لكم هذه مقالة كيف اكسر حماية برنامج مكتوب بالـ .NET و هي مقالة كتبها تمام كوجان. تستخدم هذه المقالة نفس […]

  10. […] مصدر الدرس : مدونة الأخ تمام كوجان  […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: