تحديد CRC خوارزمية من البيانات + CRC - تطبيق المضمنة.
سؤال
ولدي مجموعة من البيانات التي تحميها اختبارية 16BIT أنني بحاجة إلى تصحيح. من المعروف أن مواقع الاختباري، المناطق بالضبط يتم حسابها على وخوارزمية الدقيقة المستخدمة لحساب لهم ليست كذلك. 16BIT، LSB أولا. وأظن انها نوع من CRC 16BIT، ولكن لم أكن قادرة على العثور على شفرة يتم فعلا حساب اختبارية.
مثال:
00 4E00FFFF26EC14091E00A01830393630
10 30313131313030393030363030313030
20 30303131313030393030363030313030
30 30303131313030393030363030313030
40 3030FFFF225E363436304D313037**0CE0**
50 64000000000000008080808080800000
60 00000000**BE6E**FC01E001EB0013010500
يتم تخزين واختبارية في 4E و 64. أنا لا أعرف إذا calcuated أنها بدءا من الإزاحة في الكلمة الأولى في بداية كل مقطع البيانات أو البدء بعد ذلك، أو على مجموعة كاملة. لقد حاول عدد من الخوارزميات CRC المشتركة ومتعددو الحدود مع أي حظ. لا توجد مراجع أو المواصفات المتاحة لهذا التطبيق.
وهنا هو قسم بيانات آخر مع مراكز التأهيل المجتمعي مختلفة لغرض المقارنة.
00 4E00FFFF26C014091600A01030393132
10 30313131313030393030313230313030
20 30303131313030393030313230313030
30 30303131313030393030313230313030
40 3030FFFF225E343231324F313044**8348**
50 64000000000000008080808080800000
60 00000000**72F8**E001EB00130105000E01
وسؤالي هو، هل يستطيع أحد تحديد خوارزمية؟ هل هناك أي طريقة لحساب متعدد الحدود CRC وعوامل أخرى من البيانات وCRC؟
وشكرا!
وتحرير:
وكشف البحث التفكيك بلدي لCRC16 مشترك متعدد الحدود 0xA001 هذه الوظيفة:
34F86 ; =============== S U B R O U T I N E =======================================
34F86
34F86
34F86 Possible_Checksum: ; CODE XREF: MEM_EXT_4:00034FEEP
34F86 ; MEM_EXT_4:0003503AP ...
34F86 mov [-r0], r9 ; Move Word
34F88 mov r4, r12 ; Move Word
34F8A mov r5, r13 ; Move Word
34F8C shr r4, #14 ; Shift Right
34F8E shl r5, #2 ; Shift Left
34F90 or r5, r4 ; Logical OR
34F92 mov r4, r12 ; Move Word
34F94 mov DPP0, r5 ; Move Word
34F98 and r4, #3FFFh ; Logical AND
34F9C movb rl3, [r4] ; Move Byte
34F9E mov DPP0, #4 ; Move Word
34FA2 movbz r9, rl3 ; Move Byte Zero Extend
34FA4 mov r15, #0 ; Move Word
34FA6
34FA6 loc_34FA6: ; CODE XREF: MEM_EXT_4:00034FC8j
34FA6 mov r4, [r14] ; Move Word
34FA8 xor r4, r9 ; Logical Exclusive OR
34FAA and r4, #1 ; Logical AND
34FAC jmpr cc_Z, loc_34FBA ; Relative Conditional Jump
34FAE mov r4, [r14] ; Move Word
34FB0 shr r4, #1 ; Shift Right
34FB2 xor r4, #0A001h ; Logical Exclusive OR
34FB6 mov [r14], r4 ; Move Word
34FB8 jmpr cc_UC, loc_34FC0 ; Relative Conditional Jump
34FBA ; ---------------------------------------------------------------------------
34FBA
34FBA loc_34FBA: ; CODE XREF: MEM_EXT_4:00034FACj
34FBA mov r4, [r14] ; Move Word
34FBC shr r4, #1 ; Shift Right
34FBE mov [r14], r4 ; Move Word
34FC0
34FC0 loc_34FC0:
المحلول
وهذا الرمز الذي نشر من loc_34FA6 أسفل هو في الأساس ما يلي:
unsigned short
crc16_update(unsigned short crc, unsigned char nextByte)
{
crc ^= nextByte;
for (int i = 0; i < 8; ++i) {
if (crc & 1)
crc = (crc >> 1) ^ 0xA001;
else
crc = (crc >> 1);
}
return crc;
}
وهذا هو CRC-16 مع متعدد الحدود 0xA001. بمجرد معرفة مجموعة من البيانات التي تطبق CRC-16، يمكنك تهيئة CRC إلى 0xFFFF والدعوة هذه الوظيفة لكل بايت في التسلسل. تخزين قيمة الإرجاع وتمريرها مرة أخرى في المرة القادمة من خلال. القيمة التي تم إرجاعها في نهاية الخاص بك هو النهائي CRC.
ولست متأكدا ما يقوم به مقدمة ...
نصائح أخرى
وبصورة أعم، وهي جزء من مفهوم CRC هو أن عند حساب CRC بعض ملف البيانات، ومن ثم إلحاق CRC في نهاية المطاف، تحصل على ملف من هو CRC هو بعض القيمة التي تعتمد على طول ملف، ولكن ليس انها المحتويات. (بالنسبة لبعض الخوارزميات لجنة حقوق الطفل، فإنه لا يعتمد حتى على طول الملف.)
وهكذا، إذا كنت تشك في التطبيق الذي تحاول عكس مهندس يستخدم يقول CRC16، وكان لديك البرنامج الذي يحسب CRC16، وكان لديك عينات متعددة من نفس الطول، مجرد حساب CRC16 من تلك الملفات البيانات (والتي تشمل الاختباري). إذا كان الأمر مرة أخرى مع البيانات الاختباري نفسها في كل مرة (لملفات من نفس الطول)، ثم يجب أن تحتوي على الاختباري CRC باستخدام نفس العرض ومتعدد الحدود.
وعلى سبيل المثال، كان لي مرة واحدة لعكس مهندس بعض الملفات حيث يعتقد المطور كان يجري ذكية عن طريق تغيير خوارزمية CRC32 عن طريق تغيير اثنين من الثوابت. لم يكن لديك للعثور على رمز الكائن الذي تحقق الاختباري، تفكيك، وبعد ذلك أنها من أصل الرقم بالطريقة الصعبة. هذا اختبار بسيط مسمر.