
Sliver C2 implant framework के लिए Windows keylogging मॉड्यूल, जो कीस्ट्रोक्स को कैप्चर करने हेतु Raw Input का उपयोग करता है और ऑपरेटरों को start, stop तथा retrieval कमांड प्रदान करता है।
Sliver के लिए यह एक्सटेंशन मुख्य रूप से एक सीखने के अभ्यास के रूप में लिखा गया था
कि Sliver एक्सटेंशन को कैसे संभालता है।
मैं इस सार्वजनिक इम्प्लांट फ्रेमवर्क पर उनके काम के लिए पूरी Sliver टीम को धन्यवाद देना चाहता हूँ। मैं विशेष रूप से @rkervell को धन्यवाद देना चाहता हूँ, जिन्होंने Sliver अपने एक्सटेंशन को कैसे संभालता है, इससे संबंधित मेरे कई सवालों के जवाब दिए।
मूल रूप से यह रॉ इनपुट का उपयोग करता है। अन्य सामान्य कीलॉगिंग विधियों की तुलना में इसके फायदे और नुकसान हैं।
मुझे यह पसंद है क्योंकि इसमें अन्य बाइनरीज़ में इंजेक्ट करने की आवश्यकता नहीं होती, न ही किसी दिए गए कॉल को बार-बार पोल करने और संभावित रूप से परिणाम चूकने की आवश्यकता होती है।
यह कोड कुछ मेरा अपना काम है और कुछ इंटरनेट पर मिले उदाहरणों का मिश्रण है।
Visual Studio 2019 का उपयोग करके सोल्यूशन फ़ाइल खोलें, और x86 और x64 रिलीज़ बनाएँ।
जब तक इसे संभावित रूप से armory में शामिल नहीं किया जाता, इसे Windows सिस्टम पर बनाया जा सकता है। फिर परिणामी $(solutiondir)\bin फ़ोल्डर को sliver क्लाइंट पर रखा जा सकता है
और एक्सटेंशन इंस्टॉल करने के लिए extensions install <path to folder> चलाया जा सकता है। आपको रीस्टार्ट करने की आवश्यकता हो सकती है या extensions load <path to folder> भी चलाना पड़ सकता है।
raw_keylogger <cmdid>
निम्नलिखित cmdid मान्य हैं।
0 = stop
1 = start
2 = get keystrokes
अगर सब कुछ ठीक रहा, तो यह ऐसा दिखेगा।

Sliver के API के निम्नलिखित दो मुख्य भाग हैं।
typedef int (*goCallback)(const char*, int);
extern "C" {
__declspec(dllexport) int __cdecl entrypoint(char* argsBuffer, uint32_t bufferSize, goCallback callback);
}
इम्प्लांट .json फ़ाइल में परिभाषित "entrypoint" को कॉल करेगा। यह आपके entrypoint फ़ंक्शन की ओर इंगित करता है (नाम वही होना आवश्यक नहीं है, बस सिग्नेचर का पालन करें)।
goCallback आउटपुट को Go में लौटाने के लिए एक फ़ंक्शन है। इसे callback(string, string_length) की तरह कॉल किया जाता है।
अभी के लिए एक्सटेंशन को कोड करते समय "name" और "command_name" का मेल होना आवश्यक है, अन्यथा इम्प्लांट हर कॉल पर आपके एक्सटेंशन को फिर से लोड करेगा।
इस लेखन के समय, non-BOF एक्सटेंशन स्ट्रॉन्गली टाइप किए गए तर्कों का समर्थन नहीं करते हैं, इसलिए कमांड नाम के बाद CLI पर दी गई हर चीज़ एक स्ट्रिंग के रूप में भेजी जाएगी। आपको इसे वहाँ से एक्सटेंशन के नेटिव कोड पक्ष पर संभालना होगा।