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

كيف أمنع المستخدم من إستغلال صور ضمنتها برنامجي

مغلق
بدأه HMS في 4 نوفمبر 2004 · 28 رد · 2,777 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أخواني، أرجو المساعدة في هذا الأمر:

أقوم حالياً بإعداد برنامج لتعليم كتابة وقراءة المقاطع اليابانية المعروفة بال Kanji، وقد قمت بإعداد قواعد بيانات لهذا البرنامج مستخدماً ال Access، ومن متطلبات البرنامج وجود صور Animated GIF تظهر للمستخدم وتبين له كيفية كتابة كل مقطع (عدد المقاطع حوالي الألفين، وقد إستغرقني عملية إعدادها مستخدماً برنامج خاص حوالي الأربعة أشهر، أي أنها ثمينة بالنسبة لي).

السؤال: كيف أستطيع حفظ ملفات Animated GIF في كمبيوتر المستخدم بعد إنزال البرنامج بصورة لا تمكنه من نسخها أو إستخدامها لأغراض أخرى، لو كانت الملفات نصية لهان الأمر ولكنها صور متحركة، ما هي النصيحة في الأمر؟، لقد حاولت تحويل الصور الى Flash وتضمين الملف طبقة عليها توقيعي ولكن الفلاش يمكن التلاعب بملفاته بإستخدام برامج خاصة ومعروفة، هل يمكن مثلاً وضع الملفات على شكل ملف مضغوط Zipped File ولكن كيف أستطيع الوصول إليها في برنامجي على فرض أن هذه الطريقة آمنة.

أ رجو النصيحة والمساعدة.

Learn Japanese :>>> http://www.nouben.com/

#2

أعتقد انه يمكنك أن تطمرها في ملف الـ exe الخاص بالتطبيق و بذلك لن تكون مرئية للمستخدم أساساً...

اعطني فرصة كي أرى كيف يتم هذا الموضوع..

رأس الحكمة الإيمان بالله

#3

حسناً، اليك الحل:

افتح المشروع، و من قائمة File في الفيجوال استوديو دوت نت اضغط على Add Existing Item ثم اختر الصور التي تريدها مطمورة في الـ exe و اضغط Open.

في الـ Solution Explorer اختر كل ملفات الصور التي اخترتها و اضغط على زر الـ F4 في الكيبورد لتظهر لك شاشة الـProperties،

و في خاصية Build Action اختر Embedded Resource ثم قم بعملية الـ Build ليكتمل الموضوع بنجاح.

رأس الحكمة الإيمان بالله

#4

"وعلم الإنسان ما لم يعلم"، اشكرك يا أستاذ محمد على سرعة الإجابة والحل الناجع الذي أعياني لفترة.

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

شكراً ثانية.

Learn Japanese :>>> http://www.nouben.com/

#5

بصراحة فكرة رائعة ولكن كيف يمكن استعراض الصورة المطلوبة واسف على التدخل ولكن من اجل العلم

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#6

آسف....لقد نسيت أن أكتب كيف الوصول الى الصور عن طريق الكود... شكراً للأخ كفاح على التذكير..

كودياً تستطيع أن تصل للصور بهذه الطريقة:

Dim myImage as Image 
myImage = new Image(this.GetType().Assembly.GetManifestResourceStream("Namespace.AnyImage.gif"))

يمكنك استخدام Disassembler مثل Reflector لتستطيع الوصول الى الصور المطمورة بسهولة.

رأس الحكمة الإيمان بالله

#7

اشكرك جدا ياخى ولكن على ما أعتقد هناك خطأ فى هذا الكود يعطى لدى خطا

او هذا الكود مستخدم فى لغة #C واشكرك على الاهتمام

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#8

آسف على الخطأ، و ها هو التصحيح:

  Dim myImage As Bitmap
        myImage = New Bitmap(Me.GetType().Assembly.GetManifestResourceStream("Namespace.AnyImage.gif"))

رأس الحكمة الإيمان بالله

#9

لقد حاولت ولكنى فشلت انا اسف على الازعاج ولكنى مبتدأ جدا فى لغات البرمجة هذا هو الكود ولكن هناك رسالة خطا: null' is not a viaild value for 'stream'

واسف على الازعاج

   Try
            Dim myImage As Bitmap
            myImage = New Bitmap(Me.GetType().Assembly.GetManifestResourceStream("Namespace.lord.gif"))
            PictureBox1.Image = myImage
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#10

الخطأ هنا:

  myImage = New Bitmap(Me.GetType().Assembly.GetManifestResourceStream("Namespace.lord.gif"))

استبدل كلمة Namespace بإسم الـ Namespace الخاص بتطبيقك، لتعرف اسمه اتبع الآتي:

اذهب الى الـ Solution Explorer و اضغط بالزر الايمن للماوس على اسم المشروع و اضغط على Properties،

في شاشة الـProperties ستجد TextBox مكتوب فوقه:

:Root namspace

المكتوب في هذا الـ TextBox هو الـ Namespace الخاص بمشروعك، غالباً سيكون اسم الـ Namespace هو اسم مشروعك.

رأس الحكمة الإيمان بالله

#11

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

الآن حُلّت معضلة طالما بحثت عن حل لها، وقد قمت بعمل برنامج صغير فيه ثمانية صور GIF من مشروعي وبينت فيها كيفية التنقل بينها، وكذلك ضمنت البرنامج الصغير بعض لطائف الفيجوال بيسك نيت التي قد تهم الأخوة المبتدئين أمثالي:

1) كيف إظهار الكنترولز بمظهر الإكس بي.

2) كيف نستخدم الكنترول Help Provider

3) كيف نمنع المستخدم من الخروج من البرنامج من خلال زر الأغلاق

كما تلاحظون أخوتي فإن طريقة الإستاذ محمد كافية وناجعة تماماً، ولكن وحتى نتعلم أكثر أطرح هذا السؤال: هل من طريقة أخرى غير هذه الطريقة؟ أقصد هل يمكن مثلاً وضع الصور داخل ملف مضغوط وكيف أستطيع الوصول إليها من خلال البرنامج في هذه الحالة.

شكراً لهذا المنتدى الرائع بمشرفية وأعضاءه.

الملف مرفق (معمول على الفيجوال بيسك نيت 2003)

WindowsApplication1.zip

Learn Japanese :>>> http://www.nouben.com/

#12

بالفعل يوجد أكثر من طريقة أخرى،

- يمكنك تشفير الصور و فكها عند الاستخدام Encryption - Decryption .

- يمكنك استخدام BinaryFormatter class لاستخدام الصور في صورة Binary.

System.Runtime.Serialization.Formatters.Binary

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

رأس الحكمة الإيمان بالله

#13

وعلم الانسان ما لا يعلم

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

كل يوم فى جديد شكرا لكم جدا وزاد الله من علمكم وعلم المسليمن جميعا

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#14

السلام عليكم,

بما أن الصور هي عبارة عن معطيات ولتظهر هذه الصور في برنامجك يلزم أن تأتي بهذه المعطيات من مكان ما ولهذا يمكن أن أقول لك أنه من المستحيل أن تخفي صورك 100 ب 100 . يمكن أن تضمنها على شكل رسورس أو أن تضعها في ملفات مرافقة مثل ملفات DLL أو غيرها ولكن هذا ربما سيحجبها عن فئة من المستعملين فقط أما الفئة التي التي تنقب بما في داخل البرامج فستتمكن من استخراجها بطريقة أو أخرى.

أضن أن الطريقة التي ربما قد تقف عقبة لعدد أكبر من المستعملين هي أن نتعامل مع الصور كمعطيات باينارية ونقوم بتشفير المعطيات قبل أن ندمجها في البرنامج ويبقى هذا الأخير هو المسؤول عن فك الشفرة وإظهار الصور وهذا سيتطلب مجهود إضافي ومعرفة التعامل مع الملفات كمعطيات باينارية.

وإذا وجدت شيء من الوقت سأحاول إدراج مثال على هذا.

وفقنا الله جميعا وإلى اللقاء.

#15

أخى chik اشكرك على الاهتمام وياريت يكون فى مثال حتى يتضح لنا واشكرك على الاهتمام

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#16

السلام عليكم,

لقد بدأت في هدا ولقلة الوقت لم أنهيه بعد وأنا أحاول الآن أن أضع الكود الخاص بالتشفير في مكتبة DLL حتى يتمكن من يريد استعمالها بإدماجها في برنامجه بسهولة.

وإدا ساعدني الوقت سأضعها غدا أو بعد الغد إن شاء الله.

نتمنى من الله أن يوفقنا ويوفق الجميع وإلى اللقاء.

#17

السلام عليكم,

كما قلت من قبل سأعطي هنا مثال لتشفير وإخفاء الصور ضمن برنامج آخر ويمكن أن نعمل هذا مع مختلف الملفات. والمشروع الذي سأضعه هنا يتضمن عدة معطيات كما ستجدونه في الملف المرفق.

هناك برنامج Encode وهو الذي سيقوم أولا بتشفير الملفات وهنا اخترت تشفيرة سهلة جدا وهي أن نقوم بعملية NOT لكل بايت كما زدت في بداية الملف بايت قيمته 0 حتى يدلنا من بعد عند المعالجة إن كانت المعطيات مشفرة أم لا. هذا البرنامج هو الذي سنقوم به في البداية نشغل البرنامج ونختار الملف أو الملفات التي نريد تشفيرها وسيتم ذلك بخلق ملفات مشفرة تحمل نفس الإسم وبنوع BIN يعني إذا كان الملف باسم abc.xyz يصبح الملف المشفر باسم abc.bin وهنا يجب أن نراعي ألا يكون ملفان لهما نفس الإسم ونوعين مختلفين لأن في هذه الحالة سنخسر ملفا بينهما وهذه هي العملية الأولى.

العملية الثانية وهي أننا سنضمن هذه الملفات المشفرة ضمن ملف Resource وستكون معطيات باينارية وسنختار لها طبعا نوعا واسم وهنا أفترض أننا نعرف كيف نصنع رسورس ويمكن فعل هذا بسهولة مثلا باستعمال فجوال س++ . بعد هذا نضمن ملف الرسورس ضمن برنامج من نوع EXE أو من نوع DLL ويمكن لهذا أن نصنعه أيضا بسهولة في الفجوال س++ كأن نختار برنامج من نوع DLL مثلا فارغا لأننا سنحتاج هنا لمعطيات الرسورس فقط ولا نحتاج أي كود ونسميها ResDll.dll لأنه سيتم المناداة عليها تحت هذا الإسم وإذا أردنا اسم آخر يجب أن نغيره في ملف البرنامج. وهنا ستكون عندنا معطيات مشفرة مضمونة تحت ملف آخر وهنا حتى لو نفتح الملف في برنامج يشاهد الرسورس فستظهر لنا معطيات باينارية ولا نعرف إن كانت تدل على شيء ما.

هذا ما يجب فعله وهناك برنامج Decode.dll هو الذي سيقوم بفك التشفير وقد برمجته حتى نتمكن من استدعائه من مختلف البرامج وطريقة الإستدعاء تتم كما يلي :

SetImage(String ,String , long)

في الباسيك أو على النحو التالي :

SetImage(lpString,lpString,int)

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

البارامتر الثاني هو نوع الرسورس وهذا أيضا سنختاره نحن عند صنع الرسورس

البارامتر الثالث هو رقم تكون قيمته 0 إذا كان الرسورس أي ملف غير صوت وسيكون 1 في حالة صوت لأني أضفت حتى خاصية لعب صوت ملف WAV وهذا سيتم تشفيره أيضا ويمكن لعبه مباشرة في الذاكرة والملف Decode هو الذي سيقوم بكل هذا .

وفي حالة الملفات الأخرى فإن البرنامج سيخلق لنا ملفا تحت اسم الرسورس في المسار المؤقت للوندوز Windows Temp Directory وما على البرنامج سوى استغلال هذا الملف كما يريد وحذفه حين ننهي منه وهكذا لا ينتبه المستعمل إلى ما يجري في الخلف ومرة أخرى بما أن الملف سيكون بدون Extension فحتى لو لاحظنا الملف فقد لا نعرف ما يعمله في أول وهلة. هذا ولو كان في استطاعة الباسيك عرض الصور مباشرة من الذاكرة لتجنبنا هذه الخطوة أيضا.

قمت بالبرمجة بالأسمبلر ويمكن ترجمته إلى س++ بسهولة وإذا كان من يريد هذه الترجمة يمكن أن أساعده فيها وفيما يخص بناء مكتبة الرسورس يمكن أن نصنعه في الفجوال س++ ونسجله تحت نوع RES في مسار ملف ResDll.asm الملف make.bat سيقوم ببناء البرنامج وهنا يجب أن يكون عندنا برنامج Masm32 حتى نتمكن من فعل هذا ولمن يريدوا تحميل هذا يمكن أن يجدوا الروابط في قسم الأسمبلي.

وفي الملف المرفق ستجدون المجلدات التالية :

Decode يحتوي على كود مكتبة Dll التي تقوم بعمل فك التشفير ولعب الصوت وخلق الملف في مسار وندوز المؤقت .

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

Encode يحتوي على الكود الذي يلزمنا لتشفير الملفات

Vb-Code كود لمثال كيف نشغل كل هذا في الباسيك واستعملت فجوال باسيك 6

Res يحتوي على ملفات الرسورس غير مشفرة التي استعملتها في المثال وقد أعطيت صور من نوع GIF - JPG - BMP وكذلك ملف صوت WAV .

EXE يحتوي على البرامج النهائية التي قد نقدمها للمستعمل النهائي وهذا لا يحتاج إلى الملفات السابقة.

هذا وإذا كان فيه أي تساؤل أو اقتراح أتمنى أنه يمكنني المساعدة.

إلى اللقاء.

HideImage.zip

#18
اشكرك اخى وقيد التجربة وشكرا لك جدا

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#19

أخي الكريم chik،

أشكرك جزيل الشكر على هذا الجهد الرائع والشرح الوافي، شكراً، شكراً.

Learn Japanese :>>> http://www.nouben.com/

#20

بسم الله الرحمن الرحيم

---------------------------

First i wanna thank Mr "Mohamed Abd El 3aleem" for transfering a little part of his experience to us and letting us to join with him.

Many many thanks Sir MOHAMED

But

Excuse me , i have an opinion in that matter

First of all i really wanted to know this way and you told us how 2 do it but i think that this way will enlarge the EXECUTABLE Project file and will result in more consumption of the memory resources

Am i right , or What? so plz if u know an additional way plz let us know

really from my deep heart i say:

" You Are A Great Man "

Waiting for Lovely Reply

Salam 3alaykom

#21

السلام عليكم ..

هذه فعلا مشكلة حقيقة ...

اذا كانت الصور التي تريد استخدامها وعرضها تظهر بالحجم الطبيعي على الشاشة فإن حمايتها امر صعب لأنه عندما تقوم بعرضها يمكنني استخدام برنامج SnagIt والذي بدوره يقوم بتحديد الصورة ونسخها الى ملف JPG وبدقة عالية دون الحاجة الى نسخ ملفها الاصلي .

وبالرغم من ذلك :

يمكنك تشفير ملفات الصور الخاصة بك ، ومن ثم فك تشفيرها عند استخدامها في مجلد Temp ولكن على ان تكون بأسماء غير اسمائها التي مع البرنامج وان تكون بامتداد غير امتداد الصور ... فبهذه الحالة لن يستطيع المستخدم ان يجد اسم للصور في جهازه كما انه لا يمكنه تشغيلها بواسطة Double Click .. وبهذا لن يجد رابطاً .. وهذا اسلوب للتمويه فقط ..

وهنالك طريق وحيل خاصة بالتشفير تقوم بتشفير منطقة الـ Header الخاصة بالصورة فقط والتي بدوها ستمنع أي برنامج من فتح الصورة .. وما عليك سوى اعادة الـ Header الى وضعه الطبيعي قبل الاستخدام ..

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

تحياتي

تم تعديل هذه المشاركة بواسطة الاحتراف في 22 نوفمبر 2004 في 13:12

#22

العفو يا أخي united_muslim_nation .....

united_muslim_nation كتب:
but i think that this way will enlarge the EXECUTABLE Project file and will result in more consumption of the memory resources

الحقيقة كلامك صحيح في معظم الأحوال، لكن في الدوت نت يختلف الأمر قليلاً، حيث أن الـ JIT Compiler يقوم بالترجمة عند الطلب أي إن الـ exe لا يترجم كله مرة واحدة، بل يقوم الـ JIT بترجمة الجزء المستدعى في التطبيق، و بعد ما يتم تنفيذ هذا الجزء المستدعى، و بقى هذا الجزء معلق بالذاكرة يتم التخلص منه عن طريق الـ Garbage Collector، و في حالة استدعاء هذا الجزء ثانيةً يتم عمل Recompilation له، أي في كل الأحوال موضوع الموارد هذا لم يعد مشكلة مع الدوت نت.

و أعتقد أن هذه الخطوات تحدث أيضاً مع أي شيء مطمور بالـ exe .

رأس الحكمة الإيمان بالله

#23

بصراحة فكرة البرنامج حلوة للغاية

مع العلم انة هناك برنامج مصمم بلجافا وهي نفس فكرة برنامجك

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

والي الامام

#24

Oooooooops , I forgot Garbage Collector

And

I Guess i'm sure u r rite

Many thanks Mr MOHAMED ABD EL 3aleem

And

Hope u and all muslims

GOOD LUCK

I wanna ask any supervisor here in this forum if they can enlarge the fonts used in this forum cause this font will make us blind

Plus

Many articles in the main sections area of this forum are not clear(they are very small to see where the underlying description of every article is in bold while the main font of everything is in Normal Mode) so plz if u know any of the main supervisors of this forum,let them enlargethe fonts plz for importance

In Addition : i think it makes everyone don't like to read articles and thus leaving this IMPORTANT and CRITICAL Forum

so , plz let this reply a public request from all the members of this forum

and i think u also suffer from this problem

Rite? plz help us in this tiny problem

MANY THANKS to u all

Especially

Mr / Mohamed Abd El Aleeem

From : Mohamed

#25

sorry i forgot

----------------

In response to the Garbage Collector Reply

I Think Garbage Collector clears memory from the application resources used in memory Automatically

but

i guess it's better to implement it in your code than leave it to act automatically by using

(garbagecollector.suppressfinalize) in the Finalize eventhandler

Rite Or else? plz let us know

Thanks Again Dear

Mr : Mohamed

هذا الموضوع مغلق.

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