hacktricks/crypto-and-stego/cryptographic-algorithms
2024-07-19 04:55:01 +00:00
..
README.md Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb 2024-07-18 18:53:16 +00:00
unpacking-binaries.md Translated ['crypto-and-stego/cryptographic-algorithms/unpacking-binarie 2024-07-19 04:55:01 +00:00

यांत्रिक/संपीडन एल्गोरिदम

यांत्रिक/संपीडन एल्गोरिदम

{% hint style="success" %} AWS हैकिंग सीखें और अभ्यास करें:HackTricks प्रशिक्षण AWS रेड टीम विशेषज्ञ (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks प्रशिक्षण GCP रेड टीम विशेषज्ञ (GRTE)

हैकट्रिक्स का समर्थन करें
{% endhint %}

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

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

API फ़ंक्शन

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 एल्गोरिदम के सारणियों से संबंधित है

RC4 (सममित्र एल्गोरिदम)

विशेषताएँ

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

{% hint style="info" %} एक RC4 को पहचानने के लिए एक डिसएसेंबली/डिकॉम्पाइल कोड में 2 लूपों की आकार 0x100 (कुंजी का उपयोग करके) की जांच करें और फिर 256 मानों के साथ इनपुट डेटा का XOR करें जो पहले 2 लूपों में बनाए गए होंगे, शायद एक %256 (मॉड 256) का उपयोग करके {% endhint %}

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

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

XOR चरण:

AES (सममित्र एल्गोरिदम)

विशेषताएँ

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

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

विशेषताएँ

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

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

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

MD5 & SHA (हैश)

विशेषताएँ

  • 3 फ़ंक्शन: आरंभ, अपडेट, फाइनल
  • समान आरंभ फ़ंक्शन

पहचान

आरंभ

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

MD5 ट्रांसफ़ॉर्म

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

CRC (हैश)

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

पहचान

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

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

APLib (संकुचन)

विशेषताएँ

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

पहचान

ग्राफ बहुत बड़ा है:

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