الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حماية ملفات المشروع

بدأه نهال في 4 مايو 2006 · 14 رد · 2,372 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عضوة جديدة وتنشد مساعدتكم ان شاء الله ماتخيبون ظني

طلبي بسيط جدا وان شاء الله مايكلف وقت..

المشكلة:

انا انشيء مشروع نهائي للتخرج..والحمدلله نواجه مشاكل تقنية ونحلها بأنفسنا

لكن هنا مراح اسأل سؤال تقني ابدا..

السؤال شوي خارج مواضيع اللأكواد وهكذا..

انشأت المشروع باستخدام VB6.0..المشروع يربتط مع قاعدة بيانات وملف نصيtext يحويان معلومات مهمة جدا.

اريد اعمل security على هذين الملفين.اقصد عندما يعمل مستعمل البرنامجsetup للبرنامج المحزم سيجد ملف الexe الخاص بالبرنامج بالاضافة الى ملفي قاعدة البيانات والtext جمعيهم موجودين في مجلد البرنامج.من داخل البرنامج لن يقدر على تغييرهما حيث يوجد كلمة سرية.لكن من خارج البرنامج اي من نفس مجلد اغراض البرنامج سيجد الملفين موجودين وله حرية التحكم بها من الاضافة والتعديل والحذف مما سيخرب البرنامج الexe الذي يعتمد عليهما.

الطلب:

*كيف امنع مستخدم البرنامج الذي ركب البرنامج على حاسبه من مسح هذين الملفين من مجلد البرنامج؟

*كيف امنع المستخدم من فتح الملف النص من خارج البرنامج والعبث به وتغييرالمعلومات؟

*هل يكفي وضع كلمة سرية على قاعدة البيانات من داخل access وجعل برنامج يدخلها بالكود للتعامل مع القاعدة.هل يضمن ذلك عدم قدرة المستخدم على العبث بها من الخارج؟

طريقة تحقيق الطلب:

الطريقة نفسها لا تهمني بقدر مايهمني انجاز المطلوب. سواء طريقة يدوية من القوائم او برمجية"كود" او باستعمال برامج مساعدة.

ملاحظة:

تم نشرالموضوع في قسمين وذلك لتعلقه في كلا القسمين..المعذرة

اتمنى من حضرتكم التفاعل السريع نظرا لقرب موعد التسليم..وجزاكم الله خيرا

شكرا لكم

#2
نهال كتب:
الطلب:

*كيف امنع مستخدم البرنامج الذي ركب البرنامج على حاسبه من مسح هذين الملفين من مجلد البرنامج؟

*كيف امنع المستخدم من فتح الملف النص من خارج البرنامج والعبث به وتغييرالمعلومات؟

*هل يكفي وضع كلمة سرية على قاعدة البيانات من داخل access وجعل برنامج يدخلها بالكود للتعامل مع القاعدة.هل يضمن ذلك عدم قدرة المستخدم على العبث بها من الخارج؟

طريقة  تحقيق الطلب:

الطريقة نفسها لا تهمني بقدر مايهمني انجاز المطلوب. سواء طريقة يدوية من القوائم او برمجية"كود" او باستعمال برامج مساعدة.

ملاحظة:

تم نشرالموضوع في قسمين وذلك لتعلقه في كلا القسمين..المعذرة

اتمنى من حضرتكم التفاعل السريع نظرا لقرب موعد التسليم..وجزاكم الله خيرا

شكرا لكم

و عليكم السلام و رحمة الله و بركاته

طبعا هذي ثاني مشاركة لي بالمنتدى :D

بالنسبة للسؤال الأول ألا و هو كيفية منع المستخدم من حذف الملفين...

طالما أنه لما يكون ملف قيد الاستخدام لا يمكن حذفه ..

بس خلاص .. يعني لازم اتخلين برنامج يستخدم هالملفين و بالتالي

لن يستطيع المستخدم من حذفهما .. و لكن إذا كان المستخدم ذكي شوي

فيمكنه عمل Replace إذ أن ال Replace تتم حتى لو كان الملفان In use

هذه كانت طريقة .. و أكيد هناك طرق أخرى .. أعتقد بأن هناك برامج جاهزة توفر هذه

الميزة .. كما أني أتوقع بأن هناك حل بالريجستري بحيث انقول للويندوز بأنه غير مسموح

حذف هالملفين.

يفضل أن تعملين Backup كميزة بالبرنامج لأهمية البيانات.

اقتباس
*كيف امنع المستخدم من فتح الملف النص من خارج البرنامج والعبث به وتغيير المعلومات؟

من الممكن عمل الملفان Hidden + Sysetm Files

و ذلك لحماية أكثر .. إذ لن يظهرا للمستخدم ما لم يكن قد استخدم خاصية عرض الملفات المخفية.

اقتباس
هل يكفي وضع كلمة سرية على قاعدة البيانات من داخل access وجعل برنامج يدخلها بالكود للتعامل مع القاعدة.هل يضمن ذلك عدم قدرة المستخدم على العبث بها من الخارج؟

نعم، و لكن لدرجة معينة و ليس 100% .. إذ أن هناك برامج لأختراق ملفات الديتابيس و الحصول على كلمة سرها في ضغطة زر واحد.

كما ان هناك برامج لعمل Trace لكلمة السر بحيث أن البرنامج بقوم بختبار كلمة سر و إذا لم تصلح يقوم بتجريب غيرها و هكذا و لكن هذه البرامج تحتاج إلى وقت كي تكتشف كلمة السر.

و بالتوفيق إن شاء الله.

#3

و لتغيير ال File Attributes يمكنكم استخدام الكود التالي:

Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const FILE_ATTRIBUTE_COMPRESSED = &H800
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_HIDDEN = &H2
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_ATTRIBUTE_READONLY = &H1
Private Const FILE_ATTRIBUTE_SYSTEM = &H4
Private Const FILE_ATTRIBUTE_TEMPORARY = &H100

Private Sub Form_Load()
    ' Setting the file "abc.txt" to be a System File
    SetFileAttributes "abc.txt", FILE_ATTRIBUTE_SYSTEM
End Sub
#4

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

لكن ماذا لو كان البرنامج مغلق وحاول حذفهم؟؟

أما جعل الملف مخفي هي حماية ضعيفة اذ انه يمكنه تغيير الخصائص..

الا توجد حماية اقوى كجعله read_only او hiddenولا يقدر يغير خاصيته هذه ابدا من خارج النظام بل فقط من داخله..

طيب ماهي الفايدة لو صار file system?? اتمنى اعرف لو سمحت..

لانه جربت البرنامج ولا تغير شي بخصائص الملف

وين الفزعة؟؟ :(

تم تعديل هذه المشاركة بواسطة نهال في 4 مايو 2006 في 15:26

#5

تجربة لجعل الملف قيد الاستخدام:

لو جربنا نعمل برنامج صغير يفتح ملف ويش راح انسوي:

Private Sub Command1_Click()
    Dim str As String
    Open "abc.txt" For Input As #1
    Input #1, str
    Close #1
End Sub

لما انقوم بتشغيل هالبرنامج راح تطلع ليننا فورمة فيها زر

لما نضغط على الزر البرنامج راح يفتح الملف و بالتالي راح يكون in use

و راح يقرأ السطر الأولي من الملف abc.txt

و من ثم راح يعمل close للملف و بالتالي الملف ما راح يكون in use

لعمل برنامج يجعل الملف in use طيلة فترة عمل البرنامج

فإننا راح نحذف ال Close Command من البرنامج

و بالتالي ما راح يقدر المستخدم يحذف الملف.

كما يلي:

Private Sub Command1_Click()
    Dim str As String
    Open "abc.txt" For Input As #1
    Input #1, str
End Sub

و هنا جربي تحذفين الملف راح يعطيش error msg.

errorDeletion.PNG

البرنامج بالمرفقات.

Avoid_Deletion.zip

#6
نهال كتب:
انت قلت انه ما يقدر يحذفهم بما  انه يستخدم البرنامج

لكن ماذا لو كان البرنامج مغلق وحاول حذفهم؟؟

اقتباس
هذه كانت طريقة .. و أكيد هناك طرق أخرى .. أعتقد بأن هناك برامج جاهزة توفر هذه

الميزة .. كما أني أتوقع بأن هناك حل بالريجستري بحيث انقول للويندوز بأنه غير مسموح

حذف هالملفين.

نهال كتب:
طيب ماهي الفايدة لو صار file system?? اتمنى اعرف لو سمحت..

لما نجعل البرنامج Hidden File لازم المستخدم يفعل Show hiddle files and folders

و لما نجعل الملف System File لازم المستخدم يزيل الصح من على Hide protected OS files

كما بالصورة التالية التي توضح استخدام ال Folder options:

HiddenSystemFiles.PNG

ملاحظة لما الملف يصير Hidden فراح انلاحظ التالي في ال Properties:

HiddenFile.PNG

و لما الملف راح يكون System File راح نحصل على التالي:

SystemFile.PNG

و لما الملف يكون Hidden و System File في نفس الوقت فسنحصل على التالي:

SysHiddenFile.PNG

تم تعديل هذه المشاركة بواسطة CPU_Master في 4 مايو 2006 في 16:18

#7

لكي يتم تجنب حذف الملف نتبع التالي:

1- لو كان الملف ضروري فقط للتنصيب فاذن نقوم بنسخه الى مجلد البرنامج ونتحقق من وجوده عند التشغيل, بهذا يتم تعطيل البرنامج في حال حذفه

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

كيف نتجنب التعديل على الملف:

1- لو كانت محتويات الملف ثابتة كمعلومات تسجيل او ما شابه فيكفي ان يتم حساب توقيع CRC او MD2-5 او خلافه الخاصة بعمل توقيع رقمي (وليس تشفير, التوقيع لا يتم من خلاله الحصول على معلومات لكن للمصادقة على صحة البيانات فقط), بعد ان يتم حساب التوقيع يتم حفظ القيمة في البرنامج نفسه بحيث يتم حساب قيمة التوقيع عند كل تشغيل للبرنامج وتتم المقارنة مع التوقيع الاصلي المخزن (hardcoded) فان تغير فهذا يعني التلاعب ولو ببت واحد فالتوقيع يعمل على مستوى البايتات اي ان اي تعديل او اضافة او مسح يغير من التوقيع كاملا, نمنع تشغيل البرنامج عندها.

2- لو كانت محتويات الملف متغيرة فليس بالامكان حساب التوقيع والاعتماد عليه بل من المفترض الان ان نقوم بالتالي, عند اول تشغيل للبرنامج نقوم بمقارنة التوقيع الاصلي مع القيمة الاولية التي حسبناها من قبل. الان يقوم المستخدم بالعمل على البرنامج ويحفظ عمله او يتم الحفظ تلقائيا عند انهاء البرنامج حيث يتم حفظ محتويات الملف ويتم انشاء توقيع لها جديد يتم تخزينه في مكان آمن (قاعدة بيانات محولة الى MDE وليس MDB) حيث يتم فيما بعد مقارنة التوقيع الجديد للملف عند تنفيذ البرنامج مع التوقيع الاخير الذي تم الحصول عليه وحفظه في قاعدة البيانات. يمكن طبعا حفظ القيمة في مكان, ملف, ريجستري, على ورقة :P المهم الا يسمح بالتعديل بسهولة على الملف.

الان ما الذي يمكن اختصاره لتسريع العمل والاداء؟

يمكن حفظ التوقيع الخاص بالملف في نهاية الملف او في منتصفه او في مكان عشوائي فيه بشرط ان يتم استعادته بالشكل الصحيح وان يتم الاختبار جيدا قبل التوزيع.. بالتالي التعديل في الملف قد يؤدي الى حذف التوقيع او عطبه وهذا يعني ان المستخدم "عم يلعب لعبته لكن على مين :P "

ما المشاكل الامنية التي تواجهنا في الحالات التالية:

1- التوقيع ثابت نظرا لان محتويات الملف ثابتة.

2- التوقيع متغير لان محتويات الملف متغيرة.

المشاكل:

1- يمكن تتبع كتله المقارنة مع التوقيع وتعديلها او الغاءها.

2- = = = = = =

ما الحل المضاد؟

- ان نقوم بحفظ توقيع CRC او MD5 للبرنامج نفسه وبالتالي التعديل عليه يعني التلاعب بالملف.

ما المشكلة؟

- قراصنة البرمجيات الخبراء يعلمون اين يتوجهون باي حالة من الحالات ولن تصمد كل هذه الدفاعات اما 3 دقائق على الاكثر من التنقيح مضافا اليها الوقت اللازم لعمل كوب شاي :^)

في المرفقات مثالين عن CRC32 و MD5.

VbMD5.rar

MD5DLLTest.rar

crc32_protection.zip

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8

السلام عليكم:

اخي CPU ماستر للأسف جربت البرنامج ولم يحول لي الملف الى ملف نظام ولا مخفي..

اخي Xacker يشرفني رد مثلك في الموضوع..

بالنسبة للحذف:

الملفات هذه يحتاجها عمل البرنامج وليس للتنصيب..

لكن اليس ضياع بيانات النظام هي قلة في حمايته؟؟

بالنسبة للتعديل:

هم 3 ملفات ..

1-واحد منهم خاص بلغة Prolog جيث ان برنامجي يتفاعل مع knwledgebase من خلال واجهات VB

هذا غير مهم لمعرفة تفاصيله.

لكن هذا الملف ثابت وهو عبارة عن ملف لغة برولوق تمت ترجمتهcompiled ويعتبرالعقل المفكر للنظام..

وهو ثابت لا يتغير كمحتوى..لكن لا اريد ان يعدل احد فيه او يلغيه لان اذا التغى لم يعد لنظامي فائدة..

2- ملف DB وهو متغير بالتاكيد..لكن كيف احولها لMDE???

لان برنامجي يتعامل مع قاعدة بيانات نسخة97??????

3-ملف تكست وهو ملف متغير وحيوي قاعدة المعرفة التي يستعلمها ملف prolog المترجم من خلال واجهات VB

اتبع اذن الطريقة الاولى مع الملف الثابت والطريةقالثانية مع المفين المتغييرين

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

قمت بتحميل المفات

ولكن اريد ان اسألك هل هذي الطريقة سهلة؟؟ ام تحتاج خبرة ومعقدة..لان بقى لي يومين اسمل المشروع..

هل يمكنني عمل ذلك في هذين اليومين ام تحتاج خبرة؟؟

حيث اني لم افتح الملفات حتى الان وذلك لإنشغالي بالمستند الخاص بالمشروع...

اتمنى مساعدتك يا أخي..واشكر لك شهامتك

رجاء رجاء انتظر ردكم ياخواني..

تم تعديل هذه المشاركة بواسطة نهال في 5 مايو 2006 في 15:52

#9
اقتباس
اتبع اذن الطريقة الاولى مع الملف الثابت والطريةقالثانية مع المفين المتغييرين
اقتباس
الذي افهمه منك انه لا توجد طريقة بالاساس تمنع المستخدم من الحذف والتغيير بل فقط نكتشف هل هناك تغيير ام لا؟

بالضبط. لكن الفكرة تكون في ان التعديل لا يمكن اخفاؤه فالامر يتطلب ان يتم التعديل على التوقيع المخزن بعد ايجاده وهذا الامر للمستخدمين وللقراصنة الجدد ومتوسطي الخبرة غاية في التعقيد وستجيدنهم يهرعون الى اقرب شخص خبير يبكون قليلا ليحصلو على نسخة مقرصنة.. لكن افضل الاشخاص الذين اعرفهم في هذا المجال لا يلمسون البرامج العربية بكل بساطة.. والا لزادوا الطين بلة فمبرمجينا بالاساس غير قادرين على التسويق بشكل كبير في حالة الافراد فكيف لو تمت قرصنة برامجهم ايضا :^)

اقتباس
ولكن اريد ان اسألك هل هذي الطريقة سهلة؟؟ ام تحتاج خبرة ومعقدة..لان بقى لي يومين اسمل المشروع..

هل يمكنني عمل ذلك في هذين اليومين ام تحتاج خبرة؟؟

لن تحتاج الى خبرة كبيرة, الملفات المرفقة فيها امثلة جاهزة تظهر كيفية يتم توليد الرقم لبيانات معينة وكيف انه من المفترض ان تكون كذا وان الناتج كذا.. الامر سيكون مجرد نسخ ولصق لكن يفضل ان تلمي قليلا بالخوارزمية التي ستقومين باختيارها, CRC ام MD5 على سبيل المثال, وافضل مرجع سريع يمكنني اطلاعك عليه هو http://en.wikipedia.org , ابحثي عن الخوارزمية التي تريدين.

اخيرا بخصوص التحويل الى MDE فليس لي تعامل مع قواعد البيانات باي شكل من الاشكال لذا يفضل البحث عن الاجابة في قسم الاكسس.

بالتوفيق

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#10

شكرا يا أخي الطيب.

انا لا أريد الحماية من القراصنة.

لكن اريد الحماية من جهل المستخدم نفسه.فقد يجهل اهمية الحفاظ هل هذه الملفات.

اما مشكلة MDE فهل يجب التحويل الى MDE!!!

ألا يمكن التعامل مع MDB?????

شكرا يا أخي..

#11

لقد قرأت الأكواد واعجبتني تقنية MD5 .

حسنا الآن الذي يفترض علي هو الحصول على التوقيع الرقمي لمحتويات الملف؟

اي اقرأها سطر سطر؟

او ماذا يا اخي..

انا فهمت ان دالة MD5 نرسل لها قيمة وتعطينا التوقيع الرقمي..

لكن انا ماذا يفترض ان ارسل بالضبط..وذلك للتأكد من محتويات ملفي انها صحيحة..

حماية قاعدة البيانات سأكتفي بوضع كلمة سرية..

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

لكن حتى الآن لا اعرف ماذا ارسل لدالة MD5 بالضبط .. اي جزء من الملف ارسل؟؟

وللأسف بحثت في المنتدى عن MDE ولم اجد شيئا يطابق هذه الاحرف..

لا أدري لماذا لايمكن بعد الحصول على القيمة حفظها في قاعدة بيانات عادية..

تم تعديل هذه المشاركة بواسطة نهال في 5 مايو 2006 في 20:24

#12

يكفي ان تستخدمي MDB طبعا, الفكرة كانت فقط في حماية القاعدة بحيث لا يتم استخدام برنامج لعرض المحتويات مما يذكرني بامر مهم, الحصول على التوقيع لا يفيد لانه نتيجة one-way hash ولا يتم الحصول على معلومات منه لو طبقت خوارزمية معاكسة, يجب ان يتم التعديل عليه ضمن قاعدة البيانات والتعديل بشكل موافق على الملف كي يتم القبول بهذا.

بخصوص حماية الملفات من التعديل بسبب جهل المستخدم يمكنك تشكيل ملف صغير تضعيه ليعمل مع بدء التشغيل بحيث عندما يتم تنفيذه يقوم بفتح الملفات التي لا تريدين من المستخدم ان يحاول العبث بها دون قصد ولا يتم اغلاق الملف الا عند اغلاق الكمبيوتر, هذا يضمن ان الملف مستخدم دوما وبالتالي لا يمكن تحريره.

بخصوص MD5 فمن المفترض ان ترسلي البيانات التي تريدين التحقق من انه لم يتم التلاعب بها, مثلا "حرر هذا الشيك بواسطة 'فلان' بمبلغ قدره 1000.000$ ويصرف لـ 'فلان2' بتاريخ xx/yy/zz"

انا اعلم ان "فلان2" هو اسم تابع لشخص معروف موجود على سبيل المثال ضمن قاعدة البيانات تحت قائمة "التجار" فمن غير المعقول ان يصرف هذا المبلغ لمن هو في قائمة "المستخدمين" ولنفرض ان تاريخ "xx/yy/zz" هو تاريخ تسليم ثمن بضاعة لشخص معين يتسلمها بنفس التاريخ من كل شهر فاذن انا اعلم ان ذلك الشخص هو "صلاح مدني" اذن اقوم بحساب التوقيع لهذا الاسم واقارنه مع الاسم الموجود في الملف.. هذه كلها امثلة.

راجعي الملف المرفق فيه تعديل بسيط يقوم بحساب التوقيع لكامل محتوى الملف على اعتبار ان جميعها بيانات لا يجوز التعديل فيها باي شكل من الاشكال ويظهر كيف يتم التحقق من ان محتويات الملف لم يتم التلاعب فيها (لملف ثابت فانا لا اتعامل كما ذكرت مع قواعد بيانات لذا لا استطيع التزويد بمثال) لكن الفكرة مشابهة جدا.

VbMD5.zip

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#13

اضافة بسيطة, ادوات تستخدم في حساب التوقيعات, التشفير, الضغط.

http://rspsoftware.bighost.com.br/rspchecksum.htm

http://rspsoftware.bighost.com.br/rspencrypt.htm

http://rspsoftware.bighost.com.br/rspstrcomp.htm

بخصوص قواعد بيانات MDE المشكلة هي في خيار البحث الذي قد لا يعرف بيانات كاملة لكلمات اقل من 3 حروف واذا زدناهم قلت فرصة الحصول على معلومات واضحة.

http://www.google.com/search?hl=en&q=MDB+into+MDE

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#14

اخي الكريم xaker برغم إن المشاركة من تاريخ سابق ولما أقرئها إلا اليوم ومع ذلك يتوجب علي تقديم الإحترام لك

إجابات رائعة وشرح بسيط لموضوع عقد الالوف اخيرا لك الشكر

تخيل لقد بحث عن crc في المنتدي ولم اجد الحل

فذهبت لجوجل ليوصلني الي الحل هنا

حياك الله اخي xxaker

وزادك بسطة في العلم

#15

ممكن من فضلك رابط يشرح موضوع التوقيع من الاول لانى مش فاهماه ؟

مواضيع مشابهة