
Convierte información de símbolos y tipos ELF/DWARF al JSON intermedio de vol3.
dwarf2json es una utilidad de Go que procesa archivos que contienen información de símbolos y tipos para generar la salida JSON de Intermediate Symbol File (ISF) de Volatility3, adecuada para el análisis de Linux y macOS.
Para compilar (se requiere Go 1.18+):
$ go build
Para ejecutar:
$ ./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.
Nota: el procesamiento de archivos DWARF grandes requiere un mínimo de 8 GB de RAM.
dwarf2json admite el procesamiento de información DWARF y de tablas de símbolos de archivos ELF, y de símbolos de archivos de entrada System.map para producir ISF para el análisis de Linux.
El usuario puede seleccionar si desea incluir símbolos, tipos, o ambos para cada archivo de entrada.
$ ./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
Por ejemplo, para incluir símbolos y tipos de un archivo DWARF de un kernel de Linux determinado, se puede hacer con:
$ ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-4.4.0-137-generic > output.json
Los offsets de los símbolos extraídos de la información de la tabla de símbolos tienen prioridad sobre los extraídos de la información DWARF. Por lo tanto, los símbolos extraídos de los archivos especificados con la opción --elf-symbols tienen prioridad sobre los símbolos extraídos de los archivos especificados con --elf. Los offsets de los símbolos de System.Map, especificados con la opción --system-map, tienen la prioridad más alta. Si existe un conflicto entre las diferentes fuentes de información de símbolos, se utilizará el offset de System.Map.
Se permite proporcionar varios archivos de entrada para una misma opción. Por ejemplo, ./dwarf2json --elf file1 --elf file2 ... procesaría tanto file1 como file2. Cuando se encuentre información de símbolos o tipos en conflicto, los datos del último archivo especificado en la invocación del comando tendrán prioridad.
dwarf2json admite el procesamiento de información DWARF y de tablas de símbolos de archivos Mach-O para producir ISF para el análisis de macOS.
El usuario puede seleccionar si desea incluir símbolos, tipos, o ambos para cada archivo de entrada.
$ ./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
Por ejemplo, para incluir símbolos y tipos de un archivo DWARF de un kernel de macOS determinado y símbolos de un kernel de macOS, se puede hacer con:
$ ./dwarf2json mac --macho /path/kernel.dSYM/Contents/Resources/DWARF/kernel \
--macho-symbols /path/kernel > output.json
Los offsets de los símbolos extraídos de la información de la tabla de símbolos tienen prioridad sobre los extraídos de la información DWARF. Por lo tanto, los símbolos extraídos de los archivos especificados con la opción --macho-symbols tienen prioridad sobre los símbolos extraídos de los archivos especificados con --macho.
Se permite proporcionar varios archivos de entrada para una misma opción. Por ejemplo, ./dwarf2json --macho file1 --macho file2 ... procesaría tanto file1 como file2. Cuando se encuentre información de símbolos o tipos en conflicto, los datos del último archivo especificado en la invocación del comando tendrán prioridad.
Al procesar binarios universales FAT de Mach-O, es necesario utilizar la opción --arch para seleccionar la arquitectura de uno de los archivos Mach-O integrados.
Por ejemplo, la generación de un archivo JSON de ISF para la arquitectura i386 de un kit de depuración del kernel de OS X 10.7 se puede hacer con:
$ ./dwarf2json mac --arch i386 \
--macho mach_kernel.dSYM/Contents/Resources/DWARF/mach_kernel \
--macho-symbols mach_kernel > mach_kernel.json