
एक पेलोड वितरण प्रणाली जो पेलोड्स को एक्जीक्यूटेबल की आइकन फ़ाइल में एम्बेड करती है!

Blenny विंडोज़ के लिए एक proof-of-concept पेलोड अस्पष्टीकरण टूल है जो निष्पादन योग्य के आइकन के भीतर निष्पादन योग्य पेलोड डेटा छिपाता है। इसका नाम sabre-toothed blenny fish के नाम पर रखा गया है, जो सफाई करने वाली मछलियों के व्यवहार और रूप की नकल करके बिना सोचे-समझे मछलियों का शिकार करती है।
मुझे ठीक से याद नहीं है कि कहानी कैसे आगे बढ़ती है, लेकिन retr0id (@DavidBuchanan314) नामक एक हैकर ने एक निष्पादन योग्य के आइकन के भीतर पेलोड छिपाने का विचार उठाया था। PNG फ़ाइलों की विभिन्न विचित्रताओं के कारण— और क्योंकि विंडोज़ आइकन फ़ाइलों में PNG डेटा हो सकता है— मैंने महसूस किया कि मैं इस विचार को काफी आसानी से लागू कर सकता हूँ, बस थोड़ी मेहनत की आवश्यकता होगी। मैंने Facade लाइब्रेरी— विशेष रूप से PNG फ़ाइलों में पेलोड उत्पन्न करने के उद्देश्य से बनाई गई एक लाइब्रेरी— ठीक इसी उद्देश्य के लिए बनाई।
अंतिम परिणाम एक कॉम्पैक्ट पेलोड फ़ाइल और बिल्ड सिस्टम है जिसका उपयोग विंडोज़ के लिए एक बुनियादी ड्रॉपर/निष्पादक पेलोड को अनुकूलित करने के लिए किया जा सकता है।
Blenny आइकन फ़ाइलों से पेलोड बनाने के लिए Facade लाइब्रेरी का उपयोग करता है, इसलिए रिपॉजिटरी प्राप्त करते समय, सबमॉड्यूल (और इसके सबमॉड्यूल) को प्रारंभ करने की आवश्यकता होती है:
$ git clone https://github.com/frank2/blenny.git
$ cd blenny
$ git submodule update --init --recursive
बिल्डिंग के लिए रिपॉजिटरी को प्रारंभ करने के लिए आपको बस इतना ही चाहिए।
यह प्रोजेक्ट सचमुच CMake को ध्यान में रखकर डिज़ाइन किया गया था, इसलिए इस प्रोजेक्ट को बिल्ड करने से पहले, CMake प्राप्त करना और इंस्टॉल करना एक पूर्ण आवश्यकता है। अन्यथा यह शायद काम नहीं करेगा (जब तक कि आप वास्तव में सभी CMake परिभाषाओं को स्वयं मैन्युअल रूप से सेट करने के लिए समर्पित न हों)। प्रोजेक्ट को संकलित करने के लिए आपको Visual Studio की एक प्रति की भी आवश्यकता होगी।
यह प्रोजेक्ट बिल्ड प्रक्रिया को कॉन्फ़िगर करने के लिए अनेक CMake वेरिएबल्स का उपयोग करता है। एक बुनियादी प्रदर्शन पेलोड प्राप्त करने के लिए, जिसमें एक प्यारा भेड़ मित्र आपके डेस्कटॉप पर आएगा, आप प्रोजेक्ट की मुख्य निर्देशिका में निम्नलिखित चला सकते हैं:
$ mkdir build
$ cd build
$ cmake -D BLENNY_ZTEXT_PAYLOAD=ON ../
$ cmake --build ./ --config Release
$ ./Release/blenny.exe
डिफ़ॉल्ट रूप से, यह निष्पादन योग्य के आइकन से "blenny.exe" नामक एक निष्पादन योग्य को वर्तमान उपयोगकर्ता की temp निर्देशिका में निकालता है, फिर उसे निष्पादित करता है। डिफ़ॉल्ट पेलोड @AdrianoTiger का DesktopPet है, जो 90 के दशक के क्लासिक esheep.exe का एक समर्पित पुनर्निर्माण है।
यह सब संभव बनाने वाले सभी वेरिएबल अनुकूलन योग्य हैं! एक पेलोड वेरिएबल (BLENNY_TRAILING_PAYLOAD, BLENNY_TEXT_PAYLOAD, BLENNY_ZTEXT_PAYLOAD या BLENNY_STEGO_PAYLOAD) सेट होना चाहिए। यह नियंत्रित करता है कि पेलोड अंततः आइकन में कैसे डाला जाता है। इन तकनीकों के विवरण के लिए Facade लाइब्रेरी देखें। उदाहरण के लिए, अपना स्वयं का पेलोड उपयोग करने के लिए, ऐसा करें:
$ cmake -D BLENNY_PAYLOAD_FILE="path/to/your/payload.exe" -D BLENNY_ZTEXT_PAYLOAD=ON ../
$ cmake --build ./ --config Release
यहाँ उन सभी विभिन्न कॉन्फ़िगरेशन विकल्पों की एक तालिका है जिन्हें आप सेट कर सकते हैं, उनके डिफ़ॉल्ट मान, और वे क्या करते हैं।
| फ़्लैग | प्रकार | डिफ़ॉल्ट मान | उद्देश्य |
|---|
| BLENNY_PAYLOAD_FILE | String | "${PROJECT_SOURCE_DIR}/res/defaultpayload.exe" | आइकन फ़ाइल में एम्बेड करने के लिए पेलोड। नोट: चूँकि अंतिम निष्पादन तकनीक ShellExecuteA है, यह कोई भी फ़ाइल हो सकती है जिसे Explorer से लॉन्च किया जा सकता है, जैसे कि बैच स्क्रिप्ट! |
| BLENNY_ICON_FILE | String | "${PROJECT_SOURCE_DIR}/res/defaulticon.ico" | निष्पादन योग्य के लिए उपयोग करने और पेलोड को एम्बेड करने के लिए आइकन। नोट: सभी आइकन काम नहीं करेंगे! आइकन फ़ाइल में PNG अनुभाग का होना आवश्यक है। यह देखने के लिए कि PNG छवि शामिल है या नहीं, अपने लक्षित आइकन के डेटा को हेक्स एडिटर में जाँचें! |
| BLENNY_TRAILING_PAYLOAD | Boolean | OFF | आइकन की PNG फ़ाइल के भीतर एक अनुगामी डेटा पेलोड सक्षम करें। |
| BLENNY_TEXT_PAYLOAD | Boolean | OFF | आइकन की PNG फ़ाइल के भीतर tEXt अनुभाग पेलोड सक्षम करें। |
| BLENNY_ZTEXT_PAYLOAD | Boolean | OFF | आइकन की PNG फ़ाइल के भीतर zTXt अनुभाग पेलोड सक्षम करें, जो एक संपीड़ित tEXt पेलोड है। |
| BLENNY_STEGO_PAYLOAD | Boolean | OFF | आइकन की PNG फ़ाइल के भीतर एक स्टेग्नोग्राफ़िक पेलोड सक्षम करें। नोट: अधिकांश आइकनों का छवि आकार 256x256 तक सीमित होने के कारण, सभी पेलोड इस विकल्प में नहीं समाएँगे! |
| BLENNY_PAYLOAD_KEYWORD | String | "blenny" | text/ztext पेलोड के लिए, पेलोड डेटा को लेबल करने वाला कीवर्ड सेट करें। |
| BLENNY_ADMIN | Boolean | OFF | पेलोड को व्यवस्थापक के रूप में चलाने के लिए runas कीवर्ड सक्षम करता है। |
| BLENNY_PATH | String | "%TEMP%" | निष्पादित करने से पहले पेलोड को संग्रहीत करने का पथ। पर्यावरण चर निष्पादन समय पर विस्तारित किए जाते हैं। |
| BLENNY_FILENAME | String | "blenny" | निष्कर्षण पर पेलोड को देने के लिए फ़ाइल नाम। |
| BLENNY_RANDOM_FILENAME | Boolean | OFF | निष्कर्षण पर पेलोड के लिए एक यादृच्छिक फ़ाइल नाम उत्पन्न करने को सक्षम करें। |
| BLENNY_RANDOM_FILENAME_LENGTH | Integer | 8 | यादृच्छिक फ़ाइल नाम की लंबाई समायोजित करें। |
| BLENNY_RANDOM_FILENAME_RANDOM_LENGTH | Boolean | OFF | निष्कर्षण पर फ़ाइल नाम को एक यादृच्छिक लंबाई दें। |
| BLENNY_PAYLOAD_ARGS | String | "" | निष्पादन पर पेलोड फ़ाइल को देने के लिए तर्क। |
| BLENNY_FILE_ATTRIBUTES | Integer | 0x80 (उर्फ FILE_ATTRIBUTE_NORMAL) | निर्माण पर फ़ाइल को देने के लिए फ़ाइल विशेषताएँ। |
| BLENNY_CMD_SHOW | Integer | 5 (उर्फ SW_SHOW) | निष्पादन पर पेलोड फ़ाइल की दृश्य स्थिति। एक अन्य उदाहरण SW_HIDE है, जो 0 है। |