
أداة استخراج عالمية لنظام ويندوز تكتشف الملفات غير المعروفة وتوجّهها إلى أداة الاستخراج المضمّنة الصحيحة.
مستخرج السحر هو أداة استخراج شاملة لنظام ويندوز تتحقّق من هوية ملف عبر عدة كاشفات وتوجّهه إلى برنامج الاستخراج المرفق الصحيح. يهدف إلى تغطية صيغ الضغط السائدة، وبرامج التثبيت التي تراها فعليًا اليوم، ومجموعة من أدوات الأرشفة الأقل شيوعًا.
يكتشف تلقائيًا أكثر من 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 (انظر الواجهة الرسومية).test: ملفات نموذجية لكل صيغة (معدّات لاختبارات الاستخراج/الكشف).tools: أدوات المطوّرين (generate_data.py — يبني ملفات البيانات من وحدات المعالجة).يبقي البناء المُجمَّع ملفات bin/ وdata/ وconfig.ini خارج ملف exe بحيث يمكن تحديثها باستبدال الملفات؛ ويجدها محلّل المسار في main.py بجانب الملف التنفيذي (عند التجميد) أو داخل cli/ (في بيئة التطوير).
للاستخراج العادي، تعمل الكاشفات بهذا الترتيب مع خروج مبكر — أول كاشف يعثر على معالج معروف يفوز (الأرخص أولًا، لذلك عادةً ما يتم تخطّي نموذج التعلّم الآلي):
data/signatures.json؛ تسمّي أدوات أرشفة تفوتها المحركات (bcm وdgca وkgb وuharc وalzip وfreearc وغيرها) دون أي عملية خارجية.يساهم كل كاشف بشكل فريد (إنها متكاملة وليست زائدة عن الحاجة): قاعدة التواقيع تسمّي أدوات الأرشفة التي تفوتها المحركات، ويتعامل DIE مع برامج التثبيت/PE، ويلتقط binwalk بعض الأنواع التي تفوتها البقية، بينما يغطي puremagic/Magika أنواع MIME.
يقوم PureMagic 2.x أيضًا بفحص عميق مدرك للمحتوى عندما يستلم الملف كاملًا. تحليل الملف الكامل هو الإعداد الافتراضي؛ ويقوم معدِّل --fast-check الاختياري بتمرير أول 64 كيلوبايت فقط عندما تكون سرعة الإقلاع أهم من الفحص العميق.
تعلن كل وحدة معالجة عن مؤشراتها الخاصة عبر detection_mimes() / detection_names() / detection_signatures()؛ ويقوم tools/generate_data.py بتجميعها في data/handlers.json وdata/signatures.json (مع إمكانية دمج data/extra_detections.json اختياري في الأعلى). لا يُستخدم TrID.
ملاحظة: أي صيغة تفتقد تواقيعها في
magic_data.jsonالخاص بـ puremagic (أو التي يبلّغ عنها puremagic فقط كنوع عامapplication/octet-stream)، يجب أن تعلن عن إدخالdetection_signatures()مخصص في معالجها — وإلا فلن يتم اكتشافها عبر المحتوى.
--bruteforce يعطّل الخروج المبكر: يعمل كل كاشف ويتم تجربة كل معالج تم اكتشافه بدوره (مفيد عندما تكون التخمينة الأولى خاطئة).carve أيضًا خريطة الإزاحات من binwalk لاستخراج الأرشيفات المضمّنة عند إزاحات عشوائية (مثلًا داخل صور البرامج الثابتة).توجد خريطة التوجيه من الكشف إلى المعالج في data/handlers.json (منسّقة يدويًا، تُحمَّل وقت التشغيل)؛ وتوجد قائمة حظر للرموز العامة في data/detection_blacklist.json.
راجع formats.md للقائمة الكاملة للصيغ ومعالجاتها.
لإضافة دعم لصيغة جديدة، راجع docs/adding-a-handler.md — الدليل الشامل من البداية إلى النهاية (صنف المعالج، إعلان الكشف، البحث في DIE/TrID، تواقيع magic، إعادة توليد بيانات التوجيه، تجميع الأداة، والاختبار).
معظم المستخدمين يكتفون بتنزيل الإصدار الجاهز (راجع بدء سريع). للتشغيل من المصدر: مطلوب بايثون 3.12 أو أحدث.
git clone <repo-url>
cd magic-extractor
pip install -r cli/requirements.txt
يستخدم مستخرج السحر أوامر فرعية:
python cli/main.py extract <path> [output_dir] [options] # كشف واستخراج
python cli/main.py identify <path> # تقرير النوع + المعالجات المرشحة
python cli/main.py list <path> # سرد محتويات الأرشيف
python cli/main.py carve <path> [output_dir] [options] # اقتطاع الأرشيفات المضمّنة (إزاحات binwalk)
المسار المجرّد دون أمر فرعي يُفترض أنه 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>: كتابة سجل لكل تشغيل في مجلد الإخراج.
خيارات carve: --list (طباعة جدول أجزاء binwalk)، --fragment N (اقتطاع جزء واحد
حسب الفهرس)، --raw (اقتطاع كل الأجزاء، وليس فقط المعروفة للمعالجات).
في الأمثلة أدناه،
magic-extractorهو ملف.exeالمُجمَّع. من المصدر، استبدله بـpython cli/main.py— الوسائط متطابقة.
استخراج أرشيف — لا تحتاج إلى معرفة نوعه؛ يتم اكتشافه تلقائيًا:
magic-extractor extract mystery.bin
# يستخرج إلى mystery_extracted/ بجانب الملف
تعرّف على ملف دون لمسه — يعرض ما رآه كل كاشف وأي معالج سيتم تشغيله:
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
Bruteforce — عندما يكون الكشف غير مؤكد، جرّب كل معالج طابق بدل التوقف عند الأول:
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 # اقتطاع + استخراج الكتل المعروفة
magic-extractor carve router-firmware.bin --fragment 1 # اقتطاع الجزء رقم 1 فقط
واجهة أمامية اختيارية مبنية على tkinter (في gui/) تغلّف CLI — نافذة بأسلوب Universal-Extractor
تحتوي أوضاع extract وscan وcarve، وسحب وإفلات، وطابور معالجة بالدفعات، وسجل تشغيل،
وحوار تفضيلات. خيار Bruteforce متاح ضمن خيارات التشغيل. تستدعي نفس main.py،
لذا يكون الكشف والاستخراج متطابقين تمامًا.
python gui/main.py # تشغيل النافذة
python gui/main.py <file> [outdir] # تعبئة المصدر مسبقًا (والوجهة)
python gui/main.py <file> /scan # تعبئة المصدر والبدء في وضع التعرف
يتطلب السحب والإفلات الحزمة الاختيارية tkinterdnd2 (pip install -r gui/requirements.txt)؛
بدونها تعمل النافذة لكن بدون دعم الإفلات. يمكنها أيضًا تسجيل إدخال في قائمة السياق
لمستكشف ويندوز من حوار التفضيلات.
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؛ تحقق من شروط إعادة توزيعها قبل الشحن.
(كل خيار يأخذ قيمته من config.ini عند حذفه؛ يمكن دمجه مع
--update-defaults لحفظ القيمة المعطاة — مثلًا --open-output-folder false --update-defaults يطفئ افتراضيًا محفوظًا سابقًا.)
--fast-check: فحص أول 64 كيلوبايت فقط بدل تشغيل كشف الملف الكامل.
--update-defaults: حفظ الإعدادات المعطاة كافتراضيات في config.ini.