اذهب الي المحتوي
أوفيسنا

حماية قاعدة البيانات واستحاله فتحها ( تحدي الهندسة العكسية )


SEMO.Pa3x

الردود الموصى بها

السلام عليكم, في سنة 2017 قمت بكتابة كلاس بسيط لحماية برنامجي ولضمان برنامجي لا يعمل في غير كومبيوترات في حاله بيعه.

 

مميزات الكلاس:

1- قفل قاعدة البيانات على ( رقم الهارد , البروسيسور , المذربورد , الماك أدريس )

2- (استحاله) فك النماذج والتقارير في حال عدم تجاوزك لنموذج ( تسجيل الدخول )

ببساطة ستقول يمكنني العثور على باسورد القاعدة داخل الجدول :yes: ( الطريقة المعتادة لدينا جميعا في انشاء نموذج تسجيل دخول ).

 

قبل كل شي ليكن لدينا مثلا جدول اسمة ( tbl_Login ) و نموذج اسمه ( frm_Login )

الجدول لتخزين اسم المستخدم وكلمة المرور والنموذج لعمل تسجيل الدخول


عند ذهابنا للجدول ( tbl_Login ) ، سوف نحصل على باسورد مشفر من الجدول لو كان الباسورد مثلا ( 313 ) فإنك ستحصل على ( 701D6068 )

 

2- عندما نقوم بتسجيل الدخول في النموذج سيقوم البرنامج بأخذ كلمة السر المدخلة ويقوم بتشفيرها ثم يقوم بمطابقتها مع الباسورد الموجود في الجدول

اذا كان الباسورد المُدخل يطابق الجدول سيكتب قيمة معينة runtime ويقوم بازالة جميع القيود من النماذج والتقارير.

 

اولا: كلاس الحماية

 

Option Compare Database

'-----------------------------------------------------
' Protection Module Coded By Hassanein Hirz Aldeen (SEMO.Pa3x)
' Date 26/11/2017
' All rights reserved. copyright © 2017
'-----------------------------------------------------


Public SEMO As String
Function SEMO_GET()
SEMO = SEMO
SEMO_GET = SEMO
End Function

Function PR() As Boolean
PR = False 'False=Disabled , True=Enabled
End Function

Function HWND_ID()
HWND_ID = "3C3F4825" 'Your HWID
End Function

Function HWND_MSG()
HWND_MSG = "...ليست لديك صلاحيات كافية لإستخدام هذا الاجراء"
End Function

Function KEY_ENDE()
KEY_ENDE = "PA$X"
End Function

Function HWND_GET()
Set root = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
Set disks = root.execquery("select * from win32_logicaldisk")
For Each disk In disks
    If disk.volumeserialnumber <> "" Then
        HWND_GET = disk.volumeserialnumber
        Exit For
    End If
Next
End Function


Function HWND_PROTECTION()
Set root = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
Set disks = root.execquery("select * from win32_logicaldisk")
For Each disk In disks
    If disk.volumeserialnumber <> "" Then
        HWND_PROTECTION = disk.volumeserialnumber
        Exit For
    End If
Next
If HWND_ID = HWND_PROTECTION Then
HWND_PROTECTION = "True"
Else
HWND_PROTECTION = "False"
End If
End Function

'Code contained within module named mdlforencryptionanddecryption
Public Function XORDecryption(CodeKey As String, DataIn As String) As String
Dim arkdata1 As Long
Dim strDataOut As String
Dim intXOrValue1 As Integer
Dim intXOrValue2 As Integer
For arkdata1 = 1 To (Len(DataIn) / 2)
'The first value to be XOr-ed comes from the data to be encrypted
intXOrValue1 = Val("&H" & (Mid(DataIn, (2 * arkdata1) - 1, 2)))
'The second value comes from the code key
intXOrValue2 = Asc(Mid(CodeKey, ((arkdata1 Mod Len(CodeKey)) + 1), 1))
strDataOut = strDataOut + Chr(intXOrValue1 Xor intXOrValue2)
Next arkdata1
XORDecryption = strDataOut
End Function

Public Function XOREncryption(CodeKey As String, DataIn As String) As String
Dim arkdata1 As Long
Dim strDataOut As String
Dim temp As Integer
Dim tempstring As String
Dim intXOrValue1 As Integer
Dim intXOrValue2 As Integer
For arkdata1 = 1 To Len(DataIn)
'The first value to be XOr-ed comes from the data to be encrypted
intXOrValue1 = Asc(Mid$(DataIn, arkdata1, 1))
'The second value comes from the code key
intXOrValue2 = Asc(Mid$(CodeKey, ((arkdata1 Mod Len(CodeKey)) + 1), 1))
temp = (intXOrValue1 Xor intXOrValue2)
tempstring = Hex(temp)
If Len(tempstring) = 1 Then tempstring = "0" & tempstring
strDataOut = strDataOut + tempstring
Next arkdata1
XOREncryption = strDataOut
End Function

 

الاستخدام لكل النماذج والتقارير اكتب في حدث Form_Load

 

Option Compare Database

Private Sub Form_Load()
On Error Resume Next
If HWND_PROTECTION = "False" Then
MsgBox HWND_MSG, vbCritical, "عملية خاطئة"
For i = 0 To Controls.Count - 1
  Dim X As Control
  Set X = Me.Controls.Item(i)
   X.Visible = False
Next
DoCmd.Close
DoCmd.CloseDatabase
DoCmd.Quit
End If
If Protection.SEMO_GET = "SEMO" = False Then
MsgBox HWND_MSG, vbCritical, "عملية خاطئة"
For i = 0 To Controls.Count - 1
  Dim XS As Control
  Set XS = Me.Controls.Item(i)
   XS.Visible = False
Next
DoCmd.Close
DoCmd.CloseDatabase
DoCmd.Quit
End If
End Sub

 

الان عندما تريد اعطاء القاعدة لشخص ما قم باعطاءه اولا ملف الـ VBS هذا

 

'-----------------------------------------------------
' ReCoded By Hassanein Hirz Aldeen (SEMO.Pa3x)
' Date 26/11/2017
' All rights reserved. copyright © 2017
'-----------------------------------------------------

' Get clipboard text
Set objHTML = CreateObject("htmlfile")
Set Ws = CreateObject("WScript.Shell")
Clipboardtext = objHTML.ParentWindow.ClipboardData.GetData("text")
sText = HWND_GET
'Set Clipboard
Ws.Run "mshta.exe ""javascript:clipboardData.setData('text','" & Replace(Replace(sText, "\", "\\"), "'", "\'") & "');close();""", 0, True

MsgBox "Copied!"

Function HWND_GET()
Set root = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
Set disks = root.execquery("select * from win32_logicaldisk")
For Each disk In disks
    If disk.volumeserialnumber <> "" Then
        HWND_GET = disk.volumeserialnumber
        Exit For
    End If
Next
End Function

 

وظيفة هذا الملف يقوم باستخراج ( رقم الهارد , البروسيسور , المذربورد , الماك أدريس ) ثم ينسخه

بعدما يشغله سيقوم العميل باعطاءك هذا الرقم لكي تقوم انت بدورك بوضعه داخل الكلاس في المنطقة

 

Function HWND_ID()
HWND_ID = "Your HWID"
End Function

استبدل كلمة ( Your HWID ) بالرقم الذي سيعطيه لك العميل.

ثم بعد ذلك قم بحفظ القاعدة بصيغة ( ACCDE ) واتحدا اي شخص يفتحها

 

مرة اخرى: لكي تفتح النماذج والتقارير عليك بتخطي نموذج تسجيل الدخول

 

ارفقت لكم قاعدة محمية وقاعدة بدون حماية مع ملف الـ VBS الذي يستخرج ارقام قطع الجهاز ويقوم بنسخها،، اتمنى لكم الفائدة جميعاً

اهداء الموضوع الى مُعلمي الرائع @jjafferr

 

حسنين

 

Login_SEMO_Pa3x.rar

تم تعديل بواسطه SEMO.Pa3x
  • Like 10
  • Thanks 6
رابط هذا التعليق
شارك

السلام عليكم

عمل رائع جدا

اولا  من الافضل  عمل زر لتسجيل الدخول 

ثانيا لكن عند استبدال كلمة المرور واسم المستخدم وتشغيل البرنامج مرة اخرى تظهر رسالة  كلمة المرور خاطئة 

كيف احصل على كلمة المرور الصحيحة  وبدون تشفير 

تم تعديل بواسطه خالد سيسكو
رابط هذا التعليق
شارك

شكراً لك عمل رائع و جهد كبير 

بالرغم من أن موضوعات الحماية تبدو بالنسبة لي معقدة و خارج نطاق اهتمامي كوني لا أبيع البرامج أو أصممها لعملاء بل مجرد هاوٍ يقوم بإعداد بعض الملفات البسيطة لخدمة الزملاء أو للاستخدام في بيئة عمل مغلقة كما هو المتعارف عليه في مجموعة أوفيس.

لكن  يلفت اهتمامي حجم الجهد المبذول في مجال الحماية و الذي برأيي المتواضع لو جنِّد لعمل برامج  بلغات برمجة لكن أجدى و أقوى ، و مقدار التفكير العميق الذي أصبح الأكسس يتجاوز حدوده و يتفوق على ذاته به و الذي سيحمل معه نتائج عظيمة لو أعمل في غير الأوفيس .

و أسأل و أتمنى أن أحصل على إجابة من مطلع و متابع  ، لماذا لا تقوم مايكروسوفت  بتهيئة برامجها و تزويدها بإمكانيات الحماية المماثلة بصورة افتراضية؟لماذا تصر على ترك الباب موارباً لهذه المبادرات ؟

رابط هذا التعليق
شارك

1 ساعه مضت, خالد سيسكو said:

السلام عليكم

عمل رائع جدا

اولا  من الافضل  عمل زر لتسجيل الدخول 

ثانيا لكن عند استبدال كلمة المرور واسم المستخدم وتشغيل البرنامج مرة اخرى تظهر رسالة  كلمة المرور خاطئة 

كيف احصل على كلمة المرور الصحيحة  وبدون تشفير 

اهلا عزيزي, قاعدة البيانات المرفقة كانت للتوضيح لا اكثر.

يمكنك عمل زر او اي شي تريده.

بكل بساطة يمكن عمل يوزر في الجدول اسمه مثلا الدعم الفني

وسادع برنامجي كل ما قمت بتشغيله يتحقق من هذا اليوزر فان لم يجده ينشأه مرة اخرى

او قمت بتعديل كلمة المرور الخاصة به سوف يقوم بارجاع الاصلية.

 

يمكنك الحصول عليها بتمرير كلمة السر الموجودة في الجدول على الفنكشن الذي يسمى XorDecrypt وسيقوم هو بدوره بأرجاع الباسورد مفكوك التشفير

يمكنك عرضه بأي طريقة تحب مثلا MessageBox او في TextBox.

 

حسنين

42 دقائق مضت, Khalf said:

شكراً لك عمل رائع و جهد كبير 

بالرغم من أن موضوعات الحماية تبدو بالنسبة لي معقدة و خارج نطاق اهتمامي كوني لا أبيع البرامج أو أصممها لعملاء بل مجرد هاوٍ يقوم بإعداد بعض الملفات البسيطة لخدمة الزملاء أو للاستخدام في بيئة عمل مغلقة كما هو المتعارف عليه في مجموعة أوفيس.

لكن  يلفت اهتمامي حجم الجهد المبذول في مجال الحماية و الذي برأيي المتواضع لو جنِّد لعمل برامج  بلغات برمجة لكن أجدى و أقوى ، و مقدار التفكير العميق الذي أصبح الأكسس يتجاوز حدوده و يتفوق على ذاته به و الذي سيحمل معه نتائج عظيمة لو أعمل في غير الأوفيس .

و أسأل و أتمنى أن أحصل على إجابة من مطلع و متابع  ، لماذا لا تقوم مايكروسوفت  بتهيئة برامجها و تزويدها بإمكانيات الحماية المماثلة بصورة افتراضية؟لماذا تصر على ترك الباب موارباً لهذه المبادرات ؟

لا شيء يخلوا من الحماية وان لم تستخدمها اليوم ستستخدمها غدا.

ليس من مصلحة مايكروسوفت او اي شركة اخرى ان تصمم حماية لا يمكن التغلب عليها والا ستخسر الشركة ولن تبيع شيئاً

 

اعطيك مثال بسيط:

بأستطاعة شركات الحماية مثلا Avast وغيرها التي تقوم بأنتاج الاف النسخ من مضادات الفايروسات ( انتي فايروس )

بأستطاعتها ان تنهي من الوجود شيئا يسمى فيروس او تروجان او دودة... الخ

 

لكن ما الثمن لذلك؟؟ لن تبيع ولا منتجاً واحداً وستخسر الشركة لذلك من مصلحتها ان تسمح للفايروسات

والهاكرز بالاختراقات وغيرها لكي تبقى هذه الشركة في الساحة لتبيع منتجاتها

 

حسنين

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

مرحبا استاذ حسنين @SEMO.Pa3x

فعلا انت مكسب لنا جميعا

اعتقد ان الموضوع احترافي على غيره من مواضيع الحماية في المنتدى

ولكن عندي مداخلة هنا : لو دخلت على حقل الباسسوورد في جدول الدخول ثم مسحت الباسوورد القديمة ووضعت رقم جديد وليكن 321 واستخدمته في شاشة الدخول هل سيقبل لان الباسوورد اصبحت متطايقة ؟

تقبل اجمل تحية

  • Like 1
رابط هذا التعليق
شارك

4 دقائق مضت, رمهان said:

مرحبا استاذ حسنين @SEMO.Pa3x

فعلا انت مكسب لنا جميعا

اعتقد ان الموضوع احترافي على غيره من مواضيع الحماية في المنتدى

ولكن عندي مداخلة هنا : لو دخلت على حقل الباسسوورد في جدول الدخول ثم مسحت الباسوورد القديمة ووضعت رقم جديد وليكن 321 واستخدمته في شاشة الدخول هل سيقبل لان الباسوورد اصبحت متطايقة ؟

تقبل اجمل تحية

 

اهلا استاذ @رمهان

شكرا لكلامك الجميل.

اقتباس

ولكن عندي مداخلة هنا : لو دخلت على حقل الباسسوورد في جدول الدخول ثم مسحت الباسوورد القديمة ووضعت رقم جديد وليكن 321 واستخدمته في شاشة الدخول هل سيقبل لان الباسوورد اصبحت متطايقة ؟

 

لا يقبل ذلك وستظهر لك رسالة الخطأ، جرب بنفسك لكي ترى النتيجة.

لحد الان لم ندخل في الحماية الثانية وهي ( الحماية على قطع الجهاز ) (رقم الهارد, رقم المذربورد , رقم البروسيسور , رقم الماك أدريس )

تحياتي لك

 

حسنين

  • Thanks 1
رابط هذا التعليق
شارك

23 ساعات مضت, jjafferr said:

حياك الله اخوي حسنين ، واهلا وسهلا بك 🙂

وشكرا الموضوع المميز 🙂

 

جعفر

 

الله يجييك مُعلمي الغالي، نورت موضوعي المتواضع.

23 ساعات مضت, kaser906 said:

طريقة جديدة  تضم الى المكتبه

شكرا لك

 

شكرا لك.

رابط هذا التعليق
شارك

في ٩‏/٤‏/٢٠١٩ at 21:15, SEMO.Pa3x said:

يمكنك الحصول عليها بتمرير كلمة السر الموجودة في الجدول على الفنكشن الذي يسمى XorDecrypt وسيقوم هو بدوره بأرجاع الباسورد مفكوك التشفير

يمكنك عرضه بأي طريقة تحب مثلا MessageBox او في TextBox.

حسنين

فضلا وكرما ممكن مرفق بالطريقة 

  • Like 1
رابط هذا التعليق
شارك

7 ساعات مضت, ابا جودى said:

passAgain: XOREncryption(KEY_ENDE(),[Password])

وهل هذا للتشفير مرة اخرى :blink:

 

passAgain: XOREncryption(KEY_ENDE(),"النص او الرقم الذي تريد تشفيره")

 

 

من المعروف ان كل خوارزمية تشفير مثلا XOR , AES, RSA ... ألخ تحتاج الى شيئين ( مفتاح ) وهو للتشفير وفك التشفير و يحتاج النص او الرقم الذي تريد تشفيره،، حيث ان

 

KEY_ENDE()

 

يمثل مفتاح التشفير والفك.

الذي قمت انا بتعريفه كـ فنكشن في الكلاس والذي يحمل القيمة PA$X

 

Function KEY_ENDE()
KEY_ENDE = "PA$X"
End Function

 

 

حسنين

تم تعديل بواسطه SEMO.Pa3x
  • Thanks 1
رابط هذا التعليق
شارك

  • 1 month later...

أخي @SEMO.Pa3x بارك الله فيك

هل بالإمكان عمل وحدة نمطية مماثلة بنفس طريقة حماية ملف الواجهة في هذا الموضوع لحماية فتح القاعدة الخلفية قاعدة الجداول في القواعد المرتبطة

وإن كان ذلك ممكنا هل تتكرم بتنفيذ مثالاً لذلك لترحم أمثالنا من المبتدئين والبسطاء في علمهم وتطبيقهم من التشتت والبحث بدون فائدة كبيرة عن افضل طرق الحماية لأول أعمالهم حيث أنني بالفعل قد أصبحت في متاهه كبيرة نتيجة كثرة ما قرأته أثناء البحث بين تأكيد كبار المبرمجين علي أهتراء كافة سبل الحماية في الاكسس وبين تباين طرق ومحاولات المبرمجين للتصدي لذلك حتي أن احدهم لخص الأمر بقوله (أن الحماية في الاكسس ما هي إلا حيل ذكية مؤقتة لخبرة كل مبرمج) 

لذا ارجو أم يكون مثالك متمماً ومكملاً لشقي الحماية حماية القاعدة الواجهة (النماذج) وحماية القاعدة الخلفية (الجداول) ويصبح مرجعاً رئيسياً لمن يريد حماية قوية وكل الشكر والتقدير لشخصكم الكريم

 

رابط هذا التعليق
شارك

 حاولت تحويل قاعدو البيانات من accdb الى accde

لكنه رفض ويقول حجم القاعدة كبير ولا يمكن اتمام التحويل

كم اكبر حجم يقبل التحويل ؟؟

رابط هذا التعليق
شارك

في ٢٧‏/٥‏/٢٠١٩ at 12:43, محمد صلاح1 said:

أخي @SEMO.Pa3x بارك الله فيك

هل بالإمكان عمل وحدة نمطية مماثلة بنفس طريقة حماية ملف الواجهة في هذا الموضوع لحماية فتح القاعدة الخلفية قاعدة الجداول في القواعد المرتبطة

وإن كان ذلك ممكنا هل تتكرم بتنفيذ مثالاً لذلك لترحم أمثالنا من المبتدئين والبسطاء في علمهم وتطبيقهم من التشتت والبحث بدون فائدة كبيرة عن افضل طرق الحماية لأول أعمالهم حيث أنني بالفعل قد أصبحت في متاهه كبيرة نتيجة كثرة ما قرأته أثناء البحث بين تأكيد كبار المبرمجين علي أهتراء كافة سبل الحماية في الاكسس وبين تباين طرق ومحاولات المبرمجين للتصدي لذلك حتي أن احدهم لخص الأمر بقوله (أن الحماية في الاكسس ما هي إلا حيل ذكية مؤقتة لخبرة كل مبرمج) 

لذا ارجو أم يكون مثالك متمماً ومكملاً لشقي الحماية حماية القاعدة الواجهة (النماذج) وحماية القاعدة الخلفية (الجداول) ويصبح مرجعاً رئيسياً لمن يريد حماية قوية وكل الشكر والتقدير لشخصكم الكريم

بعد التطبيق عمل رائع ينقصه الصلاحيات ولذلك لدي استفسار هام حول كيفية التوفيق بينه وبين صلاحيات المستخدمين المشهورة للاستاذ مهند العبادي

رابط هذا التعليق
شارك

  • 4 months later...
في ٩‏/٤‏/٢٠١٩ at 17:56, SEMO.Pa3x said:

الان عندما تريد اعطاء القاعدة لشخص ما قم باعطاءه اولا ملف الـ VBS هذا


'-----------------------------------------------------
' ReCoded By Hassanein Hirz Aldeen (SEMO.Pa3x)
' Date 26/11/2017
' All rights reserved. copyright © 2017
'-----------------------------------------------------

' Get clipboard text
Set objHTML = CreateObject("htmlfile")
Set Ws = CreateObject("WScript.Shell")
Clipboardtext = objHTML.ParentWindow.ClipboardData.GetData("text")
sText = HWND_GET
'Set Clipboard
Ws.Run "mshta.exe ""javascript:clipboardData.setData('text','" & Replace(Replace(sText, "\", "\\"), "'", "\'") & "');close();""", 0, True

MsgBox "Copied!"

Function HWND_GET()
Set root = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
Set disks = root.execquery("select * from win32_logicaldisk")
For Each disk In disks
    If disk.volumeserialnumber <> "" Then
        HWND_GET = disk.volumeserialnumber
        Exit For
    End If
Next
End Function

وظيفة هذا الملف يقوم باستخراج ( رقم الهارد , البروسيسور , المذربورد , الماك أدريس ) ثم ينسخه

 

ممكن سؤال استاذى الجليل ومعلمى القدير الاستاذ @SEMO.Pa3x

ما السبب الذى جعل حضرتك لم تضع الكود الاتى بقاعدة بيانانات بدلا من استخدامه فى ملف  VBS  ما هى الحكمة من ذلك ؟!

رابط هذا التعليق
شارك

1 ساعه مضت, ابا جودى said:

ممكن سؤال استاذى الجليل ومعلمى القدير الاستاذ @SEMO.Pa3x

ما السبب الذى جعل حضرتك لم تضع الكود الاتى بقاعدة بيانانات بدلا من استخدامه فى ملف  VBS  ما هى الحكمة من ذلك ؟!

 

مافائدة ان يوضع داخل قاعدة البيانات ؟ 🙄

الغرض من الملف لكي يعطيك العميل الرقم التسلسلي الخاص بجهازه

ثم تقوم انت بدورك كـ مبرمج القاعدة بوضع الرقم بداخل القاعدة ثم تحولها الى امتداد ACCDE

وتعطيها للعميل وبالتالي عند تشغيلها ستعمل على جهازه فقط !

تم تعديل بواسطه SEMO.Pa3x
رابط هذا التعليق
شارك

الان, SEMO.Pa3x said:

 

مافائدة ان يوضع داخل قاعدة البيانات ؟ 🙄

الغرض من الملف لكي يعطيك العميل الرقم التسلسلي الخاص بجهازه

ثم تقوم انت بدورك كـ مبرمج القاعدة بوضع الرقم بداخل القاعدة ثم تحولها الى امتداد ACCDE

وتعطيها للعميل وبالتالي عند تشغيلها ستعمل على جهازه فقط !

اقول لك ما الغرض استاذى الجليل 

بعض برامج الانتى فايروس ترى ملفات ال vbs  على انها فايروس 
لذلك قد يقلق العض منها ويهاف من فتحها

او ان برامج الانتى فايروس قد تحجبها او تمنع عملها او تحذفها 

رابط هذا التعليق
شارك

ايه رأيك  يا استاذى الجليل ومعلمى القدير الاستاذ @SEMO.Pa3x :fff:

أن يتم إرسال ذلك اولا للعميل بدلا من ملف VBS

HWND.zip

تم تعديل بواسطه ابا جودى
  • Like 3
  • Thanks 1
رابط هذا التعليق
شارك

  • 4 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information