وعليكم السلام ورحمة الله وبركاته
من الواضح انه مستخدم مكتبة المهندس عثمان خورشيد وهو طرحها بشكل مجاني
تابع الفيديو ورايح تفهم ان شاء الله
لحماية برنامج فيجوال بيسك بحيث يتم تفعيله على جهاز واحد فقط، يمكن استخدام رمز تعريف الجهاز (Hardware ID)، والذي يعتمد على الخصائص الفريدة للجهاز مثل رقم المعالج أو القرص الصلب. إليك الخطوات مع مثال كامل:
الفكرة الأساسية:
مثال كامل
1. استخراج معرف الجهاز (Hardware ID)
استخدام خاصية مثل
لاستخراج معلومات عن الجهاز.
vb
نسخ الكود
2. إنشاء مفتاح التفعيل
استخدام دالة لتشفير معرف الجهاز وإنشاء مفتاح تفعيل.
vb
نسخ الكود
3. التحقق من المفتاح
مقارنة المفتاح المدخل مع المفتاح المُولد.
vb
نسخ الكود
4. واجهة المستخدم
إنشاء واجهة بسيطة تحتوي على مربع نص لإدخال مفتاح التفعيل وزر للتحقق.
vb
نسخ الكود
5. حفظ حالة التفعيل
استخدام إعدادات التطبيق لتخزين حالة التفعيل.
نسخ الكود
المخرجات:
كيفية تخزين المفتاح في الريجستري
1. استيراد مكتبة الريجستري
تحتاج إلى استيراد مكتبة التعامل مع الريجستري.
vb
نسخ الكود
2. كتابة المفتاح في الريجستري
استخدام الكود التالي لتخزين حالة التفعيل أو مفتاح التفعيل في الريجستري:
vb
نسخ الكود
3. قراءة المفتاح من الريجستري
استخدام الكود التالي لاسترجاع المفتاح من الريجستري:
vb
نسخ الكود
4. التحقق من حالة التفعيل
تعديل الكود للتحقق من المفتاح المخزن في الريجستري بدلاً من إعدادات البرنامج:
vb
نسخ الكود
5. تخزين المفتاح بعد التفعيل
عندما يتم التحقق من صحة المفتاح، يتم تخزينه في الريجستري:
vb
نسخ الكود
مزايا تخزين المفتاح في الريجستري:
من الواضح انه مستخدم مكتبة المهندس عثمان خورشيد وهو طرحها بشكل مجاني
تابع الفيديو ورايح تفهم ان شاء الله
لحماية برنامج فيجوال بيسك بحيث يتم تفعيله على جهاز واحد فقط، يمكن استخدام رمز تعريف الجهاز (Hardware ID)، والذي يعتمد على الخصائص الفريدة للجهاز مثل رقم المعالج أو القرص الصلب. إليك الخطوات مع مثال كامل:
الفكرة الأساسية:
- استخراج رمز تعريف الجهاز (Hardware ID): يتم استخراج معرف فريد للجهاز.
- إنشاء مفتاح التفعيل: يُستخدم معرف الجهاز لإنشاء مفتاح تفعيل خاص بالجهاز.
- التحقق من المفتاح: يتم مقارنة المفتاح المدخل مع المفتاح المولد من معرف الجهاز.
مثال كامل
1. استخراج معرف الجهاز (Hardware ID)
استخدام خاصية مثل
كود :
ManagementObjectSearchervb
نسخ الكود
كود :
Imports System.Management
Public Function GetHardwareID() As String
Dim id As String = ""
Try
Dim searcher As New ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor")
For Each obj As ManagementObject In searcher.Get()
id = obj("ProcessorId").ToString()
Exit For
Next
Catch ex As Exception
id = "Unknown"
End Try
Return id
End Functionاستخدام دالة لتشفير معرف الجهاز وإنشاء مفتاح تفعيل.
vb
نسخ الكود
كود :
Imports System.Security.Cryptography
Imports System.Text
Public Function GenerateActivationKey(hardwareID As String) As String
Using sha256 As SHA256 = SHA256.Create()
Dim bytes As Byte() = sha256.ComputeHash(Encoding.UTF8.GetBytes(hardwareID))
Dim sb As New StringBuilder()
For Each b As Byte In bytes
sb.Append(b.ToString("X2")) ' تحويل إلى نص سداسي عشري
Next
Return sb.ToString().Substring(0, 16) ' أول 16 رمز
End Using
End Functionمقارنة المفتاح المدخل مع المفتاح المُولد.
vb
نسخ الكود
كود :
Public Function IsActivationKeyValid(inputKey As String) As Boolean
Dim hardwareID As String = GetHardwareID()
Dim generatedKey As String = GenerateActivationKey(hardwareID)
Return inputKey.Equals(generatedKey)
End Functionإنشاء واجهة بسيطة تحتوي على مربع نص لإدخال مفتاح التفعيل وزر للتحقق.
vb
نسخ الكود
كود :
Private Sub btnActivate_Click(sender As Object, e As EventArgs) Handles btnActivate.Click
Dim inputKey As String = txtActivationKey.Text
If IsActivationKeyValid(inputKey) Then
MessageBox.Show("تم تفعيل البرنامج بنجاح!", "تفعيل")
' حفظ حالة التفعيل
My.Settings.IsActivated = True
My.Settings.Save()
Else
MessageBox.Show("مفتاح التفعيل غير صحيح.", "خطأ")
End If
End Subاستخدام إعدادات التطبيق لتخزين حالة التفعيل.
- افتح إعدادات المشروع وأضف مفتاحًا جديدًا باسم
IsActivated - من النوع
Boolean - وقيمة افتراضية
False - .
- تحقق من حالة التفعيل عند بدء تشغيل البرنامج:
نسخ الكود
كود :
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If Not My.Settings.IsActivated Then
MessageBox.Show("البرنامج غير مفعل. يرجى إدخال مفتاح التفعيل.", "تنبيه")
Me.Close() ' إغلاق البرنامج
End If
End Subالمخرجات:
- عند تشغيل البرنامج على جهاز جديد، يتم توليد معرف الجهاز ومقارنته مع المفتاح المُدخل.
- لن يعمل البرنامج إلا إذا كان المفتاح صحيحًا ومطابقًا لمعرفة الجهاز.
- يمكنك استخدام خوارزميات تشفير إضافية لتعزيز الأمان.
- يمكن تخزين المفتاح في خادم بعيد للتأكد من عدم التلاعب.
كيفية تخزين المفتاح في الريجستري
1. استيراد مكتبة الريجستري
تحتاج إلى استيراد مكتبة التعامل مع الريجستري.
vb
نسخ الكود
كود :
Imports Microsoft.Win32استخدام الكود التالي لتخزين حالة التفعيل أو مفتاح التفعيل في الريجستري:
vb
نسخ الكود
كود :
Public Sub SaveActivationKeyToRegistry(activationKey As String)
Try
Dim registryKey As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\MyApplication")
registryKey.SetValue("ActivationKey", activationKey, RegistryValueKind.String)
registryKey.Close()
Catch ex As Exception
MessageBox.Show("حدث خطأ أثناء تخزين المفتاح في الريجستري: " & ex.Message, "خطأ")
End Try
End Subاستخدام الكود التالي لاسترجاع المفتاح من الريجستري:
vb
نسخ الكود
كود :
Public Function GetActivationKeyFromRegistry() As String
Try
Dim registryKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\MyApplication", False)
If registryKey IsNot Nothing Then
Dim activationKey As String = registryKey.GetValue("ActivationKey", "").ToString()
registryKey.Close()
Return activationKey
End If
Catch ex As Exception
MessageBox.Show("حدث خطأ أثناء قراءة المفتاح من الريجستري: " & ex.Message, "خطأ")
End Try
Return String.Empty
End Functionتعديل الكود للتحقق من المفتاح المخزن في الريجستري بدلاً من إعدادات البرنامج:
vb
نسخ الكود
كود :
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim storedKey As String = GetActivationKeyFromRegistry()
If String.IsNullOrEmpty(storedKey) OrElse Not IsActivationKeyValid(storedKey) Then
MessageBox.Show("البرنامج غير مفعل. يرجى إدخال مفتاح التفعيل.", "تنبيه")
Me.Close() ' إغلاق البرنامج
End If
End Subعندما يتم التحقق من صحة المفتاح، يتم تخزينه في الريجستري:
vb
نسخ الكود
كود :
Private Sub btnActivate_Click(sender As Object, e As EventArgs) Handles btnActivate.Click
Dim inputKey As String = txtActivationKey.Text
If IsActivationKeyValid(inputKey) Then
SaveActivationKeyToRegistry(inputKey)
MessageBox.Show("تم تفعيل البرنامج بنجاح!", "تفعيل")
Me.Close() ' إغلاق نافذة التفعيل
Else
MessageBox.Show("مفتاح التفعيل غير صحيح.", "خطأ")
End If
End Subمزايا تخزين المفتاح في الريجستري:
- صعوبة وصول المستخدم العادي للمفتاح أو تعديله.
- المفتاح يظل محفوظًا حتى بعد حذف التطبيق وإعادة تثبيته.
- استخدم التشفير لحماية المفتاح عند تخزينه في الريجستري.
- اختر مفتاحًا فريدًا داخل الريجستري لتجنب التعارض مع تطبيقات أخرى (مثل:
"Software\MyApplication" - ).
- تأكد من أن الكود يتعامل مع استثناءات الوصول إلى الريجستري بحذر، خاصةً إذا كان المستخدم يعمل بدون صلاحيات إدارية.

