استفسار عن حمايه البرنامج - ahmedramy - 24-12-24
كنت اشتريت سورس كود من حد ومبعتليش برنامج التفعيل بتاعه ده الكود اللي جوه السورس الخاص بالتفعيل
اي المعادله او الكود اللي يخليني اطلع كود تفعيل للبرنامج
كود :
Imports Security.FingerPrint
Imports MicroVisionSerial.Encryption.Activation
Imports System.Management
Imports System.Data.OleDb
Public Class active_pro
Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\setting.mdb;Jet OLEDB:Database Password=spaxet2020"
Dim Conn As New OleDbConnection(ConStr)
Private Sub active_pro_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
serial.Text = Value()
Catch ex As Exception
End Try
check()
End Sub
Sub save_acrivw()
If Conn.State = ConnectionState.Closed Then
Conn.Open()
End If
Dim cmd As New OleDb.OleDbCommand
cmd.Connection = Conn
cmd.CommandType = CommandType.Text
cmd.CommandText = "UPDATE seial_check SET MACAddress= @MACAddress,Win32_Processor= @Win32_Processor,SerialNumber= @SerialNumber WHERE idsetting = " & 1 & " "
cmd.Parameters.AddWithValue("MACAddress", MACAddress.Text)
cmd.Parameters.AddWithValue("Win32_Processor", Win32_Processor.Text)
cmd.Parameters.AddWithValue("SerialNumber", SerialNumber.Text)
cmd.ExecuteScalar()
Conn.Close()
MsgBox("تم تفعيل البرنامج بنجاح..شكرا")
End Sub
Private Sub exit_btn_Click(sender As Object, e As EventArgs) Handles exit_btn.Click
End
End Sub
Private Sub inserte_btn_Click(sender As Object, e As EventArgs) Handles inserte_btn.Click
If CheckActivationKey(serial.Text, active.Text) = True Then
save_acrivw()
End
Else
MsgBox("رقم التفعيل غير صحيح", MsgBoxStyle.Exclamation, "خطاء")
End If
End Sub
Sub check()
Try
'رقم ابرسيور
Dim MOS_PR As New ManagementObjectSearcher("SELECT * FROM Win32_Processor")
Dim mo_PR As ManagementObject
For Each mo_PR In MOS_PR.Get()
Win32_Processor.Text = mo_PR("ProcessorId").ToString()
Next
'===========================================
Catch ex As Exception
End Try
End Sub
Private Sub active_TextChanged(sender As Object, e As EventArgs) Handles active.TextChanged
End Sub
Private Sub SerialNumber_Click(sender As Object, e As EventArgs) Handles SerialNumber.Click
End Sub
Private Sub MACAddress_Click(sender As Object, e As EventArgs) Handles MACAddress.Click
End Sub
End Class
RE: استفسار عن حمايه البرنامج - aljzazy - 25-12-24
وعليكم السلام ورحمة الله وبركاته
من الواضح انه مستخدم مكتبة المهندس عثمان خورشيد وهو طرحها بشكل مجاني
تابع الفيديو ورايح تفهم ان شاء الله
لحماية برنامج فيجوال بيسك بحيث يتم تفعيله على جهاز واحد فقط، يمكن استخدام رمز تعريف الجهاز (Hardware ID)، والذي يعتمد على الخصائص الفريدة للجهاز مثل رقم المعالج أو القرص الصلب. إليك الخطوات مع مثال كامل:
الفكرة الأساسية:
- استخراج رمز تعريف الجهاز (Hardware ID): يتم استخراج معرف فريد للجهاز.
- إنشاء مفتاح التفعيل: يُستخدم معرف الجهاز لإنشاء مفتاح تفعيل خاص بالجهاز.
- التحقق من المفتاح: يتم مقارنة المفتاح المدخل مع المفتاح المولد من معرف الجهاز.
مثال كامل
1. استخراج معرف الجهاز (Hardware ID)
استخدام خاصية مثل
كود :
ManagementObjectSearcher
لاستخراج معلومات عن الجهاز.
vb
نسخ الكود
كود :
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
2. إنشاء مفتاح التفعيل
استخدام دالة لتشفير معرف الجهاز وإنشاء مفتاح تفعيل.
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
3. التحقق من المفتاح
مقارنة المفتاح المدخل مع المفتاح المُولد.
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
4. واجهة المستخدم
إنشاء واجهة بسيطة تحتوي على مربع نص لإدخال مفتاح التفعيل وزر للتحقق.
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
5. حفظ حالة التفعيل
استخدام إعدادات التطبيق لتخزين حالة التفعيل.
- افتح إعدادات المشروع وأضف مفتاحًا جديدًا باسم
IsActivated
- من النوع
Boolean
- وقيمة افتراضية
False
- .
- تحقق من حالة التفعيل عند بدء تشغيل البرنامج:
vb
نسخ الكود
كود :
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
2. كتابة المفتاح في الريجستري
استخدام الكود التالي لتخزين حالة التفعيل أو مفتاح التفعيل في الريجستري:
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
3. قراءة المفتاح من الريجستري
استخدام الكود التالي لاسترجاع المفتاح من الريجستري:
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
4. التحقق من حالة التفعيل
تعديل الكود للتحقق من المفتاح المخزن في الريجستري بدلاً من إعدادات البرنامج:
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
5. تخزين المفتاح بعد التفعيل
عندما يتم التحقق من صحة المفتاح، يتم تخزينه في الريجستري:
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"
- ).
- تأكد من أن الكود يتعامل مع استثناءات الوصول إلى الريجستري بحذر، خاصةً إذا كان المستخدم يعمل بدون صلاحيات إدارية.
|