Cryptographic/Compression Algorithms

tip

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

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

Identifying Algorithms

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

API functions

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

Code constants

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

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

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

data info

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

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

RC4 (Symmetric Crypt)

Characteristics

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

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

tip

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

Initialization stage/Substitution Box: (गिनती के रूप में उपयोग किए गए 256 संख्या और 256 वर्णों के प्रत्येक स्थान पर 0 कैसे लिखा गया है, पर ध्यान दें)

Scrambling Stage:

XOR Stage:

AES (Symmetric Crypt)

Characteristics

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

SBox constants

Serpent (Symmetric Crypt)

Characteristics

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

Identifying

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

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

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

RSA (Asymmetric Crypt)

Characteristics

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

Identifying by comparisons

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

MD5 & SHA (hash)

Characteristics

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

Identify

Init

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

MD5 Transform

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

CRC (hash)

  • छोटा और अधिक कुशल क्योंकि इसका कार्य डेटा में आकस्मिक परिवर्तनों को ढूंढना है
  • स्थिरांकों की पहचान करने के लिए lookup tables का उपयोग करता है

Identify

lookup table constants की जांच करें:

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

APLib (Compression)

Characteristics

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

Identify

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

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

tip

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

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