
IoT फर्मवेयर पहचान और निष्कर्षण
IoT फर्मवेयर पहचान और निष्कर्षण
moria फर्मवेयर और IoT इमेजों के अंदर सन्निहित फ़ाइलों और संरचनाओं (फ़ाइलसिस्टम, कर्नेल, बूटलोडर, आर्काइव, कुंजियाँ) की पहचान करता है और जो कुछ भी पाता है उसका अधिकांश भाग बिना root के अनपैक कर देता है। यह प्रत्येक निष्कर्ष को बाइट ऑफ़सेट, प्रकार और एक विश्वास स्कोर के साथ रिपोर्ट करता है, और यह साफ़-सुथरा 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 सेट करें।
आउटपुट डिफ़ॉल्ट रूप से मानव-पठनीय होता है। JSON के लिए -j पास करें।
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/ वेंडर फ़र्मवेयर-कंटेनर मैजिक रखता है और डिफ़ॉल्ट रूप से लोड होता है।signatures-generated/ में file(1) के मैजिक डेटाबेस से व्युत्पन्न लगभग 2.5k सामान्य फ़ाइल-प्रकार मैजिक हैं और यह केवल --broad के साथ लोड होता है।किसी प्रारूप को जोड़ने के लिए, signatures/ में एक .toml डालें। एक छोटा C++ वैलिडेटर केवल उन जाँचों के लिए आवश्यक है जिन्हें डिक्लेरेटिव लेयर व्यक्त नहीं कर सकती, जैसे CRC या क्रॉस-ब्लॉक पॉइंटर। फ़ील्ड सेमांटिक्स (magic_offset, magic endianness, short signatures, soft constraints, वैलिडेटर कॉन्ट्रैक्ट) का दस्तावेज़ीकरण SIGAUTHORING.md में है।
moria संरचनात्मक पहचान, निष्कर्षण, और कार्विंग करता है। सीक्रेट/क्रेडेंशियल स्कैनिंग, SBOM, CVE, और लाइसेंस विश्लेषण एक अलग टूल है (mithril)।
MIT, देखें LICENSE।
कुछ ऑन-डिस्क प्रारूप प्रबंधन अन्य ओपन-सोर्स परियोजनाओं में मौजूद एल्गोरिदम का एक स्वच्छ पुनःकार्यान्वयन है, जो moria की अपनी I/O लेयर के विरुद्ध स्वतंत्र रूप से लिखा गया है (कोई स्रोत प्रतिलिपि नहीं): UPX/UCL से UCL/NRV2B डीकंप्रेसर और CTO अनफ़िल्टर (GPL-2.0, केवल एल्गोरिदम), और littlefs का मेटाडेटा-कमिट और CTZ स्किप-लिस्ट लेआउट (BSD-3-Clause), और SPIFFS का पेज/ऑब्जेक्ट लेआउट (MIT)।