Foksh قام بنشر الجمعة at 17:48 قام بنشر الجمعة at 17:48 السلام عليكم ورحمة الله وبركاته .. كنت قد طرحت سؤال بخصوص إمكانية منع المستخدم في قاعدة البيانات الحالية من فتح محرر الأكواد VBA دون تحويل الملف الى أي صيغة أخرى غير الـ ACCDB . يعني قاعدة بيانات مفتوحة المصدر Accdb ولكن بمنعه من الدخول الى محرر الأكواد بدون حفظ القاعدة بصيغة ACCDE - ACCDR. كما في الصورة المرفقة كمثال للتوضيح :-
kkhalifa1960 قام بنشر الجمعة at 21:04 قام بنشر الجمعة at 21:04 مجرد فكرة جرب وافني بالرد وسأكمل معك التفاصيل . Accdb Save.rar 1
Foksh قام بنشر الجمعة at 21:24 الكاتب قام بنشر الجمعة at 21:24 32 دقائق مضت, kkhalifa1960 said: مجرد فكرة جرب وافني بالرد وسأكمل معك التفاصيل . شكراً لك على المساهمة أستاذ خليفة ولكن كفكرة في التنفيذ يمكن استخدام المفاتيح Alt + F11 للدخول إلى محرر الأكواد 😁 أضف إلى ذلك أنه في المطلوب و الصورة التوضيحية لم أتطرق إلى إلغاء مفتاح الشفت أو إخفاء أي أشرطة أو التعديل في خصائص آكسيس . أنا أتكلم عن قاعدة بيانات مفتوحة المصدر تماماً ، بدون أي خدع من تلك التي نستعملها عند قفل المشروع وتهيأته للتحويل إلى Accde . حتى أنني لم أتطرق إلى قفل محرر الأكواد بكلمة مرور 😉 .
ابوخليل قام بنشر السبت at 04:59 قام بنشر السبت at 04:59 سألت الذكاء فأعطاني عدة حلول الغريب ان ذكر الصندوق ولكن لم يقل انه اسود سؤالي : هل يمكن حماية محرر فيجوال في اكسس وهو على صيغة accdb بدون استخدام كلمة المرور المعتادة داخل المحرر ودون استخدام قفل مفتاح اشيفت .. هل من طريقة مبتكرة فريدة او جديدة قال Gemini نعم، هناك طرق "خارج الصندوق" تتجاوز الحماية التقليدية بكلمة مرور (VBA Project Password) التي يسهل كسرها حالياً، أو تعطيل مفتاح Shift الذي يمكن تجاوزه بسهولة. إليك مجموعة من الأساليب المبتكرة والاحترافية لحماية كود VBA في ملفات accdb: 1. تحويل الملف إلى صيغة ACCDE (الخيار الأقوى والأكثر شيوعاً) هذه ليست مجرد كلمة مرور، بل هي عملية "تجميع" (Compilation) للكود. كيف تعمل: يقوم اكسس بحذف الكود المصدري (Source Code) تماماً والإبقاء فقط على نسخة تنفيذية يفهمها الجهاز. النتيجة: لن يتمكن أي شخص من فتح محر VBA أو رؤية سطر واحد من الكود، حتى لو حاول ذلك. ملاحظة: احتفظ دائماً بنسخة accdb الأصلية للتعديل، لأنك لن تستطيع استرجاع الكود من ملف accde. 2. التمويه وتشتيت المنطق (Code Obfuscation) إذا كان لا بد من بقاء الملف بصيغة accdb، يمكنك استخدام استراتيجية "الغموض" بدلاً من "القفل": تغيير الأسماء: استبدل أسماء المتغيرات والدوال الواضحة بأسماء عشوائية لا معنى لها (مثلاً: بدلاً من CalculateSalary استخدم x7_v2). استدعاءات غير مباشرة: استخدم Application.Run لاستدعاء الدوال بدلاً من استدعائها مباشرة، مما يجعل تتبع مسار الكود كابوساً للمتطفل. 3. نقل الكود إلى مكتبة خارجية (DLL) باستخدام VB6 أو .NET هذه الطريقة تعتبر "مستوى المحترفين" وتجعل الوصول للكود مستحيلاً تقريباً من داخل اكسس: الفكرة: بدلاً من كتابة الكود الحساس داخل اكسس، قم بكتابته في لغة برمجة أخرى (مثل C# أو VB.NET) وقم بتصديره كملف DLL. التطبيق: داخل اكسس، تقوم فقط بعمل "استدعاء" للدالة الموجودة في الملف الخارجي. الميزة: الكود لا يوجد أصلاً داخل قاعدة البيانات ليتم فتحه أو كسره. 4. طريقة "فخ التحقق" (Conditional Execution) يمكنك وضع كود في بداية تشغيل البرنامج يتحقق من "بصمة" معينة للجهاز (مثل الرقم التسلسلي للهاردسك)، وإذا لم يتطابق، يقوم الكود بمسح نفسه أو إغلاق التطبيق فوراً. مثال: > "إذا فتح المستخدم محرر VBA وحاول التعديل، يتم تفعيل ماكرو مخفي يقوم بحذف سجلات أساسية أو تعطيل الواجهات." (هذه الطريقة دفاعية وليست وقائية). 5. استخدام Add-ins الخارجية للتشفير هناك أدوات متقدمة (مثل VBA Code Guard) تقوم بتغيير بنية الكود داخل الملف بطريقة تجعل قراءته مستحيلة بشرياً حتى لو تم فتح المحرر، حيث تظهر الرموز كطلاسم غير مفهومة. أي الطرق تفضل؟ إذا كنت تبحث عن الأمان المطلق وسهولة التنفيذ، فإن تحويل الملف إلى ACCDE هو الحل الأمثل. أما إذا كنت ترغب في حماية برمجية معقدة تسمح لك بإدارة التراخيص، فنقل الكود إلى DLL هو الطريق الصحيح. هل تود أن أشرح لك كيفية تحويل ملفك إلى ACCDE أو كيفية ربط مكتبة DLL بملف اكسس؟ 1
Foksh قام بنشر السبت at 11:47 الكاتب قام بنشر السبت at 11:47 6 ساعات مضت, ابوخليل said: هل يمكن حماية محرر فيجوال في اكسس وهو على صيغة accdb بدون استخدام كلمة المرور المعتادة داخل المحرر ودون استخدام قفل مفتاح اشيفت .. هل من طريقة مبتكرة فريدة او جديدة أهلاً معلمي أبو خليل .. هو فعلاً أصاب في جميع ما طرحه من حلول ممكنة بالنسبة له ، وحتى ChatGPT أو DeepSeek أو حتى Copilot ، ولا أعلم من غيرهم من مواقع أو أدوات للذكاء الإصطناعي ؛ كانت جميع إجاباتها تدور حول نفس الإجابة بالنفي المطلق ( جملة تحفيزية لأصحاب الفضول العميق 😈 ) . ولكن حقيقة الأمر مختلف تماماً في التطبيق . وهذا من واقع السؤال الذي طرحته عليه . وبالرغم من هذا ، فالصورة التي أرفقتها في الموضوع الأساسي تدل على أن التنفيذ تم بدون أدوات وملفات داخلية أو خارجية قد تفرض سيطرتها على آكسيس أو اللعب بإعداداته أو من الريجستري .... إلخ . حقيقة الأمر هي إجراء بسيط خفي داخل آكسيس يسمح لنا بهذه الفكرة ، والتي قد تطبيقها فعلاً كما رأيتم 🚧 . ما سبق قد يكون تخيلاً تم تنفيذه في مخيلتي ، ولكن على أرض الواقع هو تحدي كبير لقدرات آكسيس وإجباره على الخضوع المطلق لما نريد تنفيذه . فهل هذا فعلاً قابلاً للتنفيذ !!!!
Debug Ace قام بنشر السبت at 15:06 قام بنشر السبت at 15:06 3 ساعات مضت, Foksh said: فهل هذا فعلاً قابلاً للتنفيذ !!!! فكرتك بتعتمد على حدث فى التيمر ؟؟
Foksh قام بنشر السبت at 15:47 الكاتب قام بنشر السبت at 15:47 41 دقائق مضت, Debug Ace said: فكرتك بتعتمد على حدث فى التيمر ؟؟ 😅 فكرة إيه بالزبط ؟؟ مهو إحنا مش عارفين إيه هيه الفكرة علشان نحدد خطواتها 😂
Debug Ace قام بنشر السبت at 16:25 قام بنشر السبت at 16:25 (معدل) انا مش فاهم حاجة تم تعديل السبت at 16:30 بواسطه Debug Ace
Foksh قام بنشر السبت at 16:32 الكاتب قام بنشر السبت at 16:32 32 دقائق مضت, Debug Ace said: الفكرة اللى انت مصور بيها الصورة الصورة كمثاااال يا بشمهندس محمد 😁 7 دقائق مضت, Debug Ace said: انا مش فاهم حاجة مرفق ، ومش فاهم !!! لو فاهم كنت عملت إيه 😅 كنت هشوف ملفك أما أفوق وأصحصح بعد المنسف 🤯 بس يا خسارة ، حضرتك مسحته منذ ساعه, Debug Ace said: فكرتك بتعتمد على حدث فى التيمر ؟؟ وعلى فكره.. دي جوابها = لأ ، بما إنك حذفت ملفك 😜
Debug Ace قام بنشر السبت at 16:41 قام بنشر السبت at 16:41 8 دقائق مضت, Foksh said: دي جوابها = لأ ، بما إنك حذفت ملفك 😜 هعيد رقعه بأعدل حبة حجات ثوانى
ابوخليل قام بنشر السبت at 18:31 قام بنشر السبت at 18:31 57 دقائق مضت, Debug Ace said: المرفق VBAMonitor.accdb 608 kB · 0 downloads حذفت الماكرو .. فتم ابطال السحر 1 1
Foksh قام بنشر السبت at 19:09 الكاتب قام بنشر السبت at 19:09 1 ساعه مضت, Debug Ace said: المرفق هو ده اللي طلعت بيه FindWindow !!!!! 🙄
Debug Ace قام بنشر السبت at 19:34 قام بنشر السبت at 19:34 24 دقائق مضت, Foksh said: هو ده اللي طلعت بيه FindWindow !!!!! 🙄 وربنا انا مش فاهم انت عاوز ايه
Foksh قام بنشر السبت at 20:32 الكاتب قام بنشر السبت at 20:32 57 دقائق مضت, Debug Ace said: وربنا انا مش فاهم انت عاوز ايه عاوز حل احترافي ، فكرة ما خطرتش على بال لا إنس ولا جن حتى ما تعصبش أحسن تروح مشوار إنت فاكره 😉
Foksh قام بنشر الأحد at 23:40 الكاتب قام بنشر الأحد at 23:40 بما إنه والحمد لله ، ما حدش تعصب .. هاي فكرتي البسيطة .. Option Compare Database Option Explicit #If VBA7 Then Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal l00OO1lIOI1O As LongPtr, ByVal O0lllIIl1I1 As Long, ByVal II0IOII1l1 As LongPtr) As LongPtr Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal l00OO1lIOI1O As LongPtr) As Long Private lll0I01OI1I As LongPtr #Else Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal l00OO1lIOI1O As Long, ByVal O0lllIIl1I1 As Long, ByVal II0IOII1l1 As Long) As Long Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal l00OO1lIOI1O As Long) As Long Private lll0I01OI1I As Long #End If Public Sub Ill10l0IIll0() If lll0I01OI1I <> 0 Then IOII11IIOIO10 lll0I01OI1I = SetTimer(0, 1, 0, AddressOf IOOl1IlOOOll) If lll0I01OI1I <> 0 Then End If End Sub Public Sub IOII11IIOIO10() If lll0I01OI1I <> 0 Then KillTimer 0, lll0I01OI1I lll0I01OI1I = 0 End If End Sub #If VBA7 Then Public Sub IOOl1IlOOOll(ByVal hwnd As LongPtr, ByVal IIO11OlII11 As Long, ByVal I0l110IlOI01I As LongPtr, ByVal OO1IOI100OO As Long) #Else Public Sub IOOl1IlOOOll(ByVal hwnd As Long, ByVal IIO11OlII11 As Long, ByVal I0l110IlOI01I As Long, ByVal OO1IOI100OO As Long) #End If On Error Resume Next Dim lIII0O0O11Il As Object Set lIII0O0O11Il = CallByName(Application, ChrW(86) & ChrW(66) & ChrW(69), VbGet) Dim IlIO10OI1 As Object Set IlIO10OI1 = CallByName(lIII0O0O11Il, ChrW(77) & ChrW(97) & ChrW(105) & ChrW(110) & ChrW(87) & ChrW(105) & ChrW(110) & ChrW(100) & ChrW(111) & ChrW(119), VbGet) If CallByName(IlIO10OI1, ChrW(86) & ChrW(105) & ChrW(115) & ChrW(105) & ChrW(98) & ChrW(108) & ChrW(101), VbGet) = True Then CallByName IlIO10OI1, ChrW(86) & ChrW(105) & ChrW(115) & ChrW(105) & ChrW(98) & ChrW(108) & ChrW(101), VbLet, False End If Set lIII0O0O11Il = CallByName(Application, ChrW(86) & ChrW(66) & ChrW(69), VbGet) Set IlIO10OI1 = CallByName(lIII0O0O11Il, ChrW(77) & ChrW(97) & ChrW(105) & ChrW(110) & ChrW(87) & ChrW(105) & ChrW(110) & ChrW(100) & ChrW(111) & ChrW(119), VbGet) If CallByName(IlIO10OI1, ChrW(86) & ChrW(105) & ChrW(115) & ChrW(105) & ChrW(98) & ChrW(108) & ChrW(101), VbGet) = True Then CallByName IlIO10OI1, ChrW(86) & ChrW(105) & ChrW(115) & ChrW(105) & ChrW(98) & ChrW(108) & ChrW(101), VbLet, False End If End Sub والإستدعاء يكون في زري التشغيل والايقاف :- Private Sub Btn_Stop_Click() IOII11IIOIO10 End Sub Private Sub Btn_Start_Click() Ill10l0IIll0 End Sub الملف للتجربة :- VBA Kill Obfuscate Code.accdb 2 1
kanory قام بنشر منذ 1 ساعه قام بنشر منذ 1 ساعه في 16/3/2026 at 02:40, Foksh said: بما إنه والحمد لله ، ما حدش تعصب .. هاي فكرتي البسيطة .. بارك الله فيك فكرة جيدة .... عند الضغط والاصلاح يفقد الحماية ..... هل جربت الضغط على مفتاح Alt+F11
الردود الموصى بها
انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد
يجب ان تكون عضوا لدينا لتتمكن من التعليق
انشئ حساب جديد
سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .
سجل حساب جديدتسجيل دخول
هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.
سجل دخولك الان