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

سؤال عن ماهية الدالتين Crc16 &crc32 وطريقة إستخدامهما

بدأه يوسف دايت في 17 يونيو 2008 · 31 رد · 4,640 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الأفاضل السلام عليكم ورحمة الله

نرجو ان يكون الجميع بخير

أقرا دائما عن الداليتين crc16

و crc32 وأنهما يستخدمان لحساب الفائض ؟؟

وكل الذي فهمته أنهما يقارنان بين قيمة ملف ما قبل والنقل وبعد النقل لمعرفة إن كان حدث اي تغيير في بيانات الملف ام لا

ونرجو من الأخوة الأفاضل بالمنتدي ان يوضحوا لنا ماهية الدالتين

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

وهل يمكن تطبيقها من داخل فيجوال بيسيك أم لا

نرجو الإفادة وجزاكم الله كل خير

#2

لا اقول لك الا الدخول على هذا الرابط والبحث عن ما تريده

والدعاء لي

http://www.vb-helper.com/

#3

دوال أين ؟ فى الـ VB6 ؟

عموما راجع Cyclic redundancy check

أما عن المقارنة فلنتخيل أننا نسخنا ملف من مكان ما و نريد أن نتأكد من سلامة النسخة (مطابقتها مع الأصل) فنقوم بالحصول على قيمة و ليكن الـ MD5 أو SHA1 الخاصة بكلا منهم و نقارن هل هى متطابقة أم لا.

#4

الاخ الفاضل محمد سيد جزاك الله كل خير

اخيرا حد رد علي

الدالة crc16 و crc32 ليسوا ضمن الفيجوال بيسيك

وهما يقومان بمثل ما تفضلت به فعليا التدقيق في ملف لمعرفة هل تم التلاعب او تغيير اي بايت فيه ويرجعان بقيمة checksum

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

القيمة الاصلية لل crc الخاص بالملف يتم تسجيلها اين في الملف نفسه

ام في نسجة من الملف وكيف تتم عملية المطابقة

والله الموضوع مهم جدا وجميل

وأنا عارف ان حضرتك حاليا علي لينوكس والفيجوال مش هيشتغل معاك لذا ارجو المساعدة من الجميع

ولك الشكر أستاذ محمد سيد

#5

الأمر ممكن لكن فى علاقته بموضوع الحماية هناك نقطتين يجب أن تضعهم فى بالك:

- ضعف الـ Classic VB بصفه عامة فى مواضيع الحماية يجب أن يكون فى بالك.

- فكرة التأكد من قيمة الـ Checksum الخاصة بملفات البرنامج لنعرف هل هناك تلاعب أم لا هى فكرة قديمة بل أثرية و كل ما على كاسرى البرامج هو أن يمنعوا برنامجك من التحقق من الـ Checksum أساسا أو اللعب فيه بحيث يقبل أى قيمة يحصل عليها.

اقتباس
وسؤالي كان كيف استفيد من الدالة في معرفة هل تم فتح ملف برنامجي للتنقيح وتم التعديل علية ام لا
لو تخيلنا أنك جمعت كل وظائف البرنامج الهامة فى DLLs و OCXs محمية يمكنك التأكد من قيمة الـ Checksum الخاصة بهم فى بداية تشغيل الملف التنفيذى الذى سيستدعى تلك الوظائف منهم و هذه أبسط وسيلة.

لمعرفة طرق حساب هذه القيم أبحث هنا بالمنتدى و بموقع PSC عن MD5 و CRC و Checksum و ربما Hashing و SHA قد تجد ما يفيدك.

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

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

#6

أشكرك استاذ محمد علي الموقع الرائع

ولكنه يدعم c++ فقط

وعلية شرح جميل عن cr c

وعلي فكرة crc بأنواعها هي function

A cyclic redundancy check (CRC) is a type of function that takes as input a data stream of any length, and produces as output a value of a certain space, commonly a 32-bit integer. The term CRC is often used to denote either the function or the function's output. A CRC can be used as a checksum to detect alteration of data during transmission or storage. CRCs are popular because they are simple to implement in binary hardware, are easy to analyze mathematically, and are particularly good at detecting common errors caused by noise in transmission channels. The CRC was invented by W. Wesley Peterson, and published in his 1961 paper[1].

#7

موقع PSC يجمع عده لغات, الرابط السابق لقسم الـ VB

#8

شكرا جزيلا استاذ محمد فعليا حصلت علي كود مثال لعمل CRC &CHECKSUM

ولكن المشكلة كيف استفيد من النتيجة

اين سأضع قيمة CRC الأولي للملف الاصلي

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

هذا هو المطلوب وفعليا طبقت الكود وبقي فيه مثال جاهز بس لا يعمل الإ بعد ان يصبح EXE

وسياسة المنتدي تمنع الملفات التنفذية

هل ممكن ألحق كمثال يستدل به فقط ام لا ؟؟

وشكرا لمتابعتك للموضوع

#9

الاخ الفاضل محمد سيد وجميع من يهمهم الامر

أرجو الإطلاع علي الموضوع علشان CRC32 بتاع دماغي بقي 000000

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

لأن كل مرة بعمل فيها CRC علي نفس الملف بحصل علي قيمة CRC32 مختلفة عن الاولي

وعدد بايتات الملف نفسه بتتغير في كل مرة

مع ان الملف تنفيذي ولم يتم تنقيحة أو الخ

فما الذي يحدث

سوف أرفق البرنامج الذي يقوم بعمل ال CRC32 للتاكد من النتائج وليس لغرض آخر

وبعدها اتمني أن اجد إجابات

عن عملية ال CRC هل هي تقوم بحساب معين فقط علي الملفات أم انها تكتب علي الملف نفسه شيئ معين

والثانية هي أقرب للصواب

وإذا كانت بتغير قيمة الملف كل مرة نفتحة ونقوم بحساب ال CRC32 فكيف يستدل علي انها تتاكد من ان الملف لم يتغير إذا كانت هي نفسها تغير الملف

الموضوع مهم ويمكن البعض يراه موضع سخيف أو ممل خاصة وأني طرحت السؤال منذ أكثر من اسبوع

ولكن أرجوكم عايزين نفهم

وشكرا لكم

أريد ان ارفق الملف التنفيذي ليكون جاهز لأن البعض يمكن ما عنده فيجوال او يعمل علي أنظمة اخري

________CRC32.rar

#10

البرنامج الذي أرفقته أخي يوسف يقوم بحساب CRC للملف ثم يكتب هذه القيمة في آخر الملف ،

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

post-28945-1214454380_thumb.jpg

سبحان الله وبحمده ... سبحان الله العظيم

#11

حياك الله اخي احمد

وينكم من زمان لي اسبوع منتظر توضيح او شرح للموضوع عموما نحمد الله

طيب إذن ال البرنامج يقوم بحساب ال crc للملف التنفيذي ويسجل الرقم في آخر 4 بايت بالملف كلام جميل

عند إغلاق نفس الملف وفتحة مرة ثانية لماذا يتغير عدد البيتات ويتغير حساب ال crc مع ان الملف لم يتعرض لاي محاولة كتابة أو تعديل

معلش الموضوع متلخبط معايا

يعني كل مرة يفتح الملف لحساب ال crc سنحصل علي رقم مختلف ؟؟؟

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

هل بالإمكان توضح الامر وجزاكم الله كل خير

لك الشكر والشكر موصول للأستاذ محمد سيد الذي تحملني كثيرا الليلة الفائتة

شكرا لكم

#12

كما قلت لك سابقًا فالبرنامج يقوم بكتابة قيمة CRC في آخر الملف ، ولذك فمن الطبيعي أن تتغير قيمة CRC

إذا أردت أن تبقى القيمة ثابتة فلا تجعل البرنامج يكتب أي شيء في الملف ..

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 26 يونيو 2008 في 08:34

سبحان الله وبحمده ... سبحان الله العظيم

#13
اقتباس
إذا أردت أن تبقى القيمة ثابتة فلا تجعل البرنامج يكتب أي شيء في الملف ..
لذلك قلت لك
اقتباس
لو تخيلنا أنك جمعت كل وظائف البرنامج الهامة فى DLLs و OCXs محمية يمكنك التأكد من قيمة الـ Checksum الخاصة بهم فى بداية تشغيل الملف التنفيذى الذى سيستدعى تلك الوظائف منهم و هذه أبسط وسيلة.
#14

جزاك الله خير استاذ احمد

المطلوب ألا نجعل البرنامج يكتب اي شيئ في الملف

طيب كيف ستتم المقارنة إذا لم نعرف الرقم المخزن في آخر الملف

وهل تخزين نتيجة ال crc في الاربعة بايت الاخيرة يمكن ان تتم مرة واحدة فقط علي الملف بحيث تصبح مرجع للمقارنة في المرة القادمة ؟؟ كيف

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

وعند فتح الملف للمرة الثانية للتاكد من سلامتة هل يتم الفتح بنفس برنامج الذي قام بعمل ال crc ام ببرنامج آخر ؟؟

تفاديا للكتابة مرة ثانية علي الملف

آسف صحيح أنا لم انم منذ الساعة الواحدة ظهر الامس وبحاول أفهم بس مش مستوعب الوضع هل المشكلة في قلة النوم

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

لكي تتبين جوانب المشكلة

فلدينا ملف بحاجة الي تدقيق

وملف آخر يدقق الملف الاول

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

هل يمكن تدقيق الملف بدون البرنامج يعني بالفيجوال أو من داخل الملف نفسه يعني الملف اثناء التحميل يدقق CRC ويقارنها بس مع ايه ؟؟

مع قيمة ال CRC الخاصة به هو هل هذا ممكن ام انها إضغاث أحلام

أرجو توضيح الامر وجزاكم الله كل خير

#15

شكرا أستاذ محمد سيد بس نقل البرنامج ل oxc و dll موضوع كبير علي

وبعدين حماية الادوات والمكتبات موضوع اكبر

ولكن المحاولة لازمة و توماس اديسون جرب تصنيع المصباح حوالي 2000 مرة وبعدين عرف الصح ومــــــات

سأحاول وجزاكم الله كل خير

#16

للرفع

وجزاكم الله كل خير

#17

نشكركم جدا

ولي مطلب بسيط هل يمكن نقل الموضوع لمنتدي التجميع (assembly)

او أي منتدي آخر يناقش الخوارزميات

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

وشكرا جزيلا لكم

#18

[تم نقل الموضوع بناء على رغبة صاحبه].

تم تعديل هذه المشاركة بواسطة msayed2004 في 27 يونيو 2008 في 19:57

#19

لا اعرف إن كان هذا هو القسم الملائم لطلبك ::: الجماعة هنا لا يحبون الـVB (وأنا منهم :happy: )

بمكنك ربط برنامجك بملف dll خارجي يقوم بحساب قيمة الـcrc , أما عمل ذلك بالـvb فأعتقد انك قصدت القسم الغير مناسب .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#20

يا GM الفكرة الآن هى كيف يقوم الملف بحساب الـ MD5 مثلا لنفسه ثم يقارنها بقيمة مسجلة بداخله.

فكرت فى هذا الموضوع سابقا و فكرت لو يمكن حساب القيمة من بداية الملف الى نقطة معينه فيه و يكون الجزء المتبقى هو المحتوى على قيمة الـ MD5 المراد المطابقة معها ................ أفهم أحدكم شئ ؟ أن فهم أحدكم فليقل لى هل اللفكرة قابلة للتنفيذ أم لا ؟

#21

الحمد لله هناك قطبين يناقشان مشكلتي

السلام عليكم جميعا

فعلا سؤالي هو

هل يمكن ان يقوم الملف بحساب قيمة ال crc لنفسه ويسجلها لمرة واحدة بالملف

وكلما تم تشغيل الملف يقوم بحساب القيمة الحالية دون ان يحدث أي خلاف بالقيمة السابقة ومطابقتها مع القيمة المخزنة سابقا ويبلغني بالتطابق او الإختلاف

معلش غلبتكم معايا

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

#22

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

وشكرا

#23

الفكرة كما قلت هي عمل الـchecksum + المقارنة من ملف خارجي ---> DLL اسهل شئ .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#24

مشكور علي مرورك اخ GM

هل تقصد عمل CHECKSUM للملف التنفيذي أولا

ثم عمل CHECKSUM لنفس الملف عند كل تشغيل بواسطة DLL

ومقارنة النتيجتين

ولكن هل تعتقد ان عمل المقارنة بواسطة DLL أفضل من عملها من داخل البرنامج نفسه ؟؟

وهل يمكن إعتراض ال DLL ومنها من عمل ال CHECKSUM للملف المذكور ؟؟

معلش طول بالك علي إحنا بنتناقش وغن شاء الله نطلع بنتيجة

وآسف علي الإزعاج

#25

لا انا كنت برد على الأخ محمد سيد ....

انت تريد عمل checksum من برنامجك على ملف خارجي ؟؟

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…