
ELF/DWARF प्रतीक और प्रकार जानकारी को vol3 के मध्यवर्ती JSON में परिवर्तित करें
dwarf2json एक Go उपयोगिता है जो सिंबल और प्रकार (type) जानकारी वाली फाइलों को संसाधित करके Volatility3 के लिए इंटरमीडिएट सिंबल फ़ाइल (ISF) JSON आउटपुट उत्पन्न करती है, जो Linux और macOS विश्लेषण के लिए उपयुक्त है।
बिल्ड करने के लिए (Go 1.18+ आवश्यक):
$ go build
चलाने के लिए:
$ ./dwarf2json --help
Usage: ./dwarf2json COMMAND
A tool for generating intermediate symbol file (ISF)
Commands:
linux generate ISF for Linux analysis
mac generate ISF for macOS analysis
Options:
-h, --help Show this screen.
-v, --version Show tool and output schema version.
नोट: बड़ी DWARF फाइलों को संसाधित करने के लिए न्यूनतम 8GB RAM आवश्यक है।
dwarf2json Linux विश्लेषण के लिए ISF उत्पन्न करने हेतु ELF फाइलों से DWARF और सिंबल टेबल जानकारी तथा System.map इनपुट फाइलों से सिंबल प्रोसेस करने का समर्थन करता है।
उपयोगकर्ता प्रत्येक इनपुट फाइल के लिए सिंबल, प्रकार, या दोनों को शामिल करने का चयन कर सकता है।
$ ./dwarf2json linux --help
Usage: dwarf2json linux [OPTIONS]
--elf PATH ELF file PATH to extract symbol and type information
--elf-symbols PATH ELF file PATH to extract only symbol information
--elf-types PATH ELF file PATH to extract only type information
--system-map PATH System.Map file PATH to extract symbol information
उदाहरण के लिए, किसी दिए गए Linux कर्नेल DWARF फाइल के लिए सिंबल और प्रकार शामिल करने हेतु यह किया जा सकता है:
$ ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-4.4.0-137-generic > output.json
सिंबल टेबल जानकारी से निकाले गए सिंबलों के सिंबल ऑफसेट, DWARF जानकारी से निकाले गए सिंबलों पर वरीयता लेते हैं। इस प्रकार, --elf-symbols फ्लैग के साथ निर्दिष्ट फाइलों से निकाले गए सिंबल, --elf के साथ निर्दिष्ट फाइलों से निकाले गए सिंबलों पर वरीयता लेते हैं। --system-map फ्लैग के साथ निर्दिष्ट System.Map से सिंबलों के सिंबल ऑफसेट की सर्वोच्च वरीयता होती है। यदि विभिन्न सिंबल जानकारी स्रोतों के बीच कोई विरोध है, तो System.Map का ऑफसेट उपयोग किया जाएगा।
किसी दिए गए फ्लैग के लिए कई इनपुट फाइलें प्रदान करने की अनुमति है। उदाहरण के लिए, ./dwarf2json --elf file1 --elf file2 ... दोनों file1 और file2 को प्रोसेस करेगा। जब परस्पर विरोधी सिंबल या प्रकार जानकारी का सामना होता है, तो कमांड आमंत्रण में निर्दिष्ट अंतिम फाइल का डेटा वरीयता लेगा।
dwarf2json macOS विश्लेषण के लिए ISF उत्पन्न करने हेतु Mach-O फाइलों से DWARF और सिंबल टेबल जानकारी प्रोसेस करने का समर्थन करता है।
उपयोगकर्ता प्रत्येक इनपुट फाइल के लिए सिंबल, प्रकार, या दोनों को शामिल करने का चयन कर सकता है।
$ ./dwarf2json mac --help
Usage: dwarf2json mac [OPTIONS]
--arch NAME architecture for universal FAT files. NAME is one of {i386|x86_64}
--macho PATH Mach-O file PATH to extract symbol and type information
--macho-symbols PATH Mach-O file PATH to extract only symbol information
--macho-types PATH Mach-O file PATH to extract only type information
उदाहरण के लिए, किसी दिए गए macOS कर्नेल DWARF फाइल के लिए सिंबल और प्रकार, तथा macOS कर्नेल से सिंबल शामिल करने हेतु यह किया जा सकता है:
$ ./dwarf2json mac --macho /path/kernel.dSYM/Contents/Resources/DWARF/kernel \
--macho-symbols /path/kernel > output.json
सिंबल टेबल जानकारी से निकाले गए सिंबलों के ऑफसेट, DWARF जानकारी से निकाले गए सिंबलों पर वरीयता लेते हैं। इस प्रकार, --macho-symbols फ्लैग के साथ निर्दिष्ट फाइलों से निकाले गए सिंबल, --macho के साथ निर्दिष्ट फाइलों से निकाले गए सिंबलों पर वरीयता लेते हैं।
किसी दिए गए फ्लैग के लिए कई इनपुट फाइलें प्रदान करने की अनुमति है। उदाहरण के लिए, ./dwarf2json --macho file1 --macho file2 ... दोनों file1 और file2 को प्रोसेस करेगा। जब परस्पर विरोधी सिंबल या प्रकार जानकारी का सामना होता है, तो कमांड आमंत्रण में निर्दिष्ट अंतिम फाइल का डेटा वरीयता लेगा।
Mach-O यूनिवर्सल FAT बाइनरीज़ को प्रोसेस करते समय, एम्बेडेड Mach-O फाइलों में से किसी एक के लिए आर्किटेक्चर चुनने हेतु --arch फ्लैग का उपयोग करना आवश्यक है।
उदाहरण के लिए, OS X 10.7 कर्नेल डीबग किट के i386 आर्किटेक्चर के लिए ISF JSON फाइल उत्पन्न करना निम्न प्रकार किया जा सकता है:
$ ./dwarf2json mac --arch i386 \
--macho mach_kernel.dSYM/Contents/Resources/DWARF/mach_kernel \
--macho-symbols mach_kernel > mach_kernel.json