Cryptographic/Compression Algorithms
Last updated
Last updated
AWS हैकिंग सीखें और अभ्यास करें:HackTricks प्रशिक्षण AWS रेड टीम विशेषज्ञ (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks प्रशिक्षण GCP रेड टीम विशेषज्ञ (GRTE)
यदि आप किसी कोड में शिफ्ट राइट और लेफ्ट, ज़ोर्स और कई अंकगणितीय कार्यों का उपयोग करते हैं, तो यह उचित है कि यह किसी रहस्यमय एल्गोरिदम का अंकलन है। यहां कुछ तरीके दिखाए जाएंगे जिनसे प्रत्येक चरण को उलटने की आवश्यकता न होने पर भी उपयोग किए जाने वाले एल्गोरिदम की पहचान की जा सकती है।
CryptDeriveKey
यदि इस फ़ंक्शन का उपयोग किया गया है, तो आप दूसरे पैरामीटर के मान की जांच करके पता लगा सकते हैं कि कौन सा एल्गोरिदम उपयोग किया जा रहा है:
यहां संभावित एल्गोरिदमों और उनके सौपने गए मानों की सूची देखें: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
एक दिए गए डेटा बफर को संकुचित और विस्तारित करता है।
CryptAcquireContext
दस्तावेज़ से: CryptAcquireContext फ़ंक्शन का उपयोग एक विशेष एन्क्रिप्टिक सेवा प्रदाता (CSP) के भीतर एक विशेष कुंजी संदृश्य को प्राप्त करने के लिए किया जाता है। इस वापसी हैंडल का उपयोग क्रिप्टोएपीआई के कॉल में किया जाता है जो चयनित CSP का उपयोग करते हैं।
CryptCreateHash
डेटा स्ट्रीम का हैशिंग प्रारंभ करता है। यदि इस फ़ंक्शन का उपयोग किया गया है, तो आप दूसरे पैरामीटर के मान की जांच करके पता लगा सकते हैं कि कौन सा एल्गोरिदम उपयोग किया जा रहा है:
यहां संभावित एल्गोरिदमों और उनके सौपने गए मानों की सूची देखें: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
कभी-कभी किसी विशेष और अद्वितीय मान का उपयोग करने की आवश्यकता होने के कारण किसी एल्गोरिदम की पहचान करना वास्तव में आसान होता है।
यदि आप पहले स्थिर कोण्स्टेंट की खोज करते हैं तो आपको यह मिलता है:
इसलिए, आप मान सकते हैं कि डिकॉम्पाइल किया गया फ़ंक्शन एक sha256 कैलकुलेटर है। आप अन्य कोण्स्टेंट की भी खोज कर सकते हैं और आपको (संभावित है) वही परिणाम मिलेगा।
यदि कोड में कोई महत्वपूर्ण स्थिर नहीं है तो यह .डेटा खंड से जानकारी लोड कर रहा हो सकता है। आप उस डेटा तक पहुंच सकते हैं, पहले डवार्ड को समूहित करें और उसे गूगल में खोजें जैसा कि हमने पहले खंड में किया है:
इस मामले में, यदि आप 0xA56363C6 की खोज करते हैं तो आपको पाया जा सकता है कि यह AES एल्गोरिदम के सारणियों से संबंधित है।
प्रारंभिक चरण/: 0x00 से 0xFF (कुल 256बाइट, 0x100) तक के मानों का एक सारणी बनाता है। इस सारणी को सामान्यत: सब्स्टीट्यूशन बॉक्स (या एसबॉक्स) कहा जाता है।
स्क्रैम्बलिंग चरण: पहले बनाई गई सारणी के माध्यम से लूप करेगा (फिर फिर 0x100 इटरेशन का लूप) और प्रत्येक मान को आधा-रैंडम बाइट के साथ संशोधित करेगा। इस आधा-रैंडम बाइट्स बनाने के लिए, RC4 कुंजी का उपयोग किया जाता है। RC4 कुंजियाँ 1 से 256 बाइट तक हो सकती हैं, हालांकि आमतौर पर यह सुझाव दिया जाता है कि यह 5 बाइट से ऊपर हो। सामान्यत: RC4 कुंजियाँ 16 बाइट लंबी होती हैं।
XOR चरण: अंत में, सादा-पाठ या साइफरटेक्स्ट को पहले बनाए गए मानों के साथ XOR किया जाता है। एन्क्रिप्ट और डिक्रिप्ट करने के लिए फ़ंक्शन समान होता है। इसके लिए, बनाए गए 256 बाइट्स के माध्यम से एक लूप कितनी बार भी आवश्यक होगा उसमें किया जाएगा। इसे आमतौर पर एक डिकॉम्पाइल कोड में %256 (मॉड 256) के साथ पहचाना जाता है।
एक RC4 को पहचानने के लिए एक डिसएसेंबली/डिकॉम्पाइल कोड में 2 लूपों की आकार 0x100 (कुंजी का उपयोग करके) की जांच करें और फिर 256 मानों के साथ इनपुट डेटा का XOR करें जो पहले 2 लूपों में बनाए गए होंगे, शायद एक %256 (मॉड 256) का उपयोग करके
सब्स्टीट्यूशन बॉक्स और लुकअप टेबल का उपयोग
विशिष्ट लुकअप टेबल मानों (स्थिर) का उपयोग करने के लिए AES को पहचानना संभव है। _ध्यान दें कि स्थिर कोण्स्टेंट बाइनरी में स्टोर किया जा सकत
सिमेट्रिक एल्गोरिदम की तुलना में अधिक जटिल
कोई स्थिर मान नहीं है! (कस्टम अंमलन को निर्धारित करना कठिन होता है)
KANAL (एक क्रिप्टो विश्लेषक) RSA पर संकेत दिखाने में विफल होता है क्योंकि यह स्थिर मानों पर निर्भर है।
पंक्ति 11 (बाएं) में +7) >> 3
है जो पंक्ति 35 (दाएं) में है: +7) / 8
पंक्ति 12 (बाएं) में यह जांच की जा रही है कि modulus_len < 0x040
और पंक्ति 36 (दाएं) में यह जांच की जा रही है कि inputLen+11 > modulusLen
3 फ़ंक्शन: आरंभ, अपडेट, फाइनल
समान आरंभ फ़ंक्शन
आरंभ
आप इन दोनों को स्थिर मानों की जांच करके पहचान सकते हैं। ध्यान दें कि sha_init में 1 स्थिर मान है जो MD5 में नहीं है:
MD5 ट्रांसफ़ॉर्म
अधिक स्थिर मानों का उपयोग करने का ध्यान दें
डेटा में दुर्घटनात्मक परिवर्तन खोजने के लिए इसका कार्य छोटा और अधिक कुशल है
लुकअप तालिकाएँ उपयोग करता है (ताकि आप स्थिर मानों की पहचान कर सकें)
लुकअप तालिका स्थिर मानों की जांच करें:
एक CRC हैश एल्गोरिदम इस तरह दिखता है:
पहचानने योग्य स्थिर मान नहीं हैं
आप पायथन में एल्गोरिदम लिखने का प्रयास कर सकते हैं और ऑनलाइन समान चीजों की खोज कर सकते हैं
ग्राफ बहुत बड़ा है:
इसे पहचानने के लिए 3 तुलनाएँ जांचें: