05-10-12, 03:43 AM
كاتب الموضوع : FlyToAbd
سنناقش هنا حماية البرامج وهذا الموضوع هو توسعة للموضوع http://vb4arb.com/vb/showthread.php?970
واول اجراء هو الحماية برقم القرص
كود :
[SIZE=2][color=#0000ff]PublicFunction[/color] HardCode() [color=#0000ff]As[/color][/SIZE][SIZE=2][COLOR=#0000ff]String
[/COLOR][color=#0000ff]Dim[/color] Ret [color=#0000ff]As[/color][/SIZE][SIZE=2][COLOR=#0000ff]String
[/COLOR][color=#0000ff]Dim[/color] DriveLetter [color=#0000ff]As[/color][color=#0000ff]String[/color] = Application.StartupPath.Substring(0, 3)
[color=#0000ff]Dim[/color] obj_FSO [color=#0000ff]As[/color][color=#0000ff]Object[/color], obj_Drive [color=#0000ff]As[/color][/SIZE][SIZE=2][COLOR=#0000ff]Object
[/COLOR]obj_FSO = CreateObject([color=#800000]"Scripting.FileSystemObject"[/color])
obj_Drive = obj_FSO.GetDrive(DriveLetter)
Ret = obj_Drive.SerialNumber
obj_FSO = [/SIZE][SIZE=2][COLOR=#0000ff]Nothing
[/COLOR]obj_Drive = [/SIZE][SIZE=2][COLOR=#0000ff]Nothing
[/COLOR]Ret = [color=#0000ff]New[/color][color=#0000ff]String[/color]([color=#800000]"0"[/color], 8 - Ret.Length) & Ret
[color=#0000ff]Return[/color] Ret
[color=#0000ff]End[/color][/SIZE][SIZE=2][COLOR=#0000ff]Function
[/COLOR][/SIZE]
KD هو رقم القرص الصلب نجده من الدالة
SN هو الرقم الذي يمثل معكوس KD ويمكن حسابه من Not KD هذا هو سر الفكرة مع اعادة جعل عدد مراتبه مساوي لثمانية
نحفظ SN في قاعدة البيانات وعند تشغيل البرنامج نجلب SN من القاعدة ثم نقرأ KD من خلال الدالة اعلاه ونختبر Not SN=KD فاذا كانت النتيجة True فان البرنامج غير مسروق والا فهو اما مسروق او تم تنصيبه لاول مرة فنظهر رسالة للمستخدم تعطيه قيمة KD وتطلب منه تسليمه الى البائع للبرنامج ويطلب منه كتابة الرقم الذي يعطيه البائع والذي هو Not KD فعندما يدخل SN نحفظه في قاعدة البيانات ونفحص Not SN=KD اما يكون صحيح او نعيد عرض الرسالة وامكانية انهاء البرنامج
عيوب الفكرة اعلاه انه لم عملنا Format للقرص او نصبنا Windows عليه من جديد سيتغير رقم القرص وعليه سيضطر المستخدم للاتصال بك لتعطيه مفتاح جديد للبرنامج
كود :
[SIZE=2][color=#0000ff]Public[/color][/SIZE][SIZE=2][color=#0000ff]Shared[/color][/SIZE][SIZE=2][color=#0000ff]Function[/color][/SIZE][SIZE=2] MacAddress() [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][COLOR=#0000ff]String
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Try
[/COLOR][/SIZE][SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] Ret [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#800000]""
[/COLOR][/SIZE][SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] strMACAddress [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#800000]""
[/COLOR][/SIZE][SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] strQuery [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2][color=#0000ff]String[/color][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#800000]"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True"
[/COLOR][/SIZE][SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] query [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] ManagementObjectSearcher = [/SIZE][SIZE=2][color=#0000ff]New[/color][/SIZE][SIZE=2] ManagementObjectSearcher(strQuery)
[/SIZE][SIZE=2][color=#0000ff]Dim[/color][/SIZE][SIZE=2] queryCollection [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] ManagementObjectCollection = query.Get()
[/SIZE][SIZE=2][color=#0000ff]For[/color][/SIZE][SIZE=2][color=#0000ff]Each[/color][/SIZE][SIZE=2] mo [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] ManagementObject [/SIZE][SIZE=2][color=#0000ff]In[/color][/SIZE][SIZE=2] queryCollection
strMACAddress = mo([/SIZE][SIZE=2][color=#800000]"MacAddress"[/color][/SIZE][SIZE=2]).ToString().Replace([/SIZE][SIZE=2][color=#800000]":"[/color][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#800000]""[/color][/SIZE][SIZE=2]) : [/SIZE][SIZE=2][color=#0000ff]Exit[/color][/SIZE][SIZE=2][COLOR=#0000ff]For
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]Next
[/COLOR][/SIZE][SIZE=2]Ret = strMACAddress
[/SIZE][SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2] Ret
[/SIZE][SIZE=2][COLOR=#008000]' From Command DOS C:\> GetMAC
[/COLOR][/SIZE][SIZE=2][color=#0000ff]Catch[/color][/SIZE][SIZE=2] ex [/SIZE][SIZE=2][color=#0000ff]As[/color][/SIZE][SIZE=2] Exception
[/SIZE][SIZE=2][color=#0000ff]Return[/color][/SIZE][SIZE=2][COLOR=#800000]""
[/COLOR][/SIZE][SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][COLOR=#0000ff]Try
[/COLOR][/SIZE][SIZE=2][color=#0000ff]End[/color][/SIZE][SIZE=2][COLOR=#0000ff]Function
[/COLOR][/SIZE]