
निष्पादनयोग्य फ़ाइलों से ब्लोट हटाने के लिए एक GUI और CLI उपकरण

Debloat एक GUI और CLI टूल है जो फूले हुए (bloated) एक्ज़ीक्यूटेबल्स से अतिरिक्त कचरा हटाने के लिए है।
अतिरिक्त कचरे से मेरा मतलब है किसी बाइनरी में डाले गए 100 - 800 MB के जंक बाइट्स, जो उसे सैंडबॉक्स में जाने से रोकने के लिए जोड़े जाते हैं। जंक जोड़ने की इस विधि को बाइनरी को "inflating" या "pumping" करना कहा जाता है। Debloat वर्तमान में 10 सबसे सामान्य inflation तकनीकों को संभालता है।
Python में निर्मित होने के कारण, एप्लिकेशन का उपयोग अन्य वर्कफ़्लो में आसानी से किया जा सकता है। वर्तमान में, debloat का उपयोग CCCS के AssemblyLine और CERT Polska के MWDB द्वारा किया जाता है।
प्रोग्राम को Windows, MacOS, Linux के लिए संकलित (compile) किया जा सकता है। GUI और CLI में न्यूनतम विकल्प होते हैं: इसे जितना संभव हो उतना सरल बनाने का इरादा है और प्रोग्राम के भीतर की लॉजिक विभिन्न उपयोग-मामलों को स्वचालित रूप से संभालती है।
संकलित बाइनरी पहले से ही Releases में शामिल हैं।
debloat को pip install debloat का उपयोग करके इंस्टॉल किया जा सकता है। CLI लॉन्च करने के लिए debloat और GUI लॉन्च करने के लिए debloat-gui का उपयोग करें।
उन्नत उपयोगकर्ताओं के लिए, Debloat को अन्य स्क्रिप्ट्स में भी आयात किया जा सकता है और प्रोसेसिंग फ़ंक्शन को व्यक्तिगत रूप से कॉल किया जा सकता है।
Debloat का GUI यथासंभव सहज (intuitive) होने का इरादा रखता है। लॉन्च करने पर, आप फूले हुए (bloated) फ़ाइल को टेक्स्ट बार पर ड्रैग और ड्रॉप कर सकते हैं और "Process file" बटन दबा सकते हैं। स्क्रॉलिंग टेक्स्टबॉक्स में कुछ तकनीकी जानकारी प्रिंट होगी और बिना bloat वाली फ़ाइल उस निर्देशिका में लिखी जाएगी जहाँ से फ़ाइल ली गई थी। आसान लगता है? यह वाकई आसान है!
फ़ाइलों को प्रोसेस करने में कुछ सेकंड लगेंगे।

pip install debloat का उपयोग करके इंस्टॉल करने के बाद debloat कमांड का उपयोग करें।
debloat दो आर्ग्युमेंट ले सकता है। पहला आर्ग्युमेंट आवश्यक है: डिब्लोट (debloat) की जाने वाली फ़ाइल। दूसरा आर्ग्युमेंट वैकल्पिक है: आउटपुट स्थान। जब कोई आउटपुट प्रदान नहीं किया जाता है, तो इसे मूल फ़ाइल के समान निर्देशिका में लिखा जाएगा।
GUI को CLI से debloat-gui कमांड का उपयोग करके भी लॉन्च किया जा सकता है।
अभी नहीं। मेरे हालिया विश्लेषण के आधार पर, debloat 97.8% मामलों में फूली हुई फ़ाइलों से जंक हटाने में सक्षम है।
पिछले संस्करणों में, debloat गलती से बाइनरी का बहुत अधिक हिस्सा हटा सकता था। अब ऐसा नहीं है, जब तक कि आप "--last-ditch" स्विच का उपयोग न करें। यदि आपको कभी इस स्विच की आवश्यकता हो, तो अतिरिक्त विश्लेषण के लिए सैंपल साझा करने पर विचार करें। यह विकल्प अब GUI में जोड़ दिया गया है। कार्यात्मक रूप से, यह फ़ंक्शन पूरे ओवरले को हटा देगा, यदि कोई है। कुछ मामलों में यह आवश्यक है क्योंकि जंक के लिए कोई पैटर्न नहीं मिला था---यह आमतौर पर उन सैंपलों में होता है जो अच्छी तरह से कंप्रेस नहीं होते हैं।
हस्ताक्षरित (Signed) PE के अंत में जोड़ा गया bloat।
नीचे की छवि में, bloat को एक्ज़ीक्यूटेबल के अंत में जोड़ा गया है।

हस्ताक्षरित या अहस्ताक्षरित पैक्ड (Packed) एक्ज़ीक्यूटेबल।
नीचे की छवि में, पैकिंग के बाद bloat को एक्ज़ीक्यूटेबल में जोड़ा गया है।

हस्ताक्षरित एक्ज़ीक्यूटेबल जिसमें PE के .rsrc सेक्शन में bloat शामिल है।
नीचे की छवि में, bloat की पहचान .rsrc सेक्शन में होती है और इसे PE से हटा दिया जाता है।

ऐसे मामले जहाँ bloat को PE सेक्शन के अंदर जोड़ा जाता है।
नीचे की छवि में, bloat को [0] नामक PE सेक्शन में शामिल किया गया है।

ऐसे मामले जहाँ एक्ज़ीक्यूटेबल Nullsoft Scriptable Installer System एक्ज़ीक्यूटेबल (NSIS उर्फ Nullsoft) है। ये exe इंस्टॉलर होते हैं जिनमें एक या अधिक फ़ाइलें हो सकती हैं। इसमें शामिल फ़ाइलें दुर्भावनापूर्ण हो भी सकती हैं और नहीं भी। (कभी-कभी अभिनेता केवल फ़ाइल का आकार बढ़ाने के लिए फ़ाइलें जोड़ते हैं।) इंस्टॉलर के भीतर की सभी फ़ाइलें एक नई निर्देशिका में निकाली जाती हैं। निर्देशिका में इंस्टॉलर की स्क्रिप्ट भी होती है, जिसे यह निर्धारित करने के लिए देखा जा सकता है कि कौन सी फ़ाइलें दुर्भावनापूर्ण हो सकती हैं। नीचे की छवि में, Malcat ने एक्ज़ीक्यूटेबल को NSIS इंस्टॉलर के रूप में पहचाना है।
ऐसे उपयोग-मामले हैं जहाँ टूल काम नहीं करता है। हालाँकि, मैं उनके बारे में बहुत अधिक प्रकाशित करने से पहले उन्हें हल करने की योजना बना रहा हूँ।
फूले हुए एक्ज़ीक्यूटेबल्स को आसानी से प्रोसेस करने के लिए सीमित संख्या में टूल उपलब्ध प्रतीत होते हैं। जिन दो टूल्स को मैंने सबसे अधिक देखा है वे हैं “foremost” जो डिस्क इमेज से बाइनरी प्राप्त करने के लिए है और “pecheck”।
Foremost उन उदाहरणों में सबसे अच्छा काम करता है जहाँ जंक बाइट्स null (0x00) होते हैं और जब बाइनरी में नकली या वास्तविक हस्ताक्षर होता है तो इसे कठिनाई होती है। फ़ाइलों से bloat हटाने में इसका उपयोग इसका मूल उद्देश्य नहीं है।
Pecheck 14+ वर्षों से विकसित किया गया है और इसमें कुछ भ्रामक कमांडलाइन विकल्प हैं। फूली हुई सामग्री को हटाने का विकल्प स्क्रिप्ट का प्राथमिक कार्य नहीं है। हस्ताक्षरित एक्ज़ीक्यूटेबल्स को संभालने के लिए Pecheck को एक अन्य टूल (disitool) के साथ जोड़ना पड़ता है। मेरे अनुभव में, ऐसे अन्य समय भी होते हैं जहाँ pecheck भ्रमित हो सकता है और मूल फूले हुए एक्ज़ीक्यूटेबल के आकार का दोगुना एक्ज़ीक्यूटेबल लौटा सकता है। ये सभी कारक ठीक लगते हैं यदि आप कम संख्या में बाइनरी संभाल रहे हैं, लेकिन जैसे-जैसे बाइनरी और विधियों की संख्या बढ़ती है, bloat हटाने के लिए विशिष्ट टूल की आवश्यकता होती है।
Binary Refinery एक अद्भुत टूल है। इसे कमांडलाइन का CyberChef होने के इरादे से लिखा गया था। जबकि दोनों टूल अद्भुत हैं, दोनों में एक कमी है जिसके लिए उपयोगकर्ता को यह जानने की आवश्यकता होती है कि कौन से फ़ॉर्मूले लागू किए जाने चाहिए।
बाइनरी से bloat हटाने के अच्छे ठोस मैनुअल तरीके हैं, लेकिन ये तरीके थकाऊ हो सकते हैं और सभी विश्लेषकों के पास ऐसा करने का कौशल नहीं होता है। यह टूल मैन्युअल रूप से bloat हटाने का तरीका जानने की आवश्यकता का बोझ हटा देता है। इसके अतिरिक्त, यह बेहतर स्केल की अनुमति देता है। स्क्रिप्ट में उपयोग किए गए सिद्धांत बेहतर स्केल की अनुमति देते हैं अनुमति देते हैं यदि स्वचालन वांछित है।
अपने प्लेटफ़ॉर्म के अनुसार उपयुक्त बिल्ड कमांड का पालन करें। बिल्ड कमांड के बीच मुख्य अंतर आइकन का प्रारूप है।
MacOS
pyinstaller --onefile --noconsole --additional-hooks-dir=./hook --icon=debloat.icns gui.py
Windows
pyinstaller --onefile --noconsole --additional-hooks-dir=./hook --icon=debloat.ico gui.py
Linux
pyinstaller --onefile --noconsole --icon=debloat.ico --collect-all tkinterdnd2 gui.py
debloat Discord से जुड़ने पर विचार करें।
Jesko Hüttenhain को बड़ा धन्यवाद, जो Binary Refinery के निर्माता हैं। NSIS निष्कर्षण उनके NSIS फ़ाइल प्रारूप के रिवर्स इंजीनियरिंग पर आधारित है। यदि आपने नहीं देखा है तो Binary Refinery को देखें।
बैच प्रोसेसिंग: किसी निर्देशिका की सभी फ़ाइलों को प्रोसेस करें और एक रिपोर्ट तैयार करें।
debloat के बाहर प्रोसेसिंग विधियों का उपयोग करने के लिए बेहतर समर्थन।
बिना अनज़िप किए debloating के लिए समर्थन।
