.. | ||
README.md | ||
unpacking-binaries.md |
क्रिप्टोग्राफिक/संपीड़न एल्गोरिदम
क्रिप्टोग्राफिक/संपीड़न एल्गोरिदम
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप चाहते हैं कि आपकी कंपनी HackTricks में विज्ञापित हो? या क्या आप PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने की इच्छा रखते हैं? सदस्यता योजनाएं की जांच करें!
- खोजें The PEASS Family, हमारा विशेष NFT संग्रह,
- प्राप्त करें आधिकारिक PEASS & HackTricks swag
- शामिल हों 💬 Discord समूह या टेलीग्राम समूह में या मुझे Twitter 🐦@carlospolopm** का** अनुसरण करें।**
- अपने हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके hacktricks repo और hacktricks-cloud repo को
एल्गोरिदमों की पहचान
यदि आप एक कोड में समाप्त होते हैं जिसमें शिफ्ट राइट और लेफ्ट, एक्सओर और कई अंकगणितीय आपरेशन का उपयोग किया जाता है, तो यह बहुत संभावित है कि यह एक क्रिप्टोग्राफिक एल्गोरिदम का अमल है। यहां इसके कुछ तरीके दिखाए जाएंगे जिनसे आपको प्रत्येक चरण को उलटने की आवश्यकता नहीं होती है, एल्गोरिदम की पहचान कर सकते हैं।
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
कोड स्थिर
कभी-कभी एक एल्गोरिदम की पहचान करना वास्तव में आसान होता है क्योंकि इसे एक विशेष और अद्वितीय मान का उपयोग करने की आवश्यकता होती है।
यदि आप पहले स्थिर कोण्स्टेंट की खोज करते हैं, तो आपको यह मिलता है:
इसलिए, आप मान सकते हैं कि डिकंपाइल किए गए फ़ंक्शन एक sha256 कैलकुलेटर है।
आप अन्य स्थिरों में से किसी भी को खोज सकते हैं और आप (संभवतः) एक ही परिणाम प्राप्त करेंगे।
डेटा जानकारी
यदि कोड में कोई महत्वपूर्ण स्थिर नहीं है, तो शायद वह **.data सेक्शन से जानकारी लोड कर रहा ह
प्रारंभिक चरण / सबस्टिट्यूशन बॉक्स: (ध्यान दें कि 256 को गिनती के रूप में उपयोग किया जाता है और कैसे प्रत्येक स्थान पर 256 वर्णों में 0 लिखा जाता है)
घुमावदार चरण:
XOR चरण:
AES (सममित्रीय गुप्त)
विशेषताएं
- सबस्टिट्यूशन बॉक्स और लुकअप तालिकाओं का उपयोग
- विशेष लुकअप तालिका मानों (स्थिरांक) के उपयोग के कारण AES को पहचानना संभव है। ध्यान दें कि स्थिरांक बाइनरी में संग्रहीत किया जा सकता है या गतिशील रूप से बनाया जा सकता है।
- गुप्तीकरण कुंजी को 16 से विभाज्य (आमतौर पर 32B) होना चाहिए और आमतौर पर 16B का एक IV उपयोग किया जाता है।
SBox स्थिरांक
Serpent (सममित्रीय गुप्त)
विशेषताएं
- इसे उपयोग करने वाले कुछ मैलवेयर को ढूंढ़ना दुर्लभ है लेकिन उदाहरण हैं (Ursnif)
- इसकी लंबाई के आधार पर यह निर्धारित करना सरल है कि क्या एक एल्गोरिदम Serpent है या नहीं (अत्यंत लंबा फ़ंक्शन)
पहचान
निम्नलिखित छवि में ध्यान दें कि स्थिरांक 0x9E3779B9 का उपयोग किया जाता है (ध्यान दें कि यह स्थिरांक अन्य क्रिप्टो एल्गोरिदम जैसे TEA -Tiny Encryption Algorithm द्वारा भी उपयोग किया जाता है)।
इसके अलावा, लूप का आकार (132) और डिसअसेंबली निर्देशों और कोड उदाहरण में XOR संख्या की संख्या का ध्यान दें:
जैसा कि पहले कहा गया था, इस कोड को किसी भी डीकंपाइलर में एक बहुत लंबी फ़ंक्शन के रूप में देखा जा सकता है क्योंकि इसमें जंप नहीं होते हैं। डीकंपाइल किए गए कोड का निम्नलिखित रूप हो सकता है:
इसलिए, इस एल्गोरिदम की पहचान करना संभव है मैजिक नंबर और प्रारंभिक XOR की जांच करके, बहुत लंबी फ़ंक्शन देखकर और कुछ निर्देशों की एक अमलीकरण (जैसे 7 बार बाएं घुमाएं और 22 बार बाएं घुमाएं) के साथ कुछ इंश्यों की तुलना करके।
RSA (असममित्रीय गुप्त)
विशेषताएं
- सममित्रीय एल्गोरिदमों से अधिक जटिल
- कोई स्थिरांक नहीं हैं! (कस्टम अमलीकरण को पहचानना कठिन होता है)
- KANAL (एक क्रिप्टो विश्लेषक) RSA पर संकेत नहीं दिखा सकता क्योंकि इसका आधार स्थिरांकों पर निर्भर होता है।
तुलना द्वारा पहचान
- पंक्ति 11 (बाएं) में
+7) >> 3
है जो पंक्ति 35 (दाएं) में है:+7) / 8
- पंक्ति 12 (बाएं) में यह जांच रही है कि
modulus_len < 0x040
और पंक्ति 36 (दाएं) में यह जांच रही है किinputLen+11 > modulusLen
MD5 & SHA (हैश)
विशेषताएं
- 3 फ़ंक्शन: आरंभ, अद्यतन, अंतिम
- समान आरंभ फ़ंक्शन
पहचान
आरंभ
आप दोनों को स्थिरांकों की जांच करके पहचान सकते हैं। ध्यान दें कि sha_init में MD5 के पास एक स्थिरांक है जो नहीं है:
MD5 Transform
अधिक स्थिरांकों का उपयोग करने का ध्यान दें
CRC (हैश)
- डेटा में दुर्घटनापूर्ण परिवर्तन ढूंढ़ने के लिए इसका कार्य करने के लिए छोटा और अधिक कुशल
- लुकअप तालिकाओं का उपयोग करता है (इसलिए आप स्थिरांकों की पहचान कर सकते हैं)
पहचान
लुकअप तालिका स्थिरांक की जांच करें:
CRC हैश एल्गोरिदम