
cobaltstrike 4.5 संस्करण क्रैक/हैक, checksum8 विशेषता हटाना, BeaconEye को बायपास करना, गलत पथ लीक stage को ठीक करना, TOTP द्वि-कारक प्रमाणीकरण जोड़ना, CVE-2022-39197 आदि को ठीक करना
cobaltstrike4.5 संस्करण क्रैक, checksum8 सुविधा हटाना, BeaconEye को बायपास करना, गलत पथ से stage लीक को ठीक करना, TOTP दो-कारक प्रमाणीकरण जोड़ना, उपयोगकर्ता नाम एन्क्रिप्शन प्रदर्शन जोड़ना, 4.5 संस्करण में foreign डेरिवेशन बग को ठीक करना, क्लाइंट कॉन्फ़िगरेशन फ़ाइल नाम बदलना आदि
cobalt strike4.5 क्रैक
cobaltstrike4.5 क्रैक
[TOC]
यह उपकरण और लेख सामग्री केवल सुरक्षा अनुसंधान के लिए है, उपयोगकर्ता इस उपकरण और लेख सामग्री के उपयोग से उत्पन्न सभी कानूनी और संबंधित जिम्मेदारियों को वहन करेगा! लेखक कोई कानूनी जिम्मेदारी नहीं लेता है! यदि आप इस उपकरण और लेख सामग्री का उपयोग करते समय कोई अवैध कार्य करते हैं, तो आपको स्वयं परिणाम भुगतने होंगे, हम कोई कानूनी या संयुक्त जिम्मेदारी नहीं लेंगे, अन्यथा कृपया इस उपकरण को स्थापित या उपयोग न करें। आपका उपयोग व्यवहार या इस समझौते को स्वीकार करने का कोई अन्य स्पष्ट या निहित तरीका यह माना जाएगा कि आपने इस समझौते को पढ़ लिया है और इसके बाध्यकारी से सहमत हैं। सुरक्षा अनुसंधान के लिए इस उपकरण का उपयोग करते समय, आपको यह सुनिश्चित करना चाहिए कि यह व्यवहार कानूनों और विनियमों का अनुपालन करता है, और आपने पर्याप्त प्राधिकरण प्राप्त कर लिया है। कृपया अनधिकृत लक्ष्यों पर उपयोग न करें।
हाँ, मैं वापस आ गया हूँ, मूल cobaltstrike4.4_cdf जारी रखते हुए: https://github.com/lovechoudoufu/about_cobaltstrike4.4_cdf इस बार 4.5 संस्करण। पिछला 4.4 github से हटा दिया गया था, संभवतः यह प्रोजेक्ट भी जल्द ही हटा दिया जाएगा।
सुझाव: टेलीग्राम समूह में शामिल हों, बाद के अपडेट और प्रोजेक्ट हटाए जाने के बाद समूह से डाउनलोड किया जा सकता है:

कृपया उपयोग से पहले संबंधित संस्करण के jar पैकेज के हैश की गंभीरता से जांच करें।
प्रमाणपत्र प्रमाणीकरण प्रक्रिया (4.3 उदाहरण) : 4.5 संस्करण में अंत में थोड़ा बदलाव हुआ है।
विभिन्न संस्करणों की आधिकारिक डिक्रिप्शन कुंजी:
4.0 1be5be52c6255c33558e8a1cb667cb06
4.1 80e32a742060b884419ba0c171c9aa76
4.2 b20d487addd4713418f2d5a3ae02a7a0
4.3 3a4425490f389aeec312bdd758ad2b99
4.4 5e98194a01c6b48fa582a6a9fcbb92d6
cobaltstrike.auth प्रमाणीकरण कुंजी फ़ाइल, rsa एन्क्रिप्टेड, डिक्रिप्टेड सामग्री:
4.3
-54, -2, -64, -45, // फ़ाइल हेडर
0, 77, // बाद की लंबाई
1, -55, -61, 127, // प्रमाणपत्र समय सीमा 29999999 (स्थायी)
0, 0, 0, 1, // waterमार्क (वॉटरमार्क)
43, // संस्करण
16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
16, 58, 68, 37, 73, 15, 56, -102, -18, -61, 18, -67, -41, 88, -83, 43, -103
प्रत्येक अपडेट के साथ, संबंधित लंबाई +17, कुंजी में 17 बिट्स जुड़ते हैं।
aggressor/Aggressor.class में License.checkLicenseGUI(new Authorization()); से लाइसेंस प्रमाणीकरण शुरू होता है:

License.checkLicenseGUI में isValid, isPerpetual, isExpired, isAlmostExpired यह जाँचते हैं कि प्राधिकरण मान्य है या समाप्त हो गया है:

Authorization वर्ग में cobaltstrike.auth फ़ाइल का प्रसंस्करण होता है, फ़ाइल सामग्री पढ़ता है और AuthCrypto().decrypt को कॉल करता है:

AuthCrypto() कंस्ट्रक्टर में load() कॉल होता है, load() फ़ंक्शन में resources/authkey.pub की md5 जाँच होती है, फिर RSA की सार्वजनिक कुंजी प्राप्त होती है:

decrypt() में _decrypt को कॉल करके cobaltstrike.auth फ़ाइल सामग्री को सार्वजनिक कुंजी से RSA डिक्रिप्ट करके वेरिएबल var2 को सौंपा जाता है, फिर DataParser से रूपांतरण करके var3 को सौंपा जाता है। readInt() विधि var3 के पहले चार बिट्स प्राप्त करती है और फ़ाइल हेडर की जाँच करती है (-889274181 3.x संस्करण के लिए; -889274157 4.x संस्करण के लिए)। फिर var3 से readShort() करके दो बिट्स लंबाई के रूप में var5 को दिए जाते हैं, फिर var6 = var3.readBytes(var5) से उस लंबाई की सामग्री प्राप्त करके var6 को लौटाया जाता है:

Authorization वर्ग में प्राप्त arrayOfByte2 ऐरे पहले छह बिट्स को हटाने के बाद की सामग्री है। arrayOfByte2 ऐरे पर आगे की प्रक्रिया: पहले चार नंबर लेकर i को सौंपें, फिर 4 नंबर लेकर waterमार्क को सौंपें, फिर एक नंबर लेकर b1 को सौंपें। जाँचें: b1 < 43, i == 29999999। common/ListenerConfig में waterमार्क 0 होने पर एंटीवायरस डिटेक्शन वॉटरमार्क जोड़ा जाता है:


पहले 6 बिट्स हटाने के बाद, फिर i, waterमार्क, b1 (कुल 9 बिट्स) हटाने पर, बचा हुआ भाग 4.0 से 4.3 तक की कुंजी है: संरचना: 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20
byte b2 = dataParser.readByte(); // 1 बिट प्राप्त करें, यानी 16
byte[] arrayOfByte3 = dataParser.readBytes(b2); // 16 बिट प्राप्त करें, 4.0 की कुंजी है
byte b3 = dataParser.readByte(); // 1 बिट प्राप्त करें, यानी 16
byte[] arrayOfByte4 = dataParser.readBytes(b3); // 16 बिट प्राप्त करें, 4.1 की कुंजी है
byte b4 = dataParser.readByte(); // 1 बिट प्राप्त करें, यानी 16
byte[] arrayOfByte5 = dataParser.readBytes(b4); // 16 बिट प्राप्त करें, 4.2 की कुंजी है
byte b5 = dataParser.readByte(); // 1 बिट प्राप्त करें, यानी 16
byte[] arrayOfByte6 = dataParser.readBytes(b5); // 16 बिट प्राप्त करें, 4.3 की कुंजी को arrayOfByte6 में सौंपें
Authorization वर्ग में, arrayOfByte6 पर SleevedResource.Setup विधि कॉल की जाती है। SleevedResource में, कुंजी को AES, HmacSHA256 डिक्रिप्शन की गुप्त कुंजी के रूप में सेट किया जाता है, _readResource में this.data.decrypt(arrayOfByte1); के माध्यम से डिक्रिप्शन कॉल किया जाता है, डिक्रिप्ट की गई सामग्री /sleeve/ में dll फ़ाइलें हैं:

SleeveSecurity में AES, HmacSHA256 डिक्रिप्शन की गुप्त कुंजी सेट की जाती है। पास किए गए मान का उपयोग करके 256 बिट्स का एक डाइजेस्ट गणना किया जाता है, फिर 0-16 को AES की कुंजी के रूप में और 16-32 को HmacSHA256 की कुंजी के रूप में लिया जाता है:

यदि संबंधित कुंजी प्राप्त नहीं होती है, तो sleeve फ़ोल्डर में dll को डिक्रिप्ट नहीं किया जा सकता है, और सर्वर से कनेक्ट करते समय [Sleeve] Bad HMAC त्रुटि संदेश दिखाई देता है:

hmac डिक्रिप्शन भाग के लिए संदर्भ: Cobaltstrike 4 क्रैक: मैं स्वयं को लाइसेंस जारी करता हूँ
इसलिए क्रैक को पूरा करने की कुंजी संबंधित cs संस्करण की कुंजी है।
आधिकारिक विवरण के अनुसार, 4.5 संस्करण लाइसेंस की सुरक्षा बढ़ाता है, यह सच है,

इसलिए हमें लीक हुई auth फ़ाइल को डिक्रिप्ट करना होगा, देखते हैं कि इसमें क्या अतिरिक्त है:

4.5 की कुंजी स्थिति के बाद एक और स्ट्रिंग जुड़ी हुई है, यह इस संस्करण में नया जोड़ा गया waterमार्कHash है:

waterमार्कHash beacon की उत्पत्ति से संबंधित है और sleeve फ़ोल्डर में dll से संबंधित है, इसके बिना या गलत होने पर ऑनलाइन नहीं हो सकता। संभवतः आधिकारिक इस waterमार्कHash के माध्यम से लीक के स्रोत का पता लगा सकता है।

अन्य कोड को टिप्पणी करें, AuthCrypto().decrypt के बाद RSA डिक्रिप्टेड पैरामीटर को हार्डकोड करें:

byte[] var4 = {1, -55, -61, 127, 0, 1, -122, -96, 45, 16, 27, -27, -66, 82, -58, 37, 92, 51, 85, -114, -118, 28, -74, 103, -53, 6, 16, -128, -29, 42, 116, 32, 96, -72, -124, 65, -101, -96, -63, 113, -55, -86, 118, 16, -78, 13, 72, 122, -35, -44, 113, 52, 24, -14, -43, -93, -82, 2, -89, -96, 16, 58, 68, 37, 73, 15, 56, -102, -18, -61, 18, -67, -41, 88, -83, 43, -103, 16, 94, -104, 25, 74, 1, -58, -76, -113, -91, -126, -90, -87, -4, -69, -110, -42, 16, -13, -114, -77, -47, -93, 53, -78, 82, -75, -117, -62, -84, -34, -127, -75, 66, 0, 0, 0, 24, 66, 101, 117, 100, 116, 75, 103, 113, 110, 108, 109, 48, 82, 117, 118, 102, 43, 86, 89, 120, 117, 119, 61, 61};
Javaagent सिद्धांत: https://www.cnblogs.com/rickiyang/p/11368932.html
क्रैक उपकरण संदर्भ: https://github.com/Twi1ight/CSAgent
क्रैक का मूल अभी भी cs के संबंधित संस्करण की कुंजी है
beacon/BeaconData में shouldPad विधि का मान स्थायी रूप से false पर सेट करें:

4.4 नया हिडन ट्रैप
(पहले 4.3 उदाहरण के साथ लाइसेंस प्रमाणीकरण विश्लेषण किया गया था, 4.4 पर स्विच करने पर रन से बाहर होने का पता चला, नया हिडन ट्रैप मौजूद है)
पिछले this.shouldPad के exit की तुलना में, common/Helper में .class जाँच जोड़ी गई है, टिप्पणी करें:

common/Starter में .class जाँच जोड़ी गई है, टिप्पणी करें:

common/Starter2 में .class जाँच जोड़ी गई है, टिप्पणी करें:

beacon/CommandBuilder में .class जाँच जोड़ी गई है: (यह हिडन ट्रैप वास्तव में कुत्ता है, क्लाइंट और टीमसर्वर लगातार 4 घंटे कनेक्ट रहने के बाद कमांड निष्पादित नहीं कर सकता, इतने लंबे समय तक कभी कनेक्ट नहीं हुआ था, इसलिए इसका पता नहीं चला, ggg)

4.5 नया हिडन ट्रैप
4.5 संस्करण javaagent के लिए ढेर सारे हिडन ट्रैप जोड़ता है, जार पैकेज को डीकंपाइल करके क्रैक करने वाले इसे अनदेखा कर सकते हैं, विशेष रूप से javaagent खोजें और एक-एक करके संशोधित करें:

इन स्थानों को हटाने के बाद फिर से टीम वर्क किया जा सकता है।
checksum8 सुविधा के बारे में विस्तार से नहीं बताऊंगा, nmap और स्पेस सर्च इंजन द्वारा स्कैन किए जाने से बचने के लिए इसे बदलना आवश्यक है।
BeaconPayload में XOR मान को नए से बदलें:
कोई भी दशमलव संख्या पर्याप्त है, बाद में dll में संबंधित हेक्साडेसिमल संख्या में बदलें।

CrackSleeve का उपयोग करके dll को डिक्रिप्ट करें: https://github.com/ca3tie1/CrackSleeve/
javac -encoding UTF-8 -classpath cobaltstrike.jar CrackSleeve.java)java -classpath cobaltstrike.jar;./ CrackSleeve decode) # विंडोज कमांड लाइन पर निष्पादित करेंAlt+T का उपयोग करके कीवर्ड खोजें: 2Eh


सीधे xor मान बदलें, पहले Change byte का उपयोग करके 2E ढूंढें और बदलें, फिर Apply pathes to input file सेव करें। (सेव करना न भूलें)

बदलने योग्य dll: beacon.dll, beacon.x64.dll, dnsb.dll, dnsb.x64.dll, pivot.dll, pivot.x64.dll, extc2.dll, extc2.x64.dll (4.5 में जोड़े गए कुछ rl100k.dll को भी बदलना होगा)
फिर CrackSleeve का उपयोग करके dll को एन्क्रिप्ट करें, अंत में encode निर्देशिका के तहत dll को idea प्रोजेक्ट निर्देशिका में रखें और पुनः कंपाइल और पैकेज करें।
परीक्षण करें: uri पता अभी भी अनुरोध किया जा सकता है, लेकिन सामग्री को nmap स्क्रिप्ट द्वारा डिक्रिप्ट नहीं किया जा सकता है, इसी प्रकार स्पेस सर्च इंजन की पहचान से भी बचा जा सकता है:

XOR मान बदलने के अलावा, checksum8 एल्गोरिदम को भी बदला जा सकता है: https://mp.weixin.qq.com/s?__biz=MzA3MDY2NjMxMA==&mid=2247484641&idx=1&sn=014f6c4ad5343e3f5034c33dffa66f26&chksm=9f3815c8a84f9cde1c7493ff29cfc89c0474fec48ede52be618727e7b9a5ab321c4743e1a44c&mpshare=1&scene=23&srcid=1202NA46yt71CvD3BMGKS10c&sharer_sharetime=1606892728447&sharer_shareid=ff83fe2fe7db7fcd8a1fcbc183d841c4#rd लेकिन यह केवल निश्चित uri तक ही सीमित रहेगा, प्रोफ़ाइल के साथ उपयोग करना होगा, और हर बार uri बदलने पर पुनः पैकेज करना होगा, दोनों विधियों के अपने फायदे और नुकसान हैं।
beaconeye सुविधा हटाने का विचार लिंक से आता है, 4.3 और 4.4 के उदाहरण के साथ निम्नलिखित बाइट्स को बदलने की आवश्यकता है।
CrackSleeve का उपयोग करके dll को डिक्रिप्ट करें: https://github.com/ca3tie1/CrackSleeve/
javac -encoding UTF-8 -classpath cobaltstrike.jar CrackSleeve.java)java -classpath cobaltstrike.jar;./ CrackSleeve decode) # विंडोज कमांड लाइन पर निष्पादित करें4.3 key 58, 68, 37, 73, 15, 56, -102, -18, -61, 18, -67, -41, 88, -83, 43, -103 4.4 key 94, -104, 25, 74, 1, -58, -76, -113, -91, -126, -90, -87, -4, -69, -110, -42
पता: 10009FBB
6A 00 को 6A 09 में बदलें (00 को किसी भी मान से बदलें)

पता: 000000001800186C3
beacon.x64.dll में निर्देश xor edx, edx है, इसे mov edx, esi में बदलें

पता: 1000A0B9
6A 00 को 6A 09 में बदलें (00 को किसी भी मान से बदलें)

पता: 000000018001879B
beacon.x64.dll में निर्देश xor edx, edx है, इसे mov edx, esi में बदलें

पुनः एन्क्रिप्ट करने के लिए: java -classpath cobaltstrike.jar;./ CrackSleeve encode


पता: 1000A65D

पता: 000000018000CA3F

(4.5 में जोड़े गए कुछ rl100k.dll को भी बदलना होगा)

विधि: uri में / जाँच जोड़ें, यदि / से शुरू नहीं होता है तो 404 वापस करें:
4.4 संशोधन

4.3 संशोधन

Event Log में totp पासवर्ड या cs में लॉगिन नाम लीक होने से बचने के लिए, name फ़ील्ड पर md5 सॉल्टेड प्रदर्शन जोड़ा गया, संशोधन के बाद इस प्रकार:

TOTP दो-कारक प्रमाणीकरण जोड़ा गया, लॉगिन सुरक्षा बढ़ाने और पासवर्ड ब्रूट फोर्स से बचाव के लिए।
teamserver पक्ष: teamserver आउटपुट में एक totp QR कोड लिंक जोड़ा गया:

(nohup.out हटाने से पहले QR कोड कॉपी करना याद रखें, हर बार teamserver शुरू होने पर नया QR कोड उत्पन्न होता है, इसलिए हर बार teamserver शुरू करने पर पुनः स्कैन करना होगा)
ब्राउज़र में खोलें (VPN की आवश्यकता) और Google Authenticator या TOTP वैलिडेटर से QR कोड स्कैन करें, या secret%3D के बाद की गुप्त कुंजी कॉपी करके वैलिडेटर में कॉन्फ़िगर करें:

connect पक्ष: host, port, password पहले जैसे ही हैं, user में अंतिम छह अंक totp का गतिशील नंबर होना चाहिए:

यदि totp गतिशील नंबर नहीं भरा गया या गलत भरा गया तो संकेत दिया जाएगा:

नोट: कभी-कभी फोन उपलब्ध नहीं होता, ब्राउज़र के totp प्लगइन या Python का सरल totp कोड उपयोग किया जा सकता है।
windows/foreign/reverse_http(s) का उपयोग करके spawn करते समय त्रुटि:

इस संस्करण में ScListener में संबंधित Custom का getScalar ऑपरेशन जोड़ा गया, लेकिन foreign स्थिति पर विचार नहीं किया गया, जिससे var1.customDLL, customFileName खाली होकर त्रुटि उत्पन्न होती है:

अस्थायी फिक्स: जब payload foreign हो, तो सीधे shellcode वापस करें। यदि इस विधि में अन्य बग हों, तो issues में रिपोर्ट करें:

ठीक करने के बाद सामान्य रूप से उपयोग किया जा सकता है:

MySQL हनीपॉट द्वारा कॉन्फ़िगरेशन पढ़े जाने से रोकने के लिए, cs क्लाइंट कॉन्फ़िगरेशन फ़ाइल का नाम अब डिफ़ॉल्ट नहीं रहेगा, बल्कि 11 वर्णों का फ़ाइल नाम (mac एड्रेस md5 का 11 अंक) उत्पन्न होगा।
