تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
حماية البرامج
#1
ان نقاش موضوع الحماية هو نقاش غير منتهي بين المبرمجين , و في الحقيقة لا يوجد طريقة فعالة جدا  تمكنك من حماية برامجك عن عيون المتطفلين , لكن اختيار الادوات المناسبة و التقنية الملائمة تمكنك من حماية برنامجك بطريقة قوية  الى حد ما .
تتعدد الطرق و الوسائل الخاصة بحماية البرامج و تسعى شركات الحماية (الخاصة بانتاج برمجيات للحماية) دائما الى ابتكار طرق جديدة للحماية

اغلب الطرق ان لم نقل جلها تعتمد على تشفير الملفات الحاوية للشيفرة البرمجية و انتاج ملفات جديدة مشفرة و مموهة و فق خوارزميات خاصة مثل RSA او ECC
اذ ان الطرق التي يستخدمها الهكر هي غالبا تعتمد على فك ترميز وحدات الشيفرة الخاصة ببرنامجك , فاذا كانت وحداتك غير محمية بمعنى انها غير مشفرة عندها ستفتح امامه كل الاجرائيات و الدوال و المتغيرات امامه بالمختصر سيكون قادر على الاطلاع على كل الشيفرة البرمجية الخاصة بك 
فاذا كان لديك طريقة مهما كانت بسيطة او معقدة لحماية برنامجك و هذه الطريقة تعتمد على توليد مفاتيح خاصة بكل نسخة من البرنامج ,وكانت الطريقة تعتمد على الشيفرة البرمجية (بطبيعة الحال هذا ما يجري دائما) فان اي هاكر سيقوم بفك ترميز البرنامج سيكون من السهل عليه معرفة الطريقة التي يتم بها توليد المفتاح و بالتالي سيقوم بسرقة الدالة المسؤولة عن ذلك و انتاج برنامج صغير يقوم بتوليد المفاتيح مجانا
اما عن النسخ التجريبية فالطريقة هي بعمل تعطيل للدالة المسؤلة فحص التاريخ او اجراء عملية قفز و بالتالي عدم قرائتها و من ثم اعادة بناء للبرنامج وفق الشروط الجديدة (هذا ما نراه غالبا في طرق Crack) .
اذاً مهما كانت الطريقة التي ستتبعها لحماية برامجك فانت بحاجة الى حماية ملفاتك البرمجية او دمجها و تشفيرها , و هذا هو المتبع لدى البرامج الكبيرة و المحمية بشكل جيد : لا يوجد شيئ محمي دائما!!!!



يوجد عدد من الشركات المختصة بتقنيات الحماية و التي توفر لك ادوات سهلة و قوية لحماية برنامجك لكن المشكلة في ان هذه التقنيات ليست مجانية و حتى ان الاداة التي تاتي مع Visual Studio و المحملة بشكل افتراضي مع كل نسخة (Dotfuscator) تاتي مع امكانيات محدودة و يتوجب عليك شراء النسخة لاتاحة كافة الامكانيات .

كانت بعض النسخ القديمة من هذه الاداة مجانية بالكامل لكن تطور (FrameWork) الخاص باللغة ادى الى عدم توافق  مع النسخ القديمة .

يوجد شركات اخرى تقوم بانتاج ادوات الحماية مثل Eazfuscator.NET و كذلك Obfuscar و ايضا 
 SoftActivate Licensing SDK .

توفر هذه الشركات ادوات متطورة للحماية و فيها الكثير من المزايا الاخيرة تتوفر بسعر رخيص مقارنة بالشركات الاخرى و هي تعتمد تقنية ECC في تشفير المنتج و كذلك تقوم بانتاج مفاتيح موقعة رقميا بتقنية Eliptic Curve Cryptography و الجيد في هذه الاداة انها بالاضافة الى وظائف التشفير تحتوي على مكتبة كبيرة فيها الكثير من الوظائف مثل امكانية الحصول على ارقام قطع الجهاز و تشفيرها و ربطها مع مفتاح المنتج و حتى على مستوى السيرفرات تقوم بتامين الحماية للبرامج التي تطلب تسجيل مفاتيحها عبر الانترنت.
اذ تجعل الاتصال بالسيرفر الخاص بتوليد المفاتيح اتصال آمن و مشفر .

لن نناقش كثيرا موضوع الشركات و طرقها , لانه و كما اسلفنا نحن بحاجة شيئ و لو بسيط و مجاني يساعدنا في حماية برامجنا و تشفيرها و جعل عملية فك الترميز صعبة على الهكر الذي يحاول السرقة (بالنهاية ليس هناك برنامج محمي دائما) و هذا هو رأي شركات الحماية في هذا الموضوع .
موضوعنا سيكون عن طريقة حماية بسيطة و من ثم تشفير برنامجنا بالاداة المرفقة مع Visual Studio و محاولة فك ترميز البرنامج قبل و بعد التشفير و رؤية التغيرات الحاصلة

يتبع.....
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}}
#2
ممتاز، هذا الكلام العلمي
متشوق للمتابعة وانا في انتظار التحديث أخي ابوليلى
وحبذا لو تعرج على البرنامج الرائع في مجال الـ obfuscation لبرامج الدوت نت
برنامج ConfuserEx
https://github.com/yck1509/ConfuserEx
تحياتي
الرد }}}}
تم الشكر بواسطة: ابو ليلى , ابو ليلى
#3
السلام عليكم و رحمة الله
استكمالاً للموضوع : سنعمل مشروع صغير و نقوم بتامين الحماية .
الطريقة التي سنعمل بها هي طلب رقم المعالج في الجهاز و من ثم يتم اخذ هذا الرقم و اجراء تحويل له عبر الاسكي كود و من ثم تمويه الرقم الناتج عبر اليونيكود و من ثم اقتصاص عدد محدد من الحروف من الرقم الناتج و سيكون هذا الرقم هو مفتاح البرنامج و من ثم نخزنه داخل البرنامج , طبعا الطريقة تناسب جهاز واحد فقط حيث الرقم الناتج هو خاص بهذا الجهاز فقط , لان البرنامج كل مرة يعمل بها يقوم بالتحقق من رقم المعالج و من ثم يجري مقارنة بين الرقم الناتج و الرقم المخزن و اذا لم تتم المطابقة يطالب المستخدم بادخال الرقم .
للامانة الطريقة كانت في المنتدى القديم و اعتقد انها للاخ العضو نور نبهان
لنبدأ : اعمل مشروع في واجهة اللغة من النوع Windows Forms نسمي المشروع باسم MyProg
سيحتوي المشروع على 3 نماذج
1- النموذج الاول = Form1 و هو واجهة المستخدم التي يتفاعل معها , سيكون بسيط عبارة عن نموذج يحوي مربع نص و زر امر فقط.
2- النموذج الثاني = Login وهو نموذج دخول المستخدم للبرنامج , و هو يحتوي ايضا على زر امر و مربع نص للتحقق من القيمة فاذا تم التطابق ندخله الى النموذج الرئيسي Form1 .
3- النموذج الثالث = Freg  و هو نموذج خاص بادخال رقم التفعيل للبرنامج و هو يحتوي على مربعي نص و زر امر
    مربع يحتوي على رقم تسجيل النسخة و مربع فارغ المفروض على المستخد ان يدخل فيه رقم التفعيل للنسخة
    بعد ان يرسل لك رقم التسجيل.

طبعا في الطرف المقابل سيكون لديك برنامج صغير يقوم بتفكيك رقم التسجيل و اصدار رقم التفعيل و من ثم تشغيل البرنامج.

4- وحدة نمطية = Model1 , سنستخدمها لاضافة الدوال و المتغيرات التي سنتعامل معها.
5- سيكون لدينا متغير نصي في اعدادت البرنامج نسميه RegCode  سنستخدمه لتخزين رقم التفعيل لاجراء المقارنة
   في كل مرة يقلع فيها البرنامج.

الان ناتي الى صور النماذج (اعملها كما بالصور)

النموذج Form1



النموذج Login



النموذج Freg




سنتعامل مع مكتبة System.Management و هي مكتبة مضمنة ضمن اللغة سنستفيد من الدوال بداخلها للحصول على رقم اي قطعة للجهاز لذلك سنستوردها للمشروع و نتعامل معها
اولا ناتي لكود الوحدة النمطية سيحتوي على دالة لتحويل رقم المعالج الى اسكي و دالة للتمويه بتحويله الى يونيكود
و متغير نخزن به رقم التسجيل.
دوال الوحدة النمطية Model1



كود :
Module Module1

   Public REGCODE As String 'كود التسجيل


   'التحويل الى الاسكي
   Function Str2Int(ByVal InStrng As Object) As String
       Dim StrLn As Integer
       Dim Cntr As Integer
       Dim NewStr As String
       Str2Int = ""
       StrLn = Len(InStrng)
       If StrLn = 0 Then Exit Function
       NewStr = ""
       For Cntr = 1 To StrLn
           Select Case Mid(InStrng, Cntr, 1)
               Case "0" To "z"
                   NewStr = NewStr & Asc(Mid(InStrng, Cntr, 1))

           End Select
       Next Cntr
       Str2Int = NewStr
   End Function

   'دالة التشويش
   Public Function Obfuscate(ByVal origText As String) As String
       Dim textBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(origText)
       For counter As Integer = 0 To textBytes.Length - 1

           If (textBytes(counter) > 31) And (textBytes(counter) < 127) Then
               textBytes(counter) += CByte(counter Mod 31 + 1)
           End If

           If (textBytes(counter) > 126) Then
               textBytes(counter) -= CByte(95)
           End If

       Next counter
       Return System.Text.Encoding.Unicode.GetChars(textBytes)
   End Function


End Module

الان ناتي الى النموذج Login سنجعل عملية الفحص تتم في هذا النموذج و هو النموذج الاول في البرنامج (اي النموذج الذي يقلع منه التطبيق)
نستورد المكتبة System.Management في بدايته و من ثم نعرف مجموعة متغيرات نصية سنتعامل معها كما يلي



كود :
Imports System.Management

Public Class Login

   'متغيرات لتفعيل البرنامج
   Dim Idp As String
   Dim Idp1 As String
   Dim idp2 As String



الان في حدث التحميل للنموذج Login

كود :
   Private Sub Login_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       'البحث عن رقم المعالج و تخزينه
       Dim Searcher As ManagementObjectSearcher
       Searcher = New ManagementObjectSearcher("Select ProcessorId From Win32_Processor")
       For Each Device As ManagementObject In Searcher.Get
           For Each Prop As PropertyData In Device.Properties
               Idp = (Prop.Value.ToString)
           Next
       Next
       '---------
       Idp = Obfuscate(Idp)
       Idp = Str2Int(Idp)
       '------------------
       Idp1 = Obfuscate(Idp)
       Idp1 = Str2Int(Idp1)
       Idp1 = (Idp1.Substring(0, 13))
       If My.Settings.RegCode = Idp1 Then
           REGCODE = Idp.Substring(2, 4)
           REGCODE += My.Settings.RegCode.Substring(3, 3)
       Else
           Freg.ShowDialog()
           Me.Close()
       End If

   End Sub

مجرد اكواد عادية للبحث عن رقم المعالج و استخدام الدوال التي في Model1 لاجراء عمليات التشويش
و من ثم مقارنة الرقم الناتج مع الرقم المحفوظ في اعدادت البرنامج,و اذا نجح الامر نشغل البرنامج او نطالب المستخدم بادخال رقم التفعيل في النموذج Freg 

اول الامور التي ستجري عند المستخدم هي تشغيل البرنامج و بالتالي سيتم مطالبته بتفعيل البرنامج 
هذا يقودنا الى نموذج التفعيل Freg 
ناتي الى النموذج Freg نفس الحركة في النموذج السابق مع زيادة بسيطة و هي اننا سنقوم فقط باخذ 14 محرف من رقم المعالج لان رقم المعالج طويل جدا.

كود :
Imports System.Management
Public Class Freg
   Dim idp As String ' رقم المعالج
   Dim idp1 As String ' رقم التسجيل
   Dim idp2 As String ' رقم التفعيل

   Private Sub Freg_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       Try
           Dim Searcher As ManagementObjectSearcher
           Searcher = New ManagementObjectSearcher("Select ProcessorId From Win32_Processor")
           For Each Device As ManagementObject In Searcher.Get
               For Each Prop As PropertyData In Device.Properties
                   idp = (Prop.Value.ToString)
               Next
           Next

           'تشويش للرقم
           idp = Obfuscate(idp)
           'التحويل الى اسكي
           idp = Str2Int(idp)
           'رقم التسجيل
           TextBoxReg.Text = idp

           'تشويش الرقم
           idp1 = Obfuscate(idp)
           'تحويل رقم التفعيل الى اسكي
           idp1 = Str2Int(idp1)
           'اقتصاص 14 رقم
           idp1 = (idp1.Substring(0, 13))
       Catch ex As Exception

       End Try

   End Sub
الكود مشروح و لا يحتاج الى المزيد
الان في زر التفعيل الكود التالي

كود :
   Private Sub Freg_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
       Try
           idp2 = idp1

           If TextBoxUser.Text = "" Then
               MessageBox.Show("رقم التفعيل غير صحيح" & vbCrLf & "سيتم انهاء البرنامج", "تفعيل البرنامج", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
               End
           End If

           If TextBoxUser.Text <> idp2 Then
               MessageBox.Show("رقم التفعيل غير صحيح" & vbCrLf & "سيتم انهاء البرنامج", "تفعيل البرنامج", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
               End
           Else
               MessageBox.Show("تم تفعيل البرنامج بنجاح" & vbCrLf & "سيتم انهاء البرنامج , اعد تشغيله من فضلك", "تفعيل البرنامج", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
               My.Settings.RegCode = TextBoxUser.Text
               My.Settings.Save()
               End
           End If

       Catch ex As Exception

       End Try

الكود بسيط جدا هو اجراء تفعيل للبرنامج و فق الرقم المعطى للمستخدم بعد اجراء المقارنة المطلوبة
بالنسبة للفورم Form1 لا يحتوي شيئ   لاننا افترضنا ان هذا النموذج هو واجهة التطبيق الخاصة بالمستخدم اذ لا يسمح بالوصول اليه الا بعد اجراء التفعيل .

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



الان ناتي لموضوع الحماية الذي تكلمنا عنه سابقا , المهمة ستكون عبارة عن استخدام احد برامج الحماية التي تقوم بتشفير المكتبات و الملفات البرمجية و دمجها و غيرها من الامور التي تساعد على تامين الحماية اللازمة للبرنامج
البرنامج المستخدم هو DotFuscator و الذي ياتي مرفقا مع Visual Studio و هو برنامج ياتي بامكانيات محدودة لكنه يؤدي الغرض بشكل جيد بالنسبة لموضوعنا
نفتح المشروع الذي نعمل عليه حاليا Myprog  و نذهب الى قائمة Tools هنا يتواجد برنامجنا و نتابع كما بالصورة



بعد عمل المطلوب وافق على كل شيئ يظهر امامك و بعدها سيقوم البرنامج بالمهمة المطلوبة منه
لتجد ان مجلد جديد اضيف داخل مجلد Debug الخاص بالبرنامج و المجلد اسمه Dotfuscated
و هو يحتوي على ملف التطبيق الخاص بنا بالاضافة الى ملف Xml  اذا القيت عليه نظرة ستعرف كيف قام بتشفير الدوال و الكائنات الخاصة بالبرنامج.
يبقى الشق المتعلق بفك ترميز البرنامج و معرفة ما حصل
في العادة يقوم القراصنة باستخدام برامج لفك ترميز البرامج و اجراء المطلوب لتشغيل البرنامج
كوني لست منهم و لا اعرف الكثير عن اعمالهم , لكن وجب الاطلاع و لو بالقليل 
ما توفر لدي هو برنامج NetReflector  و هو اشهر برنامج لفك تطبيقات الدوت نت
النسخة التي لدي لا تدعم نسخة اطار الدوت نت الذي املكه على اي حال هي ترينا الفرق بين البرنامج المحمي و غير المحمي
الشرح كما بالصور








تابع ......
من هنا تحدد اللغة و اصدارة FrameWork




كما ترى كل شيئ مكشوف و امكانية تهكير البرنامج كبيرة جدا , بل ان البرنامج مفتوح امام اقل الهكر خبرة
الان دعنا نفتح التطبيق الذي تم عليه التشفير و الموجود في مجلد Dotfuscated لنرى كما بالصورة


طبعا ستلاحظ ان هناك قصر في الحماية فما زالت اعدادت البرنامج مفتوحة و هذا ناتج عن البرنامج كونه ليس كاملا
بامكانك شراء الاداة من الموقع او طلب رقم تسجيل لها , لا اعرف بالضبط ما الذي ساحصل عليه منهم و بماذا يفيدني لاني قد طلبت رقم تفعيل للنسخة و بانتظار البريد من الشركة و الى الان لم يصلني شيئ

بالتوفيق للجميع

المرفقات تحتوي على برنامجنا الذي عملناه بالاضافة الى برنامج التفعيل Activerprog
البرنامجين ضمن المجلد المضغوط

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

و شيئ جميل ان يتوفر برنامج مجاني و مفتوح المصدر ساحاول في وقت لاحق دراسته ان امكن ذلك و شكرا لمرورك


الملفات المرفقة
.rar   My Prog.rar (الحجم : 347.74 ك ب / التحميلات : 153)
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}}
#4
السلام عليكم



عن تجربة شخصية



أقوى برنامج استخدمته للحماية برنامج CodeWall



رابط الموقع: CodeWall





تحياتي
الرد }}}}
تم الشكر بواسطة: الشاكي لله , الكاتب , ابو ليلى , abas010 , abas010
#5
انا استخدم للحماية برنامج Confuser وسريال ليعمل البرنامج على جهاز واحد اسمه ims wifi system
ولقد وجدت بعض المواقع العربية والاجنبية قد قامت بعمل كراك للبرنامج

https://www.dev-point.com/vb/threads/605425
http://www.keygenit.net/keygen/key-gener...-1.00.html
الرد }}}}
تم الشكر بواسطة: ابو ليلى


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مقال- مقدمة الي حماية البرامج RaggiTech 0 1,122 05-10-12, 10:52 AM
آخر رد: RaggiTech
  طرق حماية البرنامج من الاستنساخ RaggiTech 3 724 05-10-12, 03:45 AM
آخر رد: RaggiTech
  درس - طريقة عمل الباركود وكيفية إستغلاله في البرامج المحاسبية RaggiTech 0 10,356 03-10-12, 01:53 PM
آخر رد: RaggiTech
  حماية وتفعيل البرامج Magic Lock RaggiTech 0 744 03-10-12, 01:45 PM
آخر رد: RaggiTech
  حماية السورس كود RaggiTech 5 790 03-10-12, 01:43 PM
آخر رد: RaggiTech
  تعلم حماية برنامجك بحيث لا يعمل الا على قرص صلب واحد RaggiTech 0 826 03-10-12, 09:36 AM
آخر رد: RaggiTech
  مكتبة تظم أكثر من [ 25.500 ] ملف للأيقونات والخلفيات المتلاحمة لمصممي البرامج RaggiTech 4 1,585 01-10-12, 10:11 PM
آخر رد: RaggiTech
  سلسلة تقنيات تحسين واجهات البرامج - النوافذ الطبقية RaggiTech 1 570 01-10-12, 04:55 PM
آخر رد: RaggiTech
  فن كتابة البرامج و معالجة المشاكل المبرمج الطموح vb6 0 357 29-09-12, 10:36 PM
آخر رد: المبرمج الطموح vb6
  مكتبة تظم أكثر من [ 25.500 ] ملف للأيقونات والخلفيات المتلاحمة لمصممي البرامج وصفحات m.sami.ak 0 546 15-09-12, 03:00 PM
آخر رد: m.sami.ak

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم