
تحويل معلومات رموز وأنواع ELF/DWARF إلى JSON الوسيط الخاص بـ vol3
dwarf2json هي أداة بلغة Go تعالج الملفات التي تحتوي على معلومات الرموز والأنواع لتوليد مخرجات JSON لملف الرموز الوسيط (ISF) الخاصة بـ Volatility3 المناسبة لتحليل 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 معالجة معلومات DWARF وجدول الرموز من ملفات ELF والرموز من ملفات الإدخال System.map لإنتاج ISF لتحليل Linux.
يمكن للمستخدم اختيار تضمين الرموز أو الأنواع أو كليهما لكل ملف إدخال.
$ ./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
على سبيل المثال، لتضمين الرموز والأنواع لملف DWARF معين لنواة Linux يمكن القيام بذلك باستخدام:
$ ./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 معالجة معلومات DWARF وجدول الرموز من ملفات Mach-O لإنتاج ISF لتحليل macOS.
يمكن للمستخدم اختيار تضمين الرموز أو الأنواع أو كليهما لكل ملف إدخال.
$ ./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
على سبيل المثال، لتضمين الرموز والأنواع لملف DWARF معين لنواة macOS والرموز من نواة 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، يجب استخدام خيار --arch لتحديد البنية المعمارية لأحد ملفات Mach-O المضمنة.
على سبيل المثال، يمكن توليد ملف ISF JSON لبنية i386 الخاصة بعدة تصحيح أخطاء نواة OS X 10.7 باستخدام:
$ ./dwarf2json mac --arch i386 \
--macho mach_kernel.dSYM/Contents/Resources/DWARF/mach_kernel \
--macho-symbols mach_kernel > mach_kernel.json