2012-09-15 63 views
5

मुझे विंडोज सीई निष्पादन योग्य द्वारा कार्यान्वित इंजीनियर सीआरसी/चेकसम एल्गोरिदम को रिवर्स करने की आवश्यकता है। प्रोप्राइट्री प्रोटोकॉल होने के नाते, यह सीआरसी/चेकसम एल्गोरिदम के बारे में कुछ भी नहीं कहता है। हालांकि, सांत्वना इंटरफ़ेस है कि सही/गणना की चेकसम रिपोर्ट नहीं है और मैं यादृच्छिक बिट्स के साथ अपने खुद के संदेशों का निर्माण कर सकते है, तो संदेश प्रोटोकॉल सही है:विंडोज सीई निष्पादन योग्य द्वारा 16 बिट सीआरसी/चेकसम एल्गोरिदम का उपयोग करने के तरीके?

मैं देखा है कि,

  • संदेश परिवर्तन में एक बिट बदलने पूरी तरह से चेकसम बाइट्स।

  • एल्गोरिदम स्थिति निर्भर है क्योंकि मैंने बिट्स के बाकी बिट्स के साथ विभिन्न संदेश डेटा पोजीशन में कुछ सिंगल 1 बिट संदेश खिलाए हैं और हर समय कंसोल ने विभिन्न चेकसम की सूचना दी है। यदि यह सरल योजक चेकसम था, तो चेकसम समान होता।

मैं आम XOR, LRC, Additive चेकसम एल्गोरिदम, आम सीआरसी बहुआयामी पद (Standerd, CCITT, एक्स-मॉडेम) और के माध्यम से चला [सीआरसी इंजीनियरिंग निबंध रिवर्स] [2] लेकिन दुर्भाग्य से मैं नहीं बात का अनुमान लगाना अतीत जा सकते हैं लागू बहुपद है क्योंकि संदेश प्रकार तय किया गया है इसलिए एकल 1 बिट संदेश नहीं बना सकता है।

मेरे सवालों का:

  1. वहाँ किसी भी सीआरसी/checksum एल्गोरिथ्म गुण है कि मैं अगर एल्गोरिथ्म चेकसम या बहुपद आधारित सीआरसी है निर्धारित करने के लिए गए संदेशों के खिलाफ परीक्षण कर सकते हैं कर रहे हैं?

  2. क्या corrosponding असेंबली निर्देशों के साथ प्रोग्राम disassembly में त्रुटि संदेश से संबंधित कोई तरीका है?

  3. कंसोल पर सही चेकसम की रिपोर्ट करने के पल में डिस्सेप्लोर कोड को डीबग/पिनपॉइंट करने के तरीके क्या हैं? मेमोरी डंप या कुछ?

+0

इसे टैग किया जाना चाहिए [रिवर्स-इंजीनियरिंग] साथ ही, मुझे लगता है। – moooeeeep

+0

"रिवर्स-इंजीनियरिंग" –

उत्तर

4

CRC RevEng आज़माएं। आपके डेटा के साथ कुछ त्वरित प्रयास निष्फल थे, लेकिन मैंने बहुत मेहनत नहीं की। केवल दस संदेश बाइट्स की कोशिश करने पर विचार करें, बल्कि अंतिम आठ और अंतिम छः भी।

इसके अतिरिक्त आप उसी साइट पर most comprehensive list of known CRCs देख सकते हैं जो मुझे पता है।

अद्यतन:

यह अत्यधिक संभावना है कि यह किसी प्रकार की सीआरसी है, या कम से कम GF से अधिक एक रेखीय ऑपरेशन है (2)। इसमें यह संपत्ति है कि सीआरसी के पास है: यदि दो अनुक्रमों में एक ही विशिष्ट है- या फिर उनके सीआरसी के पास एक ही अनन्य-ओएस है। उदाहरण के लिए, आप अपने डेटा से (आम उपसर्ग छोड़ने, हालांकि ध्यान दें कि उपसर्ग या इसके एक हिस्से सहित परिणाम नहीं बदलता है):

00000000000122b5^0000000000022421 = 0000000000030694 
0447080a300130A1^0447080a30023635 = 0000000000030694 

और

0447080a300130A1^0447080a30043A36 = 0000000000050a97 
00000000000122b5^0000000000042822 = 0000000000050a97 

को देखते हुए इस तथ्य को, वहाँ यह निर्धारित करने के बिना चेक मूल्य की गणना करने के लिए एक दिनचर्या बनाने का एक तरीका है कि यह सीआरसी है या सीआरसी पैरामीटर क्या हैं।

सभी एकल संदेशों के लिए 16-बिट चेक मान जेनरेट करें, यानी।संदेश डेटा के छः बाइट्स में एक बिट सेट, बाकी संदेश डेटा शून्य बिट्स के साथ। ये संदेश इस रैखिक क्षेत्र के लिए आधार वैक्टर का एक पूरा सेट हैं। उनमें से 48 हैं। सभी शून्य संदेश के लिए चेक मान भी उत्पन्न करें। 2020 देने वाले सभी शून्यों के साथ आपके पास पहले से ही एक शुरुआत है, अंतिम बिट सेट 22b5 आदि प्रदान करता है। अन्य सभी के साथ सभी शून्य (2020) के लिए विशिष्ट-या चेक मान। अब आपके पास 49 वैल्यू हैं जिनमें से 48 आधार वैक्टर के लिए हैं और एक शून्य वेक्टर के लिए सुधार है (जो सीआरसी और उपसर्ग बाइट्स की पूर्व और पोस्ट कंडीशनिंग के कारण गैर-शून्य होने की संभावना है)। उदाहरण के लिए, अंतिम बिट सेट के साथ आधार वेक्टर के लिए मान 0295 है।

अब आप उन 49 मूल्यों का उपयोग किसी भी छह-बाइट संदेश के चेक मूल्य की गणना करने के लिए कर सकते हैं। उस संदेश में एक के लिए सेट की गई सभी संबंधित बिट्स के लिए विशेष-या मूल्य। एक्सक्लूसिव- या शून्य के लिए चेक वैल्यू के साथ। नतीजा उस संदेश के लिए चेक वैल्यू होगा।

+0

के साथ "एल्गोरिदम" टैग को प्रतिस्थापित किया गया है, मुझे पिछले पैरा के बाद कुछ मदद की ज़रूरत है, क्या आप कृपया विस्तार से बता सकते हैं, क्या मुझे बिट मान द्वारा चेक मानों की लुकअप टेबल रखने की आवश्यकता है? Checksum.txt में पहले 5 संदेशों के लिए आधार वेक्टर यहां दिया गया है; अंतिम बिट सेट, दूसरा अंतिम बिट सेट और इतने पर ... (1): 2020^22b5 = 0295 (2): 2020^2421 = 0401 (3): 2020^2822 = 0802 (4): 2020^3024 = 1004 (5): 2020^0028 = 2008 –

+0

हां। आपको 48 चेक मानों की एक तालिका की आवश्यकता है, प्रत्येक बिट स्थिति के लिए एक। जब आप संदेश में 1 बिट्स के अनुरूप उस तालिका में प्रविष्टियों को अनन्य या एक साथ जोड़ते हैं, तो आप उत्तर के लिए एक और अनन्य-या 0x2020 के साथ करते हैं। –