क्रिप्टोग्राफिक/संपीड़न एल्गोरिदम

Reading time: 7 minutes

क्रिप्टोग्राफिक/संपीड़न एल्गोरिदम

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

एल्गोरिदम की पहचान करना

यदि आप एक कोड में शिफ्ट दाएं और बाएं, XOR और कई अंकगणितीय संचालन का उपयोग करते हैं, तो यह अत्यधिक संभव है कि यह एक क्रिप्टोग्राफिक एल्गोरिदम का कार्यान्वयन है। यहाँ कुछ तरीके दिखाए जाएंगे जिससे आप बिना प्रत्येक चरण को उलटने की आवश्यकता के एल्गोरिदम की पहचान कर सकते हैं

API फ़ंक्शन

CryptDeriveKey

यदि इस फ़ंक्शन का उपयोग किया गया है, तो आप दूसरे पैरामीटर के मान की जांच करके यह पता लगा सकते हैं कि कौन सा एल्गोरिदम उपयोग किया जा रहा है:

संभावित एल्गोरिदम और उनके असाइन किए गए मानों की तालिका यहाँ देखें: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

RtlCompressBuffer/RtlDecompressBuffer

एक दिए गए डेटा बफर को संकुचित और अनसंकुचित करता है।

CryptAcquireContext

दस्तावेज़ों से: CryptAcquireContext फ़ंक्शन का उपयोग एक विशेष कुंजी कंटेनर के लिए हैंडल प्राप्त करने के लिए किया जाता है जो एक विशेष क्रिप्टोग्राफिक सेवा प्रदाता (CSP) के भीतर है। यह लौटाया गया हैंडल उन CryptoAPI फ़ंक्शनों में कॉल करने के लिए उपयोग किया जाता है जो चयनित CSP का उपयोग करते हैं।

CryptCreateHash

डेटा के एक स्ट्रीम का हैशिंग शुरू करता है। यदि इस फ़ंक्शन का उपयोग किया गया है, तो आप दूसरे पैरामीटर के मान की जांच करके यह पता लगा सकते हैं कि कौन सा एल्गोरिदम उपयोग किया जा रहा है:


संभावित एल्गोरिदम और उनके असाइन किए गए मानों की तालिका यहाँ देखें: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

कोड स्थिरांक

कभी-कभी एक एल्गोरिदम की पहचान करना वास्तव में आसान होता है क्योंकि इसे एक विशेष और अद्वितीय मान का उपयोग करने की आवश्यकता होती है।

यदि आप Google में पहले स्थिरांक की खोज करते हैं, तो आपको यह मिलता है:

इसलिए, आप मान सकते हैं कि डिकंपाइल किया गया फ़ंक्शन एक sha256 कैलकुलेटर है।
आप अन्य स्थिरांकों में से किसी की भी खोज कर सकते हैं और आपको (संभवतः) वही परिणाम प्राप्त होगा।

डेटा जानकारी

यदि कोड में कोई महत्वपूर्ण स्थिरांक नहीं है, तो यह .data सेक्शन से जानकारी लोड कर रहा हो सकता है
आप उस डेटा तक पहुँच सकते हैं, पहले DWORD को समूहित करें और इसे Google में खोजें जैसा कि हमने पिछले अनुभाग में किया था:

इस मामले में, यदि आप 0xA56363C6 की खोज करते हैं, तो आप देख सकते हैं कि यह AES एल्गोरिदम की तालिकाओं से संबंधित है।

RC4 (समानांतर क्रिप्ट)

विशेषताएँ

यह 3 मुख्य भागों में विभाजित है:

  • आरंभिक चरण/: 0x00 से 0xFF (कुल 256 बाइट, 0x100) के मानों की एक तालिका बनाता है। इस तालिका को सामान्यतः सब्स्टिट्यूशन बॉक्स (या SBox) कहा जाता है।
  • स्क्रैम्बलिंग चरण: पहले बनाई गई तालिका के माध्यम से लूप करेगा (0x100 पुनरावृत्तियों का लूप, फिर से) प्रत्येक मान को सेमी-रैंडम बाइट्स के साथ संशोधित करेगा। इन सेमी-रैंडम बाइट्स को बनाने के लिए, RC4 कुंजी का उपयोग किया जाता है। RC4 कुंजी की लंबाई 1 से 256 बाइट के बीच हो सकती है, हालाँकि आमतौर पर इसे 5 बाइट से अधिक होना अनुशंसित है। सामान्यतः, RC4 कुंजी 16 बाइट लंबी होती है।
  • XOR चरण: अंततः, प्लेन-टेक्स्ट या सिफरटेक्स को पहले बनाए गए मानों के साथ XOR किया जाता है। एन्क्रिप्ट और डिक्रिप्ट करने के लिए फ़ंक्शन वही होता है। इसके लिए, बनाए गए 256 बाइट्स के माध्यम से लूप किया जाएगा जितनी बार आवश्यक हो। इसे आमतौर पर डिकंपाइल किए गए कोड में %256 (mod 256) के साथ पहचाना जाता है।

note

डिस्सेम्बली/डिकंपाइल किए गए कोड में RC4 की पहचान करने के लिए, आप 0x100 के आकार के 2 लूप की जांच कर सकते हैं (कुंजी के उपयोग के साथ) और फिर इन 2 लूप में पहले बनाए गए 256 मानों के साथ इनपुट डेटा का XOR संभवतः %256 (mod 256) का उपयोग करते हुए।

आरंभिक चरण/सब्स्टिट्यूशन बॉक्स: (गिनती के रूप में उपयोग किए गए 256 संख्या और 256 वर्णों के प्रत्येक स्थान पर 0 कैसे लिखा गया है, पर ध्यान दें)

स्क्रैम्बलिंग चरण:

XOR चरण:

AES (समानांतर क्रिप्ट)

विशेषताएँ

  • सब्स्टिट्यूशन बॉक्स और लुकअप तालिकाओं का उपयोग
  • विशिष्ट लुकअप तालिका मानों (स्थिरांक) के उपयोग के कारण AES को पहचानना संभव है। _ध्यान दें कि स्थिरांक को बाइनरी में या डायनामिकली स्टोर किया जा सकता है।
  • एन्क्रिप्शन कुंजी को 16 से भाग दिया जाना चाहिए (आमतौर पर 32B) और आमतौर पर 16B का IV उपयोग किया जाता है।

SBox स्थिरांक

सर्पेंट (समानांतर क्रिप्ट)

विशेषताएँ

  • इसे उपयोग करने वाले कुछ मैलवेयर मिलना दुर्लभ है लेकिन इसके उदाहरण हैं (Ursnif)
  • इसकी लंबाई (अत्यधिक लंबा फ़ंक्शन) के आधार पर यह निर्धारित करना सरल है कि एल्गोरिदम सर्पेंट है या नहीं।

पहचानना

अगली छवि में ध्यान दें कि स्थिरांक 0x9E3779B9 का उपयोग किया गया है (ध्यान दें कि यह स्थिरांक अन्य क्रिप्टो एल्गोरिदम जैसे TEA -Tiny Encryption Algorithm द्वारा भी उपयोग किया जाता है)।
लूप का आकार (132) और डिस्सेम्बली निर्देशों में और कोड उदाहरण में XOR संचालन की संख्या पर भी ध्यान दें:

जैसा कि पहले उल्लेख किया गया था, इस कोड को किसी भी डिकंपाइलर के अंदर एक बहुत लंबे फ़ंक्शन के रूप में देखा जा सकता है क्योंकि इसके अंदर कोई कूद नहीं है। डिकंपाइल किया गया कोड निम्नलिखित की तरह दिख सकता है:

इसलिए, आप जादुई संख्या और प्रारंभिक XORs की जांच करके इस एल्गोरिदम की पहचान कर सकते हैं, एक बहुत लंबे फ़ंक्शन को देख सकते हैं और कुछ निर्देशों की तुलना कर सकते हैं लंबे फ़ंक्शन के साथ एक कार्यान्वयन (जैसे 7 द्वारा बाएं शिफ्ट और 22 द्वारा बाएं घुमाना)।

RSA (असमानांतर क्रिप्ट)

विशेषताएँ

  • समानांतर एल्गोरिदम की तुलना में अधिक जटिल
  • कोई स्थिरांक नहीं! (कस्टम कार्यान्वयन को निर्धारित करना कठिन है)
  • KANAL (एक क्रिप्टो विश्लेषक) RSA पर संकेत दिखाने में विफल रहता है क्योंकि यह स्थिरांकों पर निर्भर करता है।

तुलना द्वारा पहचानना

  • लाइन 11 (बाएं) में +7) >> 3 है जो लाइन 35 (दाएं) में समान है: +7) / 8
  • लाइन 12 (बाएं) यह जांच रही है कि modulus_len < 0x040 और लाइन 36 (दाएं) यह जांच रही है कि inputLen+11 > modulusLen

MD5 & SHA (हैश)

विशेषताएँ

  • 3 फ़ंक्शन: Init, Update, Final
  • समान प्रारंभिक फ़ंक्शन

पहचानें

Init

आप स्थिरांकों की जांच करके दोनों की पहचान कर सकते हैं। ध्यान दें कि sha_init में 1 स्थिरांक है जो MD5 में नहीं है:

MD5 Transform

अधिक स्थिरांकों के उपयोग पर ध्यान दें

CRC (हैश)

  • छोटा और अधिक कुशल क्योंकि इसका कार्य डेटा में आकस्मिक परिवर्तनों को खोजना है
  • लुकअप तालिकाओं का उपयोग करता है (इसलिए आप स्थिरांकों की पहचान कर सकते हैं)

पहचानें

लुकअप तालिका स्थिरांक की जांच करें:

एक CRC हैश एल्गोरिदम इस तरह दिखता है:

APLib (संपीड़न)

विशेषताएँ

  • पहचानने योग्य स्थिरांक नहीं
  • आप एल्गोरिदम को पायथन में लिखने और ऑनलाइन समान चीजों की खोज करने का प्रयास कर सकते हैं

पहचानें

ग्राफ़ काफी बड़ा है:

इसे पहचानने के लिए 3 तुलना की जांच करें:

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें