
تحديد واستخراج البرامج الثابتة لإنترنت الأشياء
تحديد واستخراج البرامج الثابتة لإنترنت الأشياء (IoT)
تحدد moria الملفات والبنى المضمّنة داخل البرامج الثابتة وصور إنترنت الأشياء (أنظمة الملفات، والنوى، ومحمّلات الإقلاع، والأرشيفات، والمفاتيح) وتفكّ ضغط معظم ما تجده، دون صلاحيات الجذر. تُبلّغ عن كل اكتشاف بإزاحة بايتية ونوع ودرجة ثقة، وتتحدث بصيغة JSON نظيفة بحيث يمكن للسكربتات ووكلاء LLM تشغيلها بسهولة كما يفعل البشر.
upx -d.openat + O_NOFOLLOW (لا اجتياز مسارات ولا هروب عبر الروابط الرمزية)، وفكّ الضغط محدود ضد القنابل.-j) للأدوات، مع الإزاحات ودرجة الثقة في كل اكتشاف.cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
cmake --install build --prefix ~/.local # or /usr/local (needs sudo)
يتطلب البناء cmake، ومترجم C++20، ومكتبات التطوير zlib وliblzma وlz4 وzstd (أدوات فك الضغط التي يستخدمها --extract). على Debian/Ubuntu: sudo apt install cmake g++ zlib1g-dev liblzma-dev liblz4-dev libzstd-dev. للبناء بدون إحداها (بناء أدنى أو للتعريف فقط)، قم بالتهيئة باستخدام -DMORIA_OPTIONAL_CODECS=ON وسيتم ببساطة تعطيل الترميز المفقود.
إن ملف moria التنفيذي مكتفٍ ذاتيًا: جميع مجموعات التوقيعات مضمّنة وقت البناء، لذا يعمل الملف التنفيذي في أي مكان دون تثبيت أي شيء إلى جانبه (cp build/moria ~/.local/bin كافٍ، والملف التنفيذي المنزّل من الإصدارات يعمل مباشرة). لاستخدام توقيعات خارجية بدلًا من المضمّنة (لاختبار ملف .toml جديد دون إعادة البناء، مثلًا)، مرّر --sigs DIR أو عيّن $MORIA_SIGDIR.
المخرجات مقروءة للبشر افتراضيًا. مرّر -j للحصول على JSON.
moria <file> # identify: a findings tree with offsets, types, and confidence
moria <dir> # scan a tree: a type summary plus the notable files
moria -j <file> # JSON, for tools and agents
moria -e <file> # extract to <file>.extracted/ (-C DIR to choose the output dir)
moria -c <file> # carve raw byte ranges to <file>.carved/ (no parsing)
moria -E <file> # entropy pass: flag unidentified / possibly-encrypted regions
moria --list <archive> # list tar/cpio/zip/cab/CE-ROM members without extracting
moria --broad <path> # also load the ~2.5k general file-type signatures
moria --unpack-executables # unpack executables inside other extracted output (cfbf/msi files)
moria --help
يقوم -e بفك ضغط الصيغ المتعرّف عليها تحت <file>.extracted/، بدليل واحد لكل منطقة (0x<offset>-<type>/)، إضافةً إلى manifest.json يربط الإزاحات بالمسارات. يتكرّر تلقائيًا داخل الحاويات المتداخلة ويعيد بناء صور UBI مجلّدًا بمجلّد. تحدّ الحواجز (--depth، --max-files، --max-bytes، وسقف لنسبة فك الضغط) من المدخلات الخبيثة؛ ويوقف الحاجز المُفعَّل ذلك الفرع مع إرجاع كل ما تم استرداده.
يُفكّ الضغط داخل العملية، دون أدوات خارجية ودون sudo:
.msi، ISO 9660، Android sparse، Android boot.hv)signatures/ هو النواة المكتوبة يدويًا: أنظمة ملفات البرامج الثابتة، والحاويات، والنوى، والصيغ الشائعة، كلٌّ منها مع تحقّق بنيوي.signatures-firmware/ يحوي قيم magic لحاويات البرامج الثابتة الخاصة بالمورّدين ويُحمَّل افتراضيًا.signatures-generated/ يحوي نحو 2.5 ألف قيمة magic لأنواع ملفات عامة مشتقّة من قاعدة بيانات magic الخاصة بـ file(1) ولا يُحمَّل إلا مع --broad.لإضافة صيغة، ضع ملف .toml في signatures/. لا يلزم مُدقِّق C++ صغير إلا للفحوصات التي لا تستطيع الطبقة التصريحية التعبير عنها، مثل CRCs أو المؤشرات العابرة للكتل. دلالات الحقول (magic_offset، endianness الخاصة بـ magic، التوقيعات القصيرة، القيود اللينة، عقد المُدقِّق) موثّقة في SIGAUTHORING.md.
يقوم moria بالتعريف البنيوي والاستخراج والحفر. أما فحص الأسرار/بيانات الاعتماد، وSBOM، وCVE، وتحليل التراخيص فهي أداة منفصلة (mithril).
MIT، انظر LICENSE.
بعض معالجة صيغ الأقراص هي إعادة تنفيذ نظيفة للخوارزميات في مشاريع مفتوحة المصدر أخرى، مكتوبة بشكل مستقل مقابل طبقة الإدخال/الإخراج الخاصة بـ moria (دون نسخ أي شيفرة مصدرية): مفكّك ضغط UCL/NRV2B ومرشّحات CTO من UPX/UCL (GPL-2.0، الخوارزميات فقط)، وتخطيط metadata-commit وCTZ skip-list في littlefs (BSD-3-Clause)، وتخطيط الصفحة/الكائن في SPIFFS (MIT).