hash - एक पैकेट चेकसम/सीआरसी/हैश इंजीनियर को रिवर्स करने की कोशिश कर रहा है




checksum crc (2)

अगर यह सरल एक्सओआर रिश्ते का पालन करता है (चेकसम (ए ^ बी) == चेकसम (ए) ^ चेकसम (बी)) तो एक सरल ब्रूट फोर्स समाधान है!

चित्रण। मान लीजिए कि आपके पास के-बिट चेकसम के साथ 1-बाइट मान है - जहां के वास्तव में कोई फर्क नहीं पड़ता है, इसलिए हम केवल cs (i) के रूप में चेकसम का प्रतिनिधित्व करते हैं।

चरण 1. प्रयोग: सभी शून्य पैकेट के चेकसम सी (-1) का निरीक्षण करें।

0b0000000 => c(-1)

चरण 2. प्रयोग: सभी बाइनरी अनुक्रमों के चेकसमम्स सी (i) को स्थिति 1 में उनके साथ एक एकल के साथ देखें

0b00000001 => c(0)
0b00000010 => c(1)
0b00000100 => c(2)
0b00001000 => c(3)
0b00010000 => c(4)
0b00100000 => c(5)
0b01000000 => c(6)
0b10000000 => c(7)

जीएफ (2) के लिए रैखिक आधार के रूप में चेकसम्स को देखने वाले मान, और एक्सओआर रिलेशनशिप अब आपको किसी भी चेकसम की गणना करने की अनुमति देता है।

अब आप 1 बिट के साथ प्रत्येक बिट स्थिति के लिए चेकसम जोड़कर चेकसम की गणना कर सकते हैं, उदाहरण के लिए मान लें कि आप 0XF3 का चेकसम चाहते हैं जो बाइनरी में 0b11110011 है। जबसे

0b11110011 = (0) + 0x80 + 0x40 + 0x20 + 0x10 + 0x02 + 0x01

फिर एक्सओआर रिश्ते से,

checksum(0b11110011) = c(7) + c(6) + c(5) + c(4) + c(1) + c(0) + c(-1)

यानी आप प्रत्येक बिट के लिए आउटपुट करने जा रहे हैं, बस एक्सओआर-उस बिट के लिए ज्ञात चेकसम जमा करें।

यदि आप इस अभ्यास को करते हैं और आधार वैक्टर के सभी 152 चेकसमों को प्रयोगात्मक रूप से लिखते हैं, तो संभव है कि आप प्रक्रिया में भी एक साधारण पैटर्न को खोज सकें जो बताता है कि चेकसम आधार वैक्टर से कैसे आते हैं। :) यदि ऐसा है तो इसे वापस पोस्ट करना अच्छा लगेगा! (और शायद हमें बताएं कि हम क्या कर रहे हैं?)

मेरे पास पुराना है, अब सीरियल पोर्ट के साथ निर्मित इलेक्ट्रॉनिक डिवाइस नहीं है। मैं इस डिवाइस में इस्तेमाल किए गए डेटा पैकेट सीआरसी / चेकसम / हैश इंजीनियर को रिवर्स करने की कोशिश कर रहा हूं।

उत्सुक आंखों वाला कोई भी व्यक्ति, तेज गणित कौशल जो वहां इस चीज़ को तोड़ने में सक्षम हो सकता है?

यहां मैं अब तक क्या जानता हूं ...

  • प्रत्येक पैकेट हमेशा 21 बाइट्स होता है। सीआरसी / चेकसम / हैश के अंत में डेटा के 1 बाइट्स प्लस 2 बाइट्स
  • इसलिए, यहां कोई लंबाई या हेडर बाइट नहीं हैं। सभी 19 बाइट हैश गणना में शामिल हैं।
  • मेरे पास डिवाइस के साथ डेटा पैकेट की कुछ मात्रा उत्पन्न करने की क्षमता है
  • मेरा पहला विचार यह है कि डेटा पैकेट में कुछ प्रकार की सीआरसी -16 गणना होती है
  • इसलिए मैंने www.cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html में संकेतों को www.cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html
  • सत्यापित किया गया है कि मेरे डेटा पैकेट नमूने ने उपरोक्त वेब लिंक में उल्लिखित "सुपरपोजिशन सिद्धांत" को देखा है। यह इंगित करता है कि उनके पास गणितीय एक्सओआर संबंध है।

  • अच्छा महसूस करने के लिए शुरू किया ... लेकिन फिर उसके बाद फंस गया। एक सीआरसी -16 बहुपद निर्धारित करने में सक्षम नहीं है। एक मजबूत संभावना है कि ये डेटा पैकेट हैंश सीआरसी से संबंधित नहीं हैं, बल्कि कुछ होम ब्रू योजना हैं।

  • रॉस एन विलियम्स द्वारा "सीआरसी त्रुटि जांच एल्गोरिदम के लिए एक दर्दनाक मार्गदर्शिका" के माध्यम से पढ़ें

  • http://www.ross.net/crc/download/crc_v3.txt देखें
  • इसके अलावा आवेदन किया गया: सीआरसी रेवेन - एक रिवर्स इंजीनियरिंग अनुप्रयोग
  • Reveng.sourceforge.net देखें
  • अभी भी कोई भाग्य नहीं ...
  • दुर्भाग्य से, मेरे पास किसी भी डिवाइस स्रोत / बाइनरी कोड तक पहुंच नहीं है

  • फ्लेचर के चेकसम जैसे अन्य हैंश का उपयोग करने के लिए परीक्षणों को भी चलाया गया

मेरे डेटा पैकेट के विभिन्न नमूने यहां दिए गए हैं।

0x47366B2EE00000000000751CEB5F3469543B585E2D
0x47366B2ED00000000000751CEB5F3469543B582A2C
0x47366B2EC80000000000751CEB5F3469543B580B2B
0x47366B2EC40000000000751CEB5F3469543B58BB2A
0x47366B2EC20040000000751CEB5F3469543B58DFE7
0x47366B2EC10000000000751CEB5F3469543B58A328
0x47366B2EC08000000000751CEB5F3469543B584127
0x47366B2EC04000000000751CEB5F3469543B588126
0x47366B2EC02000000000751CEB5F3469543B580525
0x47366B2EC01000000000751CEB5F3469543B580124

कृपया इन डेटा पैकेट के बारे में निम्नलिखित नोट करें ...

  • सीआरसी डेटा पैकेट के अंतिम 2 बाइट्स पर पाया जाता है।
  • यदि मैं एक तर्क विश्लेषक पर बिट्स को देखता हूं, तो मैंने बाइट्स को एमएसबी-प्रथम के रूप में व्यक्त किया है
  • इसलिए, पैकेट 0x47366B2EE00000000000751CEB5F3469543B585E2D बाइनरी में देखा जाता है:
  • 01000111 ............................................. ............ 00101101
  • (0x47) ............................................... ...................... (0x2D)

  • मुझे नहीं पता कि मेरी प्रणाली बड़ी या छोटी एंडियन है, लेकिन काफी निश्चित बाइट एलएसबी-पहले हैं

  • ध्यान दें कि उपर्युक्त 10 डेटा पैकेट नमूने के लिए, प्रत्येक पैकेट 10 बिट स्थितियों के माध्यम से 1 बिट स्थानांतरित होता है। 5 वें पैकेट के अलावा, जहां मुझे 2 बिट्स बदलना पड़ा
  • डेटा बाइट देखें जो डेटा पैकेट के 0x47366B2E भाग का पालन करता है।

  • केवल पैटर्न जो मैं देखता हूं वह प्रत्येक डेटा पैकेट पर एक (2 डी, 2 सी, ...) द्वारा अंतिम बाइट कमी है। (5 वें पैकेट को छोड़कर, जहां मुझे 2 बिट्स बदलना पड़ा)

  • यह अंतिम बाइट अनुक्रम संख्या का कुछ प्रकार नहीं है, क्योंकि मैं उन्हें किसी भी समय एक ही मूल्य के साथ उत्पन्न कर सकता हूं।
  • लेकिन यह संभवतः गणितीय हैश पर एक संकेत देता है।

किसी भी मदद की सराहना की है!


मैंने "एसआरपी 16" नामक एप्लिकेशन के माध्यम से कुछ पैकेट चलाए हैं, जो सीआरसी 16 रॉक्सॉफ्ट पैरामीटर की खोज और प्रदर्शित करता है। आउटपुट निम्नानुसार है:

===== Result parameter sets =====
CRC=$2a2c  Poly=$2817  init=$3141  xorout=$ffff  refin=true   refout=true 
 *** Second data set verified
CRC=$2a2c  Poly=$2817  init=$70f4  xorout=$0000  refin=true   refout=true 
 *** Second data set verified
CRC=$2a2c  Poly=$2817  init=$9bf3  xorout=$0000  refin=false  refout=true 
 *** Second data set verified
CRC=$2a2c  Poly=$2817  init=$da46  xorout=$ffff  refin=false  refout=true 
 *** Second data set verified
CRC=$2a2c  Poly=$4777  init=$1263  xorout=$0000  refin=false  refout=true 
 *** Second data set verified
CRC=$2a2c  Poly=$4777  init=$6f2d  xorout=$0000  refin=true   refout=true 
 *** Second data set verified
CRC=$2a2c  Poly=$4777  init=$a127  xorout=$ffff  refin=true   refout=true 
 *** Second data set verified
CRC=$2a2c  Poly=$4777  init=$dc69  xorout=$ffff  refin=false  refout=true 
 *** Second data set verified
CRC=$2c2a  Poly=$7354  init=$1dab  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$7354  init=$417e  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$7354  init=$a401  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$7354  init=$f8d4  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$8a23  init=$0fa0  xorout=$0000  refin=false  refout=true 
 *** Second data set verified
CRC=$2c2a  Poly=$8a23  init=$3f6a  xorout=$ffff  refin=false  refout=true 
 *** Second data set verified
CRC=$2c2a  Poly=$8a23  init=$cc70  xorout=$0000  refin=true   refout=true 
 *** Second data set verified
CRC=$2c2a  Poly=$8a23  init=$fcba  xorout=$ffff  refin=true   refout=true 
 *** Second data set verified
CRC=$2c2a  Poly=$9656  init=$3460  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$9656  init=$ff4b  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$a644  init=$195b  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$a644  init=$70ca  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$a644  init=$a3e8  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
CRC=$2c2a  Poly=$a644  init=$ca79  xorout=$0000  refin=false  refout=true 
 *** Third  data set verified
===== done =====

शायद इन्हें आज़माएं और देखें कि वे आपके लिए काम करते हैं या नहीं?

सौभाग्य!