Eng.Qassim قام بنشر يناير 27, 2022 قام بنشر يناير 27, 2022 20 دقائق مضت, ابو جودي said: 526752675253525245484852554552684948455648535445675167485270535453485149 ماشاء الله .. اشتغل ياريت تشرح لنا الموضوع استاذ @ابو جودي في السابق لم اهتم لتلك الامور .. لكن الملف جميل واتمنى معرفة ما يحصل 1
ابو جودي قام بنشر يناير 27, 2022 الكاتب قام بنشر يناير 27, 2022 من عيونى يا باش مهندس شرح الاكواد بالوحدة النمطية تفصيلا اولا اسم الجدول ولانه سوف يتم استخدامه كثيرا ولاننى احببت تصعيب الامر قليلا استخدمت الـ Unicode Public Function tblUUID() tblUUID = Chrw("85") & Chrw("115") & Chrw("121") & Chrw("115") & Chrw("83") & Chrw("101") & Chrw("99") & Chrw("117") & Chrw("114") & Chrw("101") & Chrw("100") End Function فلو قمنا بقرائته فى نافذة immediate من خلال ?tblUUID() لتنتج لنا اسم الجدول UsysSecured كما فى الصورة الاتية 2- التأكد من وجود الجدول فى قاعدة البيانات من عدمه Public Function ifTableExists(tblName As String) As Boolean If DCount("[Name]", "MSysObjects", "[Name] = '" & tblName & "'") = 1 Then ifTableExists = True End Function 3- السطر الاول انشاء الجدول من خلال استعلام السطر الثانى تشغيل الـ Function الاتى ChckUUID ,وسيتم شرحه لاحقا Public Function CrtTblUUID() DoCmd.RunSQL "CREATE TABLE " & tblUUID & "([ID] counter," & "[UUIDPC] text," & "[ApprovedNo] text," & "CONSTRAINT [Index1] PRIMARY KEY ([ID]));" ChckUUID End Function 4- التأكد من وجود قيم فى الجدول Public Function CountRec() As Boolean If DCount("*", tblUUID) = 1 Then CountRec = True End Function 5-التأكد من صلاحية مقتاح التسجيل الذى ارسلته لكم عند التجربة من خلال استخدام عدد 2 Function - ToGetAprv - GetUUID() وسيأتى شرحهم تباعا Public Function ChkApprovedNo() As Boolean If DLookup("ApprovedNo", tblUUID) = ToGetAprv(GetUUID()) Then ChkApprovedNo = True End Function ملاحظة عند الشرح الان وحدتنى قمت بعمل function باسم اخر لنفس الوظيفة وسوف اقوم بحذفه اسم ال function هو Public Function validat() As Boolean اعتذر على ذلك الخطأ 6- هذا ال Function للخثول على معرف فريد للجهاز يدعى UUID وببساطه هو هو اختصار للمعرف الفريد العالمي ، وهو معرف فريد يتم إنشاؤه آليًا ضمن نطاق معين يتم إنشاؤها بواسطة خوارزمية معينة تحدد المواصفات والعناصر بما في ذلك عنوان MAC لبطاقة الشبكة والطابع الزمني ومساحة الاسم (Namespace) والرقم العشوائي أو العشوائي الزائف والتوقيت والعناصر الأخرى وخوارزمية إنشاء UUID من هذه العناصر تعني الخصائص المعقدة لـ UUID أنه لا يمكن إنشاؤها إلا عن طريق الكمبيوتر مع ضمان تفردها Public Function GetUUID() Dim strComputer As String Dim objWMIService, colItems, objItem strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystemProduct", , 48) For Each objItem In colItems GetUUID = objItem.UUID Next End Function 7- اغلاق جميع النماذج المفتوحة ما عدا نموذج FrmNotReg ولعدم تسهيل الامر على العابثين تم استخدام الـ unicode فى كتابة اسم النموذج اقتباس Chrw("70") & Chrw("114") & Chrw("109") & Chrw("78") & Chrw("111") & Chrw("116") & Chrw("82") & Chrw("101") & Chrw("103") Public Function DoCloseForms() Dim F As Access.Form Dim i As Long For i = Forms.Count - 1 To 0 Step -1 Set F = Forms(i) If F.Name <> _ Chrw("70") & Chrw("114") & Chrw("109") & Chrw("78") & Chrw("111") & Chrw("116") & Chrw("82") & Chrw("101") & Chrw("103") _ Then DoCmd.Close acForm, F.Name End If Next i End Function فى النقطة رقم 5 فى الشرح قلت سوف يأتى لاحقا شرح الـ 2 function الاتى ذكر اسمائهم - ToGetAprv - GetUUID() GetUUID -- تم شرحة فى النقطة رقم 6 الـ ToGetAprv هو function يتم تمرير قيمة GetUUID() الجهاز الحالى اليه ليقوم بتحويله الى unicode يعنى من ظهر لهم هذا الرقم الخاص بالنسخة فى نموذج التسجيل 46364331-3536-4638-3344-4232FFFFFFFF طبعا كما سبق هذا هو معرف الـ UUID وبعد ان يتم تمريره الى الـ function ToGetAprv ليتم تحويله الى unicode المفروض انه يظهر على الشطل التالى اقتباس Chrw("52") & Chrw("54") & Chrw("51") & Chrw("54") & Chrw("52") & Chrw("51") & Chrw("51") & Chrw("49") & Chrw("45") & Chrw("51") & Chrw("53") & Chrw("51") & Chrw("54") & Chrw("45") & Chrw("52") & Chrw("54") & Chrw("51") & Chrw("56") & Chrw("45") & Chrw("51") & Chrw("51") & Chrw("52") & Chrw("52") & Chrw("45") & Chrw("52") & Chrw("50") & Chrw("51") & Chrw("50") & Chrw("70") & Chrw("70") & Chrw("70") & Chrw("70") & Chrw("70") & Chrw("70") & Chrw("70") & Chrw("70") ولكن قمت ببعض التعديلات على الكود الذى يقوم بالتجويل الى الـ unicode بحيث يتم الابقاء على الارقام فقط من دون Chw("") & ولذلك كانت النتيجة كالاتى 525451545251514945515351544552545156455151525245525051507070707070707070 ولذلك فان ال Public Function ChkApprovedNo() As Boolean If DLookup("ApprovedNo", tblUUID) = ToGetAprv(GetUUID()) Then ChkApprovedNo = True End Function يقوم بالوصول الى الرقم ذلك وان كان يساوى الرقم الذى يتم عمل لصق له فى نموذج التسجيل يتم فتح النموذج الرئيسي 8- الكود الاخير لاخر روتين فى الموديول يقوم بعمل كل ماسبق يتأكد من وجود الجدول لو مش موجود ينشئ الجدول ولو الجدول موجود يتأكد من عدد السجلات لو 0 سجل يتم انشاء سجل ويضع به رقم UUID فى الحقل الخاص به ولو السجلات تساوى 1 يقوم بالتأكد من قيمة رقم UUID ان كان المكتوب فى الجدول = الخاص بهذا الجاز يكمل باقى الخطوات والا يوقم بعمل تحديث له للرقم فى الحقل داخل الجدول بما يساوى رقم رقم UUID للجهاز وبعد ذلك يتم تحويل الـ رقم UUID الى unicode مع االبقاء على الرقام فقط ويتأكد من تلك القيمة فى الحقل الخاص بها للتأكد فان كانت يتم فتح النموذج الرئيسي والا يعود الى نموذج التسجيل ولذلك هذا هو المستخدم فى الحدث عند الفتح ويمكن وضعه بنموذج البدء بسهولة من خلال اسمه ChckUUID , او Call ChckUUID بس خلاص Public Function ChckUUID() If ifTableExists(tblUUID) Then Else: CrtTblUUID If DLookup("UUIDPC", tblUUID) <> GetUUID Then DoCmd.SetWarnings False: DoCmd.RunSQL "UPDATE UsysSecured SET UsysSecured.UUIDPC = GetUUID();": DoCmd.SetWarnings True DoEvents If CountRec() Then If DLookup("UUIDPC", tblUUID) = GetUUID Then If ChkApprovedNo Then _ DoCmd.Close acForm, _ Chrw("70") & Chrw("114") & Chrw("109") & Chrw("78") & Chrw("111") & Chrw("116") & Chrw("82") & Chrw("101") & Chrw("103") _ : DoCmd.OpenForm Chrw("70") & Chrw("114") & Chrw("109") & Chrw("77") & Chrw("97") & Chrw("105") & Chrw("110"), , , , , acDialog _ Else: DoCloseForms: DoCmd.OpenForm Chrw( _ "70") & Chrw("114") & Chrw("109") & Chrw("78") & Chrw("111") & Chrw("116") & Chrw("82") & Chrw("101") & Chrw("103"), , , , , acDialog Exit Function End If Else DoCmd.SetWarnings False: DoCmd.RunSQL "INSERT INTO UsysSecured ( UUIDPC ) SELECT GetUUID() AS UUID;": DoCmd.SetWarnings True End If End Function بس ممكن بدل الذهاب الى نموذج التسجيل اغلاق القاعدة نهائيا لمن يريد وطبعا للوصول للحماية القصوى وضع كلمة مرور على محرر الاكواد وكلمة سر لتشفير قاعدة البيانات عند الفتح واغلاق الشيفت واخفاء الاطار وعمل قاعدة ريموت لتمرر كلمة المرور الى القاعدة الحالية عند فتحها وطبعا تلك القاعدة سوف يتم تحويلها الى accde وهذا ما سوف اطرحه لاحقا بس الان انا متعب ملاحظة تم تعديل المرفق الرئيسي بالتعديل الأخير الذى تم تدارك الاخطاء به وسوف يتم حذف كل المرفقات بالموضوع تخفيفا على سيرفر المنتدى اجمل الامانى بكده ينتهى موضوع العبث ويتم تأمين القاعدة بأقصى درجات الأمان لمن يريد 3 2
أبوبسمله قام بنشر يناير 27, 2022 قام بنشر يناير 27, 2022 جزاك الله خيرا اخى واستاذى @ابو جودي على هذا الشرح الرائع 💐 والف سلامه عليك 🌹 تقبل تحياتى ومرورى 1
abouelhassan قام بنشر يناير 28, 2022 قام بنشر يناير 28, 2022 (معدل) شكر وتقدير واحترام من اخيك استاذنا بس كود التفعيل كيفية الحصول عليه اخى الكريم 3BF7A917-3768-E711-B753-1860241EAB59 وكيفية تغيره اشكرك تم تعديل يناير 28, 2022 بواسطه abouelhassan
Featured Comment ابو جودي قام بنشر يونيو 13, 2022 الكاتب Featured Comment قام بنشر يونيو 13, 2022 المرفقات النهائية وسبق الشرح تفصيلا واجمالا لكل جزئية بالكود Anti Copy 3.accdbKey.accdb 1 2
الحلبي قام بنشر يونيو 13, 2022 قام بنشر يونيو 13, 2022 استاذنا ومعلمنا وبشمهندسنا / @ابو جودي ايوه كده ياسلام عليك يااخى هو ده الكلام الان ارفقت مفتاح التفعيل الله ينور عليك الشرح السابق مفيد جدا وواضح جدا والاستاذ / @احمد الفلاحجيقام بتوصيل كل هذه المعلومات لنا ربنا يبارك فيه ويرزقه ولكن لى سؤال صغير استاذ / محمد عصام لو احد العابثين دخل وكتب اى رقم فى خانة التفعيل تظهر له رسالة باللغة الانجليزية تقول : "انت مخئ الرقم خطأ حاول الاتصال بمبرمج البرنامج " من اين اضع هذه الرسالة باللغة العربية وفى اى سطر من الكود اقوم بتغيرها ـ يعنى كيف اغير الرسالة باللغة العربية وفى اى سطر من الاكواد جزاك الله كل خير واعطال الصحة والعافية وبارك فى علمك ورزقك من غير حساب ـ اللهم امين 1
ابو جودي قام بنشر يونيو 13, 2022 الكاتب قام بنشر يونيو 13, 2022 2 ساعات مضت, الحلبي said: الان ارفقت مفتاح التفعيل كنت متخيل ان سهل تطبيقة معلش الموضوع كان دسم شوية والشرح كان كتير حبتين انا اسف على الاطالة وعدم وعدم وضع المفتاح من قبل 2 ساعات مضت, الحلبي said: من اين اضع هذه الرسالة باللغة العربية وفى اى سطر من الكود اقوم بتغيرها على زر الامر Paste فى نموذج FrmNotReg غير ما يلزمك بدلا من هذا يا دكتور MsgBox _ Chrw("89") & Chrw("111") & Chrw("117") & Chrw("32") & Chrw("104") & Chrw("97") & Chrw("118") & Chrw("101") & Chrw("32") & Chrw("117") & _ Chrw("115") & Chrw("101") & Chrw("100") & Chrw("32") & Chrw("116") & Chrw("104") & Chrw("101") & Chrw("32") & Chrw("119") & Chrw("114") & _ Chrw("111") & Chrw("110") & Chrw("103") & Chrw("32") & Chrw("108") & Chrw("105") & Chrw("99") & Chrw("101") & Chrw("110") & Chrw("115") & _ Chrw("101") & Chrw("32") & Chrw("110") & Chrw("117") & Chrw("109") & Chrw("98") & Chrw("101") & Chrw("114") & Chrw("46") & Chrw("13") & _ Chrw("10") & Chrw("80") & Chrw("108") & Chrw("101") & Chrw("97") & Chrw("115") & Chrw("101") & Chrw("32") & Chrw("99") & Chrw("111") & _ Chrw("110") & Chrw("116") & Chrw("97") & Chrw("99") & Chrw("116") & Chrw("32") & Chrw("116") & Chrw("104") & Chrw("101") & Chrw("32") & _ Chrw("100") & Chrw("101") & Chrw("115") & Chrw("105") & Chrw("103") & Chrw("110") & Chrw("101") & Chrw("114") & Chrw("32") & Chrw("111") & _ Chrw("102") & Chrw("32") & Chrw("116") & Chrw("104") & Chrw("101") & Chrw("32") & Chrw("97") & Chrw("112") & Chrw("112") & Chrw("108") & _ Chrw("105") & Chrw("99") & Chrw("97") & Chrw("116") & Chrw("105") & Chrw("111") & Chrw("110") & Chrw("46")
الحلبي قام بنشر يونيو 13, 2022 قام بنشر يونيو 13, 2022 معلمى واستاذى / @ابو جودي الله الله عليك مبدع وعبقرى ماشاء الله عليك ربنا يبارك فيك وفى اسرتك ووالديك تم عمل اللازم وكله تمام اظن من حقى دلوقت اقول لك شوية بخور تتضمن بهم السلامة ولا انسى ان اشكر الاستاذ / احمد الفلاحجى
ابو البشر قام بنشر يونيو 13, 2022 قام بنشر يونيو 13, 2022 تشكر أخي @ابو جودي ولكن لي سؤال :::: ماذا لو قام العميل بشراء اكثر من برنامج من قبل المبرمج .... الأ تعتقد في هذه الحالة تشابه المفتاح في كل البرامج ..... اذن ::: نحتاج الى رقم اضافة رقم لكل برنامج بالاضافة الى ما تم ذكره حتى نضمن عدم تشابه هذه المفاتيح على جهاز واحد ؟؟؟؟؟ مجرد رأي ... 1 1
ابوبسمله قام بنشر يونيو 13, 2022 قام بنشر يونيو 13, 2022 جزاك الله خيرا اخى العزيز محمد عصام @ابو جودي لم اقم بشىء يذكر د محمد @الحلبي جزاه الله خيرا ابوجودى ع طرحه الرائع 1 ساعه مضت, ابو البشر said: ولكن لي سؤال :::: ماذا لو قام العميل بشراء اكثر من برنامج من قبل المبرمج .... الأ تعتقد في هذه الحالة تشابه المفتاح في كل البرامج ..... اذن ::: نحتاج الى رقم اضافة رقم لكل برنامج بالاضافة الى ما تم ذكره حتى نضمن عدم تشابه هذه المفاتيح على جهاز واحد ؟؟؟؟؟ مجرد رأي ... اممممم راى فى محله اخى العزيز ابو البشر فهذه الحاله سنحتاج لشى اخر لتمييز كل مفتاح لكل برنامج ع حده بالتوفيق اخوانى 1
Amr Ashraf قام بنشر يونيو 13, 2022 قام بنشر يونيو 13, 2022 موضوع جميل . طيب بما انى اول مرة اقرأ الموضوع لما وضحت ان الرقم المعرف ده بيتكون من مجموعة من العناصر الفريدة ومن ضمنها Mac Address على حسب فهمى . . طيب ماذا اذا قام المستخدم بتغيير الماك ادرس الخاص بالجهاز ؟ واردة تحصل فى حالة حظر الماك ادرس ومنعك من الدخول الى شبكة ما .. فى الحالة دى هل عملية التحقق اللى بتتم عند فتح النموذج هتلاحظ الفرق فى الجزء الخاص بالماك ادرس وتفتح نموذج التفعيل ؟ ولا انا فاهم غلط ؟ طيب ماذا بخصوص تنزيل نسخة جديدة للجهاز هل هتفرق فى حاجة ؟ .. اعذرنى انا قرأت كتير فى المواضيع دى ولكن لم اصادف هذا الرقم من قبل . مجهود تشكر عليه @ابو جودي 1
الردود الموصى بها
قام بكتابته ابو جودي,
المرفقات النهائية وسبق الشرح تفصيلا واجمالا لكل جزئية بالكود
أوصى به ابو جودي
3 reactions
Go to this post
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.