
magic-extractor v1.3.1
यूनिवर्सल विंडोज़ एक्सट्रैक्शन टूल जो अज्ञात फ़ाइलों का पता लगाता है और उन्हें सही बंडल किए गए एक्सट्रैक्टर तक पहुँचाता है।
Magic Extractor
विवरण
मैजिक एक्सट्रैक्टर विंडोज़ के लिए एक सार्वभौमिक निष्कर्षण उपकरण है जो एक फ़ाइल की पहचान कई डिटेक्टरों से करता है और उसे सही बंडल किए गए एक्सट्रैक्टर तक पहुँचाता है। इसका उद्देश्य मुख्यधारा के संपीड़न प्रारूप, आज दिखने वाले इंस्टॉलर, और कई कम सामान्य आर्काइवर शामिल करना है।
यह 80+ प्रारूपों का स्वतः पता लगाता है — आर्काइव, इंस्टॉलर, डिस्क इमेज, फोरेंसिक इमेज (EWF/AFF/AD1), डिस्क इमेज, मेल स्टोर और आधुनिक कोडेक। पूरी सूची के लिए formats.md देखें।
त्वरित आरंभ
नवीनतम रिलीज़ डाउनलोड करें, इसे अनज़िप करें, और चलाएँ:
magic-extractor.exe extract mystery.bin
identify, list, carve, --recursive और --bruteforce के लिए उदाहरण देखें।
परियोजना संरचना
cli: स्रोत कोड।bin: बंडल किए गए डिटेक्टर और एक्सट्रैक्टर बाइनरी।detectors: DIE, Magika, binwalk (TrID की परिभाषाएँdata/signatures.jsonमें परिवर्तित की जाती हैं)।extractors: 7z, unrar, unace, unshield, lessmsi, dark (WiX), और अन्य।
data: रनटाइम कॉन्फ़िगरेशन, गतिशील रूप से लोड किया जाता है (नीचे देखें)।formats: प्रत्येक प्रारूप परिवार के लिए एक हैंडलर मॉड्यूल।
gui: वैकल्पिक tkinter फ्रंट-एंड जो CLI को रैप करता है (देखें GUI)।test: प्रारूप के अनुसार नमूना फ़ाइलें (निष्कर्षण/पहचान परीक्षणों के लिए फिक्स्चर)।tools: डेवलपर टूलिंग (generate_data.py— हैंडलर से डेटा फ़ाइलें बनाता है)।
संकलित बिल्ड bin/, data/ और config.ini को exe के बाहर रखता है ताकि उन्हें फ़ाइल स्वैप के साथ अपडेट किया जा सके; main.py में पाथ रिज़ॉल्वर उन्हें निष्पादन योग्य (फ्रोज़न) के बगल में या cli/ (डेव) के अंतर्गत ढूंढता है।
डिटेक्शन कैसे काम करता है
सामान्य निष्कर्षण के लिए, डिटेक्टर अर्ली-एग्ज़िट के साथ इस क्रम में चलते हैं — जो पहले ज्ञात हैंडलर देता है वही जीतता है (सबसे सस्ता पहले, इसलिए ML मॉडल आमतौर पर छोड़ दिया जाता है):
- puremagic — शुद्ध-पायथन, कोई सबप्रोसेस नहीं; अच्छी तरह से बने आर्काइव के लिए एक सस्ती MIME जाँच।
- built-in signatures —
data/signatures.jsonमें मैजिक-बाइट पैटर्न; उन आर्काइवर्स के नाम बताता है जिन्हें इंजन नहीं पहचान पाते (bcm, dgca, kgb, uharc, alzip, freearc, ...) बिना किसी बाहरी प्रोसेस के। - DIE (Detect It Easy) — सिग्नेचर इंजन; इंस्टॉलर, PE और SFX का विशेषज्ञ।
- binwalk — छोटी प्रकार कुंजियाँ (cpio, lzma, ...) और एम्बेडेड सामग्री।
- Magika — Google का AI कंटेंट-टाइप डिटेक्टर, कैच-ऑल के रूप में।
प्रत्येक डिटेक्टर विशिष्ट रूप से योगदान देता है (वे पूरक हैं, अनावश्यक नहीं): सिग्नेचर DB उन आर्काइवर्स के नाम बताता है जिन्हें इंजन नहीं पहचान पाते, DIE इंस्टॉलर/PE संभालता है, binwalk उन कुछ प्रकारों को पकड़ता है जिन्हें अन्य नहीं पहचान पाते, puremagic/Magika MIME को कवर करते हैं।
PureMagic 2.x पूरी फ़ाइल मिलने पर सामग्री-जागरूक गहन स्कैनिंग भी प्रदान करता है। पूर्ण-फ़ाइल विश्लेषण डिफ़ॉल्ट है; वैकल्पिक --fast-check संशोधक केवल पहला 64 KiB पास करता है जब स्टार्टअप गति गहन निरीक्षण से अधिक मायने रखती है।
प्रत्येक हैंडलर अपने स्वयं के संकेतक detection_mimes() / detection_names() / detection_signatures() के माध्यम से घोषित करता है; tools/generate_data.py इन्हें data/handlers.json और data/signatures.json में संकलित करता है (वैकल्पिक data/extra_detections.json शीर्ष पर मर्ज किया जाता है)। TrID का उपयोग नहीं किया जाता है।
नोट: कोई भी प्रारूप जिसका सिग्नेचर puremagic के
magic_data.jsonमें अनुपस्थित है (या जिसे puremagic केवल सामान्यapplication/octet-streamके रूप में रिपोर्ट करता है) उसे अपने हैंडलर में एक कस्टमdetection_signatures()प्रविष्टि घोषित करनी होगी — अन्यथा यह सामग्री द्वारा पहचाना नहीं जाएगा।
--bruteforceअर्ली-एग्ज़िट को अक्षम करता है: हर डिटेक्टर चलता है और प्रत्येक पहचाने गए हैंडलर को बारी-बारी से आज़माया जाता है (उपयोगी जब पहला अनुमान गलत हो)।- जिन निष्पादन योग्य फ़ाइलों की कोई डिटेक्टर पहचान नहीं करता, वे रैप्ड-exe इंस्टॉलर हैंडलर (BitRock, Clickteam, Inno, ...) पर वापस आ जाती हैं, जो स्व-सत्यापन करते हैं।
carveसबकमांड अतिरिक्त रूप से binwalk के ऑफसेट मैप का उपयोग करके आर्बिट्रेरी ऑफसेट पर एम्बेडेड आर्काइव निकालता है (जैसे फर्मवेयर इमेज के अंदर)।
डिटेक्शन → हैंडलर रूटिंग मैप data/handlers.json में रहता है (हाथ से क्यूरेट किया गया, रनटाइम पर लोड होता है); एक जेनेरिक-टोकन ब्लैकलिस्ट data/detection_blacklist.json में रहती है।
समर्थित प्रारूप
प्रारूपों और उनके हैंडलर की पूरी सूची के लिए formats.md देखें।
एक प्रारूप जोड़ना
किसी नए प्रारूप के लिए समर्थन जोड़ने हेतु, docs/adding-a-handler.md देखें — एंड-टू-एंड गाइड (हैंडलर क्लास, डिटेक्शन घोषणा, DIE/TrID लुकअप, मैजिक सिग्नेचर, रूटिंग डेटा को पुनः उत्पन्न करना, टूल को बंडल करना, और परीक्षण)।
स्थापना (स्रोत से)
अधिकांश उपयोगकर्ता केवल रिलीज़ डाउनलोड करते हैं (देखें त्वरित आरंभ)। स्रोत से चलाने के लिए: Python 3.12 या नया आवश्यक है।
git clone <repo-url>
cd magic-extractor
pip install -r cli/requirements.txt
उपयोग
मैजिक एक्सट्रैक्टर सबकमांड का उपयोग करता है:
python cli/main.py extract <path> [output_dir] [options] # detect and extract
python cli/main.py identify <path> # report type + candidate handlers
python cli/main.py list <path> # list archive contents
python cli/main.py carve <path> [output_dir] [options] # carve embedded archives (binwalk offsets)
एक बेयर पाथ जिसमें कोई सबकमांड नहीं है, extract पर डिफ़ॉल्ट होता है (पिछड़ा संगत):
python cli/main.py <path> <output_dir> [options]
extract विकल्प:
-
--password <password>: एन्क्रिप्टेड आर्काइव के लिए पासवर्ड। -
-r,--recursive: आउटपुट के अंदर पाए गए आर्काइव निकालें (--max-depthद्वारा सीमित, डिफ़ॉल्ट 5)। -
-b,--bruteforce: पहले पर रुकने के बजाय पहचाने गए हर हैंडलर को आज़माएँ। -
--open-output-folder <true|false>: समाप्त होने पर आउटपुट फ़ोल्डर खोलें। -
--check-free-space <true|false>: चेतावनी दें यदि आउटपुट वॉल्यूम में स्थान की कमी हो सकती है। -
--check-unicode <true|false>: गैर-ASCII निकाले गए नामों के बारे में चेतावनी दें। -
--fix-file-extensions <true|false>: बिना एक्सटेंशन वाली निकाली गई फ़ाइलों को सामग्री-आधारित एक्सटेंशन दें (मौजूदा एक्सटेंशन को कभी अधिलेखित नहीं करता)। -
--create-log-files <true|false>: आउटपुट निर्देशिका में प्रति-रन लॉग लिखें।(प्रत्येक का डिफ़ॉल्ट छोड़े जाने पर उसका
config.iniमान होता है; दिए गए मान को स्थायी बनाने के लिए--update-defaultsके साथ जोड़ें — जैसे--open-output-folder false --update-defaultsपहले से सहेजे गए डिफ़ॉल्ट को बंद कर देता है।) -
--fast-check: पूर्ण-फ़ाइल डिटेक्शन चलाने के बजाय केवल पहले 64 KiB की जाँच करें। -
--update-defaults: दिए गए सेटिंग्स कोconfig.iniमें डिफ़ॉल्ट के रूप में स्थायी करें।
carve विकल्प: --list (binwalk फ्रैगमेंट तालिका प्रिंट करें), --fragment N (सूचकांक द्वारा एक फ्रैगमेंट निकालें), --raw (हर फ्रैगमेंट निकालें, केवल हैंडलर-ज्ञात नहीं)।
नीचे दिए गए उदाहरणों में,
magic-extractorनिर्मित.exeहै। स्रोत से, इसेpython cli/main.pyसे बदलें — तर्क समान हैं।
उदाहरण
एक आर्काइव निकालें — आपको इसका प्रकार जानने की आवश्यकता नहीं है; यह स्वतः पहचाना जाता है:
magic-extractor extract mystery.bin
# extracts into mystery_extracted/ next to the file
किसी फ़ाइल की पहचान करें — उसे छुए बिना; दिखाता है कि प्रत्येक डिटेक्टर ने क्या देखा और कौन सा हैंडलर चलेगा:
magic-extractor identify setup.exe
File: setup.exe
[DIE] detect inno setup installer
Candidate handlers (in order):
- FormatInnoSetupHandler
किसी आर्काइव की सामग्री सूचीबद्ध करें (बिना निष्कर्षण):
magic-extractor list backup.7z
रिकर्सिव — आउटपुट के अंदर पाए गए आर्काइव निकालें (जैसे .tar.gz, या एक इंस्टॉलर जिसमें और आर्काइव हों), --max-depth स्तरों तक:
magic-extractor extract app-1.0.tar.gz --recursive
ब्रूटफोर्स — जब पहचान अनिश्चित हो, तो पहले पर रुकने के बजाय मेल खाने वाले हर हैंडलर को आज़माएँ:
magic-extractor extract weird-archive.dat --bruteforce
कार्व — बड़ी फ़ाइल के अंदर किसी ऑफसेट पर एम्बेडेड आर्काइव निकालें (फर्मवेयर इमेज के लिए सामान्य)। पहले निरीक्षण करें, फिर कार्व करें:
magic-extractor carve router-firmware.bin --list
IDX OFFSET SIZE NAME DESCRIPTION
0 0x00000000 793,720 pe Windows PE binary
1 0x000c1c78 2,495,983 lzma LZMA compressed data
magic-extractor carve router-firmware.bin # carve + extract the known blobs
magic-extractor carve router-firmware.bin --fragment 1 # carve only fragment #1
GUI
एक वैकल्पिक tkinter फ्रंट-एंड (gui/ में) CLI को रैप करता है — एक Universal-Extractor-शैली विंडो जिसमें extract, scan और carve मोड, ड्रैग-एंड-ड्रॉप, बैच कतार, रन इतिहास और एक प्राथमिकताएँ संवाद हैं। ब्रूटफोर्स रन विकल्पों के अंतर्गत उपलब्ध है। यह उसी main.py को शेल करता है, इसलिए पहचान और निष्कर्षण समान व्यवहार करते हैं।
python gui/main.py # launch the window
python gui/main.py <file> [outdir] # prefill the source (and destination)
python gui/main.py <file> /scan # prefill and start in identify mode
ड्रैग-एंड-ड्रॉप के लिए वैकल्पिक tkinterdnd2 पैकेज आवश्यक है (pip install -r gui/requirements.txt); इसके बिना भी विंडो काम करती है, केवल ड्रॉप समर्थन नहीं होता। यह अपने प्राथमिकताएँ संवाद से Explorer संदर्भ-मेनू प्रविष्टि भी पंजीकृत कर सकता है।
निर्माण (Windows)
cd cli
pyinstaller --onefile main.py --name magic-extractor --collect-data puremagic
फिर bin/, data/ और config.ini को dist/magic-extractor.exe के बगल में कॉपी करें।
CI यह स्वचालित रूप से करता है — देखें .github/workflows/release.yml।
लाइसेंस
MIT — देखें LICENSE.txt। नोट: cli/bin/ के अंतर्गत बंडल किए गए तृतीय-पक्ष एक्सट्रैक्टर/डिटेक्टर बाइनरी अपने स्वयं के लाइसेंस रखते हैं (कुछ स्वामित्व फ्रीवेयर हैं) और MIT द्वारा कवर नहीं हैं; वितरण से पहले उनकी पुनर्वितरण शर्तों को सत्यापित करें।
लेखक
- मुख्य डेवलपर: DSR! — [email protected]
- सभी योगदानकर्ताओं को धन्यवाद।