03-10-12, 01:45 PM
كاتب الموضوع : magicsword
بسم الله الرحمن الرحيممقدمة
اود ان اقدم لكم اليوم مكتبة Magic Lock و هي مكتبة متخصصة في حماية و تفعيل البرامج من خلال الانترنت قمت بكتباتها بلغة VB.Net 10 موجهة لاطار العمل 4.
بعد البحث المضني في منتدى VB4ARAB و المنتديات الاخرى عن طرق حماية البرامج من الاستخدام الغير المرخص و طرق التسجيل... لم اجد ضالتي.... وجدت طرق ضعيفة يمكن لاي مبرمج مبتدئ تخطيها بسهولة.... و وجدت طرق معقدة و غير عملية ولا يمكن تطبيقها. لذلك كان لابد من كتابة مكتبتي الخاصة بي مستعينا بالله و بخبراتي التي اكتسبتها هنا.
--------------------------------------------------------------------------
مكتبة Magic Lock
تتكون مكتبة Magic Lock من وظيفتين اساسيتين هم:
LV (License Validation) --> وهي وظيفة التحقق من رخصة البرنامج ويتم استدعائها في كل مرة يعمل فيها البرنامج و تعود بقيمة True في حالة نجاح التحقق من ترخيص استخدام البرنامج.
LG (License Generation) --- وهي وظيفة توليد رخصة جديدة و يتم استدعائها عند رغبة المستخدم في شراء البرنامج و تعود بقيمة True في حالة نجاح التحقق من Serial Number وتوليد رخصة استخدام البرنامج.
تعتمد مكتبة Magic Lock على تقنيات XML و التشفير و الانترنت في توليد و التعرف على رخص الاستخدام.
دعونا نتعرف على دورة حياة البرنامج لكي نفهم طريقة التسجيل و التحقق من رخصة الاستخدام .... سوف ناخذ برنامجي XP Services Optimizer على سبيل المثال و هو برنامج يحتوي على و ظائف مجانية ووظائف تحتاج الى تسجيل..... فقد استخدمت فية مكتبة Magic Lock للحماية و لكن معدلة - لدواعي امنية -
http://www.smartpcutilities.com/xso.html
--------------------------
1. يقوم المستخدم بتحميل البرنامج و تثبيتة لاول مرة.
2. عند التشغيل يقوم البرنامج باستدعاء الدالة LV للتحقق من وجود رخص مثبتة على الجهاز لاستخدامها و الرخصة محفوظة على شكل ملف اسمة License في نفس مجلد البرنامج . لن يجد البرنامج اي رخصة مثبتة و بالتالي سوف يقوم بعمل block للوظائف التي تحتاج تسجيل.
3. عندما يقوم المستخدم بضغط على وظيفة تحتاج للتسجبل.. سوف يظهر Upgrade dialogbox كما في الصورة يطلب من المستخدم ادخال سيريال مكون من 18 رمز او شراء سيريال جديد.
4. هنفترض ان المستخدم عايز يشتري البرنامج و يضغط على Purchase .
5. البرنامج يقوم بفتح صفحة الشراء على موقع Plimus.com و هي الشركة التي تتولى عملية تحصيل الاموال من المستخدم و نقلها لحسابي و تتولى ايضا توليد ارقام التسجيل للبرنامج Serial Numbers .
6. بعد نجاح عملية الشراء يتم ارسال رسالة الى بريد المستخدم تحتوي على السريال نمبر الذي سوف يستخدم في تسجيل البرنامج النسخة Pro
7. يقوم المستخدم بادخال الرقم التسلسلي المكون من 18 رمز ثم الضغط على Upgrade ..... يقوم البرنامج باستدعاء الدالة LG التي سوف تقوم بالتحقق من الرقم التسلسلي من خلال الاتصال ب موقع مشفر SSL توفرة شركة Plimus وفي حالة نجاح التحقق من Serial Number تقوم نفس الدالة بتوليد ملف الرخصة و هو ملف مشفر ب Rijndael 256 bit يحتوي على المعلومات الخاصة بالبرنامج و بالحاسب الالي الخاص بالمستخدم.
8. يقوم البرنامج بعمل اعادة تشغيل
9. في بداية التشغيل يتحقق البرنامج من خلال الدالة LV من الرخصة License من خلال فك تشفيرها في الذاكرة والتاكد من ان محتواها يتوافق مع النسخة الحالية للبرنامج و للنظام التشغيل الحالي.
10. في حالة نجاح التحقق من ترخيص البرنامج ....... يتم عمل Unblock لكل وظائف البرنامج
-------------------------------
كود المكتبة مع الشرح
كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#ff8000]#Region "References"
[/COLOR][color=#0000bb]Imports System[/color][color=#007700].[/color][COLOR=#0000bb]IO
Imports System[/COLOR][color=#007700].[/color][COLOR=#0000bb]Net
Imports System[/COLOR][color=#007700].[/color][COLOR=#0000bb]Xml
Imports System[/COLOR][color=#007700].[/color][COLOR=#0000bb]Text
Imports System[/COLOR][color=#007700].[/color][COLOR=#0000bb]Management
Imports System[/COLOR][color=#007700].[/color][color=#0000bb]Security[/color][color=#007700].[/color][COLOR=#0000bb]Cryptography
[/COLOR][COLOR=#ff8000]#End Region
[/COLOR][color=#0000bb][/color][/COLOR]
كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]<[/color][color=#0000bb]Assembly[/color][color=#007700]: [/color][color=#0000bb]CLSCompliant[/color][color=#007700]([/color][color=#0000bb]True[/color][COLOR=#007700])>
[/COLOR][COLOR=#0000bb]متغير يحمل السريال نمبر للهارد
[/COLOR][color=#007700]Private [/color][color=#0000bb]HID [/color][color=#007700]As [/color][COLOR=#0000bb]String
[/COLOR][/COLOR]
كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#dd0000]' وظيفة التحقق من الرخصة و LF هو ملف الرخصة
Public Function LV(ByVal LF As String) As Boolean
If File.Exists(LF) = True Then
Try
'[/COLOR][COLOR=#0000bb]يتم استدعاء وظيفة GetPCID والتي تستخدم في جلب معلومات عن الحاسب الالي
GetPCID[/COLOR][COLOR=#007700]()
[/COLOR][COLOR=#dd0000]' لفك تشفير ملف الرخصة لقرائة معلومات التي بداخله
Dim Rijndael As New RijndaelManaged
Rijndael.Key = Gk() ' [/COLOR][COLOR=#0000bb]يتم استدعاء الدالة لجلب رقم لفك التشفير
Rijndael[/COLOR][color=#007700].[/color][color=#0000bb]IV [/color][color=#007700]= {[/color][color=#0000bb]50[/color][color=#007700], [/color][color=#0000bb]199[/color][color=#007700], [/color][color=#0000bb]10[/color][color=#007700], [/color][color=#0000bb]159[/color][color=#007700], [/color][color=#0000bb]132[/color][color=#007700], [/color][color=#0000bb]55[/color][color=#007700], [/color][color=#0000bb]236[/color][color=#007700], [/color][color=#0000bb]189[/color][color=#007700], [/color][color=#0000bb]51[/color][color=#007700], [/color][color=#0000bb]243[/color][color=#007700], [/color][color=#0000bb]244[/color][color=#007700], [/color][color=#0000bb]91[/color][color=#007700], [/color][color=#0000bb]17[/color][color=#007700], [/color][color=#0000bb]136[/color][color=#007700], [/color][color=#0000bb]39[/color][color=#007700], [/color][color=#0000bb]230[/color][COLOR=#007700]}
[/COLOR][color=#0000bb]Dim Decryptor [/color][color=#007700]As [/color][color=#0000bb]ICryptoTransform [/color][color=#007700]= [/color][color=#0000bb]Rijndael[/color][color=#007700].[/color][color=#0000bb]CreateDecryptor[/color][color=#007700]([/color][color=#0000bb]Rijndael[/color][color=#007700].[/color][color=#0000bb]Key[/color][color=#007700], [/color][color=#0000bb]Rijndael[/color][color=#007700].[/color][color=#0000bb]IV[/color][COLOR=#007700])
[/COLOR][color=#0000bb]File[/color][color=#007700].[/color][color=#0000bb]SetAttributes[/color][color=#007700]([/color][color=#0000bb]LF[/color][color=#007700], [/color][color=#0000bb]FileAttributes[/color][color=#007700].[/color][color=#0000bb]Normal[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim LFStream [/color][color=#007700]As [/color][color=#0000bb]FileStream [/color][color=#007700]= New [/color][color=#0000bb]FileStream[/color][color=#007700]([/color][color=#0000bb]LF[/color][color=#007700], [/color][color=#0000bb]FileMode[/color][color=#007700].[/color][color=#0000bb]Open[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim DeCryptoReadStream [/color][color=#007700]As New [/color][color=#0000bb]CryptoStream[/color][color=#007700]([/color][color=#0000bb]LFStream[/color][color=#007700], [/color][color=#0000bb]Decryptor[/color][color=#007700], [/color][color=#0000bb]CryptoStreamMode[/color][color=#007700].[/color][color=#0000bb]Read[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim LFReader [/color][color=#007700]As New [/color][color=#0000bb]StreamReader[/color][color=#007700]([/color][color=#0000bb]DeCryptoReadStream[/color][COLOR=#007700])
[/COLOR][COLOR=#dd0000]' قرائة ملف الرخصة بعد تشفيرة
Dim LXML As New System.Xml.XmlDocument
LXML.LoadXml(LFReader.ReadToEnd())
LFReader.Close()
' [/COLOR][COLOR=#0000bb]التحقق من اسم البرنامج
Dim ProductNameNode [/COLOR][color=#007700]As [/color][color=#0000bb]XmlNodeList [/color][color=#007700]= [/color][color=#0000bb]LXML[/color][color=#007700].[/color][color=#0000bb]GetElementsByTagName[/color][color=#007700]([/color][color=#dd0000]"ProductName"[/color][COLOR=#007700])
For [/COLOR][color=#0000bb]Each Item [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Xml[/color][color=#007700].[/color][COLOR=#0000bb]XmlElement In ProductNameNode
[/COLOR][color=#007700]If [/color][color=#0000bb]Item[/color][color=#007700].[/color][color=#0000bb]InnerText [/color][color=#007700]<> [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Application[/color][color=#007700].[/color][color=#0000bb]Info[/color][color=#007700].[/color][color=#0000bb]ProductName[/color][color=#007700].[/color][COLOR=#0000bb]ToUpper Then
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]False
End [/COLOR][COLOR=#007700]If
[/COLOR][COLOR=#0000bb]Next
ProductNameNode [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
[/COLOR][COLOR=#dd0000]' التحقق من اصدار البرنامج
Dim ProductVersionNode As XmlNodeList = LXML.GetElementsByTagName("ProductVersion")
For Each Item As System.Xml.XmlElement In ProductVersionNode
If CInt(Item.InnerText) <> My.Application.Info.Version.Major Then
Return False
End If
Next
ProductVersionNode = Nothing
' [/COLOR][COLOR=#0000bb]التحقق من سيريال الهارد ديسك
Dim HIDNode [/COLOR][color=#007700]= [/color][color=#0000bb]LXML[/color][color=#007700].[/color][color=#0000bb]GetElementsByTagName[/color][color=#007700]([/color][color=#dd0000]"HID"[/color][COLOR=#007700])
For [/COLOR][color=#0000bb]Each Item [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Xml[/color][color=#007700].[/color][COLOR=#0000bb]XmlElement In HIDNode
[/COLOR][color=#007700]If [/color][color=#0000bb]Item[/color][color=#007700].[/color][color=#0000bb]InnerText [/color][color=#007700]<> [/color][color=#0000bb]HID[/color][color=#007700].[/color][COLOR=#0000bb]ToUpper Then
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]False
End [/COLOR][COLOR=#007700]If
[/COLOR][COLOR=#0000bb]Next
HIDNode [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
[/COLOR][COLOR=#dd0000]' Finalizing
DeCryptoReadStream.Close()
LFStream.Close()
Return True ' [/COLOR][COLOR=#0000bb]نجاح التحقق من الرخصة الاستخدام
[/COLOR][color=#007700]Catch [/color][color=#0000bb]ex [/color][color=#007700]As [/color][COLOR=#0000bb]Exception
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]False
End [/COLOR][COLOR=#007700]Try
Else
Return [/COLOR][COLOR=#0000bb]False
End [/COLOR][COLOR=#007700]If
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Function
[/COLOR][color=#0000bb][/color][/COLOR]
كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#dd0000]' وظيفة التحقق من السريال وتوليد ملف الرخصة
' [/COLOR][COLOR=#0000bb]LF ملف الرخصة
[/COLOR][COLOR=#dd0000]' LK السريال الذي ادخلة المستخدم
Public Function LG(ByVal LF As String, ByVal LK As String) As Integer
Try
'[/COLOR][COLOR=#0000bb]يتم استدعاء وظيفة GetPCID والتي تستخدم في جلب معلومات عن الحاسب الالي
Call GetPCID[/COLOR][COLOR=#007700]()
[/COLOR][COLOR=#dd0000]' الموقع التي توفرة شركة Plimus .... قمت بتغيرة لعدم الافصاح عنة
' [/COLOR][COLOR=#0000bb]يتم تمرير السريال نمبر و معلومات الحاسب الالي المراد التحقق منها
[/COLOR][COLOR=#dd0000]'XML رد الموقع على هئية ملف
' [/COLOR][COLOR=#0000bb]يقوم الموقع بالتحقق من صحة السريال نمبر و هل تم استخدامة قبل ذلك ام لا
Dim ValURL [/COLOR][color=#007700]As New [/color][color=#0000bb]Uri[/color][color=#007700]([/color][color=#dd0000]"https://www.google.com" [/color][color=#007700]& [/color][color=#0000bb]LK [/color][color=#007700]& [/color][color=#dd0000]"&uniqueMachineId=" [/color][color=#007700]& [/color][color=#0000bb]CID [/color][color=#007700]& [/color][color=#0000bb]HID[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim LRequest [/color][color=#007700]As [/color][color=#0000bb]WebRequest [/color][color=#007700]= [/color][color=#0000bb]WebRequest[/color][color=#007700].[/color][color=#0000bb]Create[/color][color=#007700]([/color][color=#0000bb]ValURL[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim LResponse [/color][color=#007700]As [/color][color=#0000bb]WebResponse [/color][color=#007700]= [/color][color=#0000bb]LRequest[/color][color=#007700].[/color][COLOR=#0000bb]GetResponse
Dim ValReader [/COLOR][color=#007700]As New [/color][color=#0000bb]StreamReader[/color][color=#007700]([/color][color=#0000bb]LResponse[/color][color=#007700].[/color][color=#0000bb]GetResponseStream[/color][color=#007700]) [/color][COLOR=#dd0000]' قرائة رد الموقع
' [/COLOR][COLOR=#0000bb]معرفة رد الموقع على السريال نمبر المراد التحقق منة
[/COLOR][COLOR=#dd0000]' والذي يعود بقيمة من القيم الاتية
Dim ValXML As New System.Xml.XmlDocument
ValXML.LoadXml(ValReader.ReadToEnd)
Dim StatusNode As XmlNodeList = ValXML.GetElementsByTagName("status")
For Each Item As System.Xml.XmlElement In StatusNode
If Item.InnerText.ToUpper.StartsWith("ERROR_INVALIDKEY") = True Then ' [/COLOR][COLOR=#0000bb]السريال نمبر غير صحيح
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]2
[/COLOR][color=#007700]ElseIf [/color][color=#0000bb]Item[/color][color=#007700].[/color][color=#0000bb]InnerText[/color][color=#007700].[/color][color=#0000bb]ToUpper[/color][color=#007700].[/color][color=#0000bb]StartsWith[/color][color=#007700]([/color][color=#dd0000]"ERROR_INVALIDPRODUCT"[/color][color=#007700]) = [/color][color=#0000bb]True Then [/color][COLOR=#dd0000]' البرنامج غير صحيح
Return 3
ElseIf Item.InnerText.ToUpper.StartsWith("ERROR_EXPIREDKEY") = True Then ' [/COLOR][COLOR=#0000bb]السريال نمبر منتهي الصالحية
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]4
[/COLOR][color=#007700]ElseIf [/color][color=#0000bb]Item[/color][color=#007700].[/color][color=#0000bb]InnerText[/color][color=#007700].[/color][color=#0000bb]ToUpper[/color][color=#007700].[/color][color=#0000bb]StartsWith[/color][color=#007700]([/color][color=#dd0000]"ERROR_INVALIDMACHINE"[/color][color=#007700]) = [/color][color=#0000bb]True Then [/color][COLOR=#dd0000]' معلومات الحاسب الالي غير صحيحة
Return 5
ElseIf Item.InnerText.ToUpper.StartsWith("ERROR_MAXCOUNT") = True Then ' [/COLOR][COLOR=#0000bb]السريال نمبر مستخدم من قبل
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]6
[/COLOR][color=#007700]ElseIf [/color][color=#0000bb]Item[/color][color=#007700].[/color][color=#0000bb]InnerText[/color][color=#007700].[/color][color=#0000bb]ToUpper[/color][color=#007700].[/color][color=#0000bb]StartsWith[/color][color=#007700]([/color][color=#dd0000]"SUCCESS"[/color][color=#007700]) = [/color][color=#0000bb]True Then [/color][COLOR=#dd0000]' نجاح التحقق من السريال وسوف يتم توليد ملف الرخصة
' [/COLOR][COLOR=#0000bb]سوف يتم من خلالة تشفير ملف الرخصة
Dim Rijndael [/COLOR][color=#007700]As New [/color][COLOR=#0000bb]RijndaelManaged
Rijndael[/COLOR][color=#007700].[/color][color=#0000bb]Key [/color][color=#007700]= [/color][color=#0000bb]Gk[/color][color=#007700]() [/color][COLOR=#dd0000]' يتم استدعاء الدالة لتوليد رقم عشوائي للتشفير
Rijndael.IV = {50, 199, 10, 159, 132, 55, 236, 189, 51, 243, 244, 91, 17, 136, 39, 230}
' [/COLOR][COLOR=#0000bb]مسح ملف الرخصة القديم
[/COLOR][color=#007700]If [/color][color=#0000bb]File[/color][color=#007700].[/color][color=#0000bb]Exists[/color][color=#007700]([/color][color=#0000bb]LF[/color][color=#007700]) = [/color][COLOR=#0000bb]True Then
File[/COLOR][color=#007700].[/color][color=#0000bb]SetAttributes[/color][color=#007700]([/color][color=#0000bb]LF[/color][color=#007700], [/color][color=#0000bb]FileAttributes[/color][color=#007700].[/color][color=#0000bb]Normal[/color][COLOR=#007700])
[/COLOR][color=#0000bb]File[/color][color=#007700].[/color][color=#0000bb]Delete[/color][color=#007700]([/color][color=#0000bb]LF[/color][COLOR=#007700])
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If
[/COLOR][COLOR=#dd0000]' كتابة ملف الرخصة باستخدم XML
Using LXMLWriter As XmlWriter = XmlWriter.Create(LF)
LXMLWriter.WriteStartDocument()
LXMLWriter.WriteStartElement("License")
LXMLWriter.WriteStartElement("Product")
LXMLWriter.WriteElementString("ProductName", My.Application.Info.ProductName.ToUpper) ' [/COLOR][COLOR=#0000bb]اسم البرنامج
LXMLWriter[/COLOR][color=#007700].[/color][color=#0000bb]WriteElementString[/color][color=#007700]([/color][color=#dd0000]"ProductVersion"[/color][color=#007700], [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Application[/color][color=#007700].[/color][color=#0000bb]Info[/color][color=#007700].[/color][color=#0000bb]Version[/color][color=#007700].[/color][color=#0000bb]Major[/color][color=#007700].[/color][color=#0000bb]ToString[/color][color=#007700]) [/color][COLOR=#dd0000]' اصدار البرنامج
LXMLWriter.WriteElementString("HID", HID.ToUpper) ' [/COLOR][COLOR=#0000bb]السيريال نمبر للهارد
LXMLWriter[/COLOR][color=#007700].[/color][color=#0000bb]WriteElementString[/color][color=#007700]([/color][color=#dd0000]"Key"[/color][color=#007700], [/color][color=#0000bb]LK[/color][color=#007700].[/color][color=#0000bb]ToUpper[/color][color=#007700]) [/color][COLOR=#dd0000]' السريال نمبر
LXMLWriter.WriteEndElement()
LXMLWriter.Flush()
LXMLWriter.Close()
End Using
Dim LReader As New StreamReader(LF)
Dim LXML As String = LReader.ReadToEnd
LReader.Close()
'[/COLOR][COLOR=#0000bb]تشفير ملف الرخصة
Dim LFStream [/COLOR][color=#007700]As [/color][color=#0000bb]FileStream [/color][color=#007700]= New [/color][color=#0000bb]FileStream[/color][color=#007700]([/color][color=#0000bb]LF[/color][color=#007700], [/color][color=#0000bb]FileMode[/color][color=#007700].[/color][color=#0000bb]Create[/color][color=#007700], [/color][color=#0000bb]FileAccess[/color][color=#007700].[/color][color=#0000bb]ReadWrite[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim Encryptor [/color][color=#007700]As [/color][color=#0000bb]ICryptoTransform [/color][color=#007700]= [/color][color=#0000bb]Rijndael[/color][color=#007700].[/color][color=#0000bb]CreateEncryptor[/color][color=#007700]([/color][color=#0000bb]Rijndael[/color][color=#007700].[/color][color=#0000bb]Key[/color][color=#007700], [/color][color=#0000bb]Rijndael[/color][color=#007700].[/color][color=#0000bb]IV[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim CryptoWriteStream [/color][color=#007700]As New [/color][color=#0000bb]CryptoStream[/color][color=#007700]([/color][color=#0000bb]LFStream[/color][color=#007700], [/color][color=#0000bb]Encryptor[/color][color=#007700], [/color][color=#0000bb]CryptoStreamMode[/color][color=#007700].[/color][color=#0000bb]Write[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim LWriter [/color][color=#007700]As New [/color][color=#0000bb]StreamWriter[/color][color=#007700]([/color][color=#0000bb]CryptoWriteStream[/color][COLOR=#007700])
[/COLOR][color=#0000bb]LWriter[/color][color=#007700].[/color][color=#0000bb]Write[/color][color=#007700]([/color][color=#0000bb]LXML[/color][COLOR=#007700])
[/COLOR][color=#0000bb]LWriter[/color][color=#007700].[/color][color=#0000bb]Close[/color][COLOR=#007700]()
[/COLOR][COLOR=#dd0000]' Finalizing
ValXML = Nothing
LXML = Nothing
CryptoWriteStream.Close()
LFStream.Close()
' [/COLOR][COLOR=#0000bb]نجاح توليد الرخصة
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]1
End [/COLOR][COLOR=#007700]If
[/COLOR][COLOR=#0000bb]Next
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]0
[/COLOR][color=#007700]Catch [/color][color=#0000bb]ex [/color][color=#007700]As [/color][COLOR=#0000bb]Exception
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]0
End [/COLOR][COLOR=#007700]Try
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Function
[/COLOR][color=#0000bb][/color][/COLOR]
كود :
[color=#000000][COLOR=#0000bb] [/color][color=#007700]Private [/color][color=#0000bb]Sub GetPCID[/color][COLOR=#007700]()
[/COLOR][color=#0000bb]Dim Searcher [/color][color=#007700]As [/color][COLOR=#0000bb]ManagementObjectSearcher
جلب السريال نمبر الخاص بالهراد ديسك
Searcher [/COLOR][color=#007700]= New [/color][color=#0000bb]ManagementObjectSearcher[/color][color=#007700]([/color][color=#dd0000]"Select * From Win32_DiskDrive"[/color][COLOR=#007700])
For [/COLOR][color=#0000bb]Each Device [/color][color=#007700]As [/color][color=#0000bb]ManagementObject In Searcher[/color][color=#007700].[/color][COLOR=#0000bb]Get
[/COLOR][color=#007700]For [/color][color=#0000bb]Each Prop [/color][color=#007700]As [/color][color=#0000bb]PropertyData In Device[/color][color=#007700].[/color][COLOR=#0000bb]Properties
[/COLOR][color=#007700]If [/color][color=#0000bb]Prop[/color][color=#007700].[/color][color=#0000bb]Name [/color][color=#007700]= [/color][color=#dd0000]"Signature" [/color][COLOR=#0000bb]Then
HID [/COLOR][color=#007700]= [/color][color=#0000bb]Prop[/color][color=#007700].[/color][color=#0000bb]Value[/color][color=#007700].[/color][COLOR=#0000bb]ToString
End [/COLOR][COLOR=#007700]If
[/COLOR][COLOR=#0000bb]Next
Next
End Sub
[/COLOR][/COLOR]
كود :
[color=#000000][COLOR=#0000bb] [/color][color=#007700]Private Function [/color][color=#0000bb]Gk[/color][color=#007700]() As [/color][color=#0000bb]Byte[/color][COLOR=#007700]()
[/COLOR][COLOR=#0000bb]توليد مفتاح لتشفير الرخصة من خلال تحويل السيريال نمبر الخاص بالديسك الى Hash
Dim PlainBytes [/COLOR][color=#007700]As [/color][color=#0000bb]Byte[/color][COLOR=#007700]()
[/COLOR][color=#0000bb]Dim HashEngine [/color][color=#007700]As [/color][color=#0000bb]MD5CryptoServiceProvider [/color][color=#007700]= New [/color][COLOR=#0000bb]MD5CryptoServiceProvider
PlainBytes [/COLOR][color=#007700]= [/color][color=#0000bb]Encoding[/color][color=#007700].[/color][color=#0000bb]UTF8[/color][color=#007700].[/color][color=#0000bb]GetBytes[/color][color=#007700]([/color][color=#0000bb]HID[/color][COLOR=#007700])
Return ([/COLOR][color=#0000bb]HashEngine[/color][color=#007700].[/color][color=#0000bb]ComputeHash[/color][color=#007700]([/color][color=#0000bb]PlainBytes[/color][COLOR=#007700]))
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Function
[/COLOR][color=#0000bb][/color][/COLOR]
لاستخدام المكتبة داخل التطبيق
كود :
[COLOR=#000000][COLOR=#0000bb] متغير يحمل الرقم التي تعود بة الدالة LG
Dim SNum [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Integer
[/COLOR][/COLOR]
كود :
[color=#000000][COLOR=#0000bb][/color][color=#007700]Private [/color][color=#0000bb]Sub BWValidate_DoWork[/color][color=#007700]([/color][color=#0000bb]sender [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Object[/color][color=#007700], [/color][color=#0000bb]e [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]ComponentModel[/color][color=#007700].[/color][color=#0000bb]DoWorkEventArgs[/color][color=#007700]) [/color][color=#0000bb]Handles BWValidate[/color][color=#007700].[/color][COLOR=#0000bb]DoWork
استدعاء الدالة LG للتحق من السريال نمبر
Dim MLock [/COLOR][color=#007700]As New [/color][color=#0000bb]MagicLock[/color][color=#007700].[/color][COLOR=#0000bb]MagicLockLib
SNum [/COLOR][color=#007700]= [/color][color=#0000bb]MLock[/color][color=#007700].[/color][color=#0000bb]LG[/color][color=#007700]([/color][color=#0000bb]Application[/color][color=#007700].[/color][color=#0000bb]StartupPath [/color][color=#007700]& [/color][color=#dd0000]"\License"[/color][color=#007700], [/color][color=#0000bb]TxtLicense[/color][color=#007700].[/color][color=#0000bb]Text[/color][COLOR=#007700])
[/COLOR][COLOR=#0000bb]End Sub
[/COLOR][/COLOR]
كود :
[color=#000000][COLOR=#0000bb] [/color][color=#007700]Private [/color][color=#0000bb]Sub BWValidate_RunWorkerCompleted[/color][color=#007700]([/color][color=#0000bb]sender [/color][color=#007700]As [/color][color=#0000bb]Object[/color][color=#007700], [/color][color=#0000bb]e [/color][color=#007700]As [/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]ComponentModel[/color][color=#007700].[/color][color=#0000bb]RunWorkerCompletedEventArgs[/color][color=#007700]) [/color][color=#0000bb]Handles BWValidate[/color][color=#007700].[/color][COLOR=#0000bb]RunWorkerCompleted
FrmProgress[/COLOR][color=#007700].[/color][color=#0000bb]PBProgress[/color][color=#007700].[/color][color=#0000bb]Style [/color][color=#007700]= [/color][color=#0000bb]ProgressBarStyle[/color][color=#007700].[/color][COLOR=#0000bb]Blocks
FrmProgress[/COLOR][color=#007700].[/color][color=#0000bb]PBProgress[/color][color=#007700].[/color][color=#0000bb]Value [/color][color=#007700]= [/color][COLOR=#0000bb]100
[/COLOR][COLOR=#dd0000]' النجاح من التحقق من السريال وتوليد الرخصة
If SNum = 1 Then
FrmProgress.Text = "Finished"
FrmProgress.LblProgress.Text = "Upgraded to the Professional Edition."
FrmProgress.PicProgress.Image = My.Resources.Enabled
' [/COLOR][COLOR=#0000bb]السريال خاطئ
[/COLOR][color=#007700]ElseIf [/color][color=#0000bb]SNum [/color][color=#007700]= [/color][color=#0000bb]2 OrElse SNum [/color][color=#007700]= [/color][color=#0000bb]3 OrElse SNum [/color][color=#007700]= [/color][COLOR=#0000bb]5 Then
FrmProgress[/COLOR][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#dd0000]"Failed"
[/COLOR][color=#0000bb]FrmProgress[/color][color=#007700].[/color][color=#0000bb]LblProgress[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#dd0000]"The entered license key details is invalid."
[/COLOR][color=#0000bb]FrmProgress[/color][color=#007700].[/color][color=#0000bb]PicProgress[/color][color=#007700].[/color][color=#0000bb]Image [/color][color=#007700]= [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Resources[/color][color=#007700].[/color][COLOR=#0000bb]Wrong
[/COLOR][COLOR=#dd0000]' السريال منتهي الصلاحية
ElseIf SNum = 4 Then
FrmProgress.Text = "Failed"
FrmProgress.LblProgress.Text = "The entered license key details is expired."
FrmProgress.PicProgress.Image = My.Resources.Wrong
' [/COLOR][COLOR=#0000bb]السريال استخدم من قبل
[/COLOR][color=#007700]ElseIf [/color][color=#0000bb]SNum [/color][color=#007700]= [/color][COLOR=#0000bb]6 Then
FrmProgress[/COLOR][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#dd0000]"Failed"
[/COLOR][color=#0000bb]FrmProgress[/color][color=#007700].[/color][color=#0000bb]LblProgress[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#dd0000]"The entered license key is used before."
[/COLOR][color=#0000bb]FrmProgress[/color][color=#007700].[/color][color=#0000bb]PicProgress[/color][color=#007700].[/color][color=#0000bb]Image [/color][color=#007700]= [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Resources[/color][color=#007700].[/color][COLOR=#0000bb]Wrong
[/COLOR][COLOR=#007700]Else
[/COLOR][color=#0000bb]FrmProgress[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#dd0000]"Failed"
[/COLOR][color=#0000bb]FrmProgress[/color][color=#007700].[/color][color=#0000bb]LblProgress[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][COLOR=#dd0000]"Error occurred during license validation."
[/COLOR][color=#0000bb]FrmProgress[/color][color=#007700].[/color][color=#0000bb]PicProgress[/color][color=#007700].[/color][color=#0000bb]Image [/color][color=#007700]= [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Resources[/color][color=#007700].[/color][COLOR=#0000bb]Wrong
End [/COLOR][COLOR=#007700]If
[/COLOR][color=#0000bb]FrmProgress[/color][color=#007700].[/color][color=#0000bb]BtnOK[/color][color=#007700].[/color][color=#0000bb]Enabled [/color][color=#007700]= [/color][COLOR=#0000bb]True
End Sub
[/COLOR][/COLOR]
ان شاء الله جاهز لاي مناقشة او استفسار
بالتوفيق
اخوكم mAgIc sWoRd
مشكورين يا شباب