تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
حماية وتفعيل البرامج Magic Lock
#1
كاتب الموضوع : 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

مشكورين يا شباب
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  حماية البرامج ابو ليلى 4 970 31-07-16, 01:07 AM
آخر رد: Kian Tech
  مقال- مقدمة الي حماية البرامج RaggiTech 0 1,106 05-10-12, 10:52 AM
آخر رد: RaggiTech
  طرق حماية البرنامج من الاستنساخ RaggiTech 3 717 05-10-12, 03:45 AM
آخر رد: RaggiTech
  درس - طريقة عمل الباركود وكيفية إستغلاله في البرامج المحاسبية RaggiTech 0 10,253 03-10-12, 01:53 PM
آخر رد: RaggiTech
  حماية السورس كود RaggiTech 5 784 03-10-12, 01:43 PM
آخر رد: RaggiTech
  تعلم حماية برنامجك بحيث لا يعمل الا على قرص صلب واحد RaggiTech 0 822 03-10-12, 09:36 AM
آخر رد: RaggiTech
  مكتبة تظم أكثر من [ 25.500 ] ملف للأيقونات والخلفيات المتلاحمة لمصممي البرامج RaggiTech 4 1,567 01-10-12, 10:11 PM
آخر رد: RaggiTech
  سلسلة تقنيات تحسين واجهات البرامج - النوافذ الطبقية RaggiTech 1 562 01-10-12, 04:55 PM
آخر رد: RaggiTech
  فن كتابة البرامج و معالجة المشاكل المبرمج الطموح vb6 0 352 29-09-12, 10:36 PM
آخر رد: المبرمج الطموح vb6
  مكتبة تظم أكثر من [ 25.500 ] ملف للأيقونات والخلفيات المتلاحمة لمصممي البرامج وصفحات m.sami.ak 0 542 15-09-12, 03:00 PM
آخر رد: m.sami.ak

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


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