
Convertire le informazioni su simboli e tipi ELF/DWARF nel JSON intermedio di vol3.
dwarf2json è un'utilità Go che elabora file contenenti informazioni su simboli e tipi per generare l'output JSON dell'Intermediate Symbol File (ISF) di Volatility3, adatto per l'analisi di Linux e macOS.
Per compilare (richiede Go 1.18+):
$ go build
Per eseguire:
$ ./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: l'elaborazione di file DWARF di grandi dimensioni richiede un minimo di 8GB di RAM.
dwarf2json supporta l'elaborazione delle informazioni DWARF e della tabella dei simboli da file ELF e dei simboli da file di input System.map per produrre ISF per l'analisi di Linux.
L'utente può selezionare se includere simboli, tipi, o entrambi per ciascun file di input.
$ ./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
Ad esempio, per includere simboli e tipi per un dato file DWARF del kernel Linux si può usare:
$ ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-4.4.0-137-generic > output.json
Gli offset dei simboli estratti dalle informazioni della tabella dei simboli hanno precedenza su quelli estratti dalle informazioni DWARF. Pertanto, i simboli estratti dai file specificati con il flag --elf-symbols hanno precedenza sui simboli estratti dai file specificati con --elf. Gli offset dei simboli da System.Map, specificati con il flag --system-map, hanno la precedenza più alta. In caso di conflitto tra le diverse fonti di informazioni sui simboli, verrà utilizzato l'offset di System.Map.
È consentito fornire più file di input per un dato flag. Ad esempio, ./dwarf2json --elf file1 --elf file2 ... elaborerebbe sia file1 che file2. Quando si incontrano informazioni contrastanti su simboli o tipi, i dati dell'ultimo file specificato nell'invocazione del comando avranno la precedenza.
dwarf2json supporta l'elaborazione delle informazioni DWARF e della tabella dei simboli da file Mach-O per produrre ISF per l'analisi di macOS.
L'utente può selezionare se includere simboli, tipi, o entrambi per ciascun file di input.
$ ./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
Ad esempio, per includere simboli e tipi per un dato file DWARF del kernel macOS e i simboli di un kernel macOS si può usare:
$ ./dwarf2json mac --macho /path/kernel.dSYM/Contents/Resources/DWARF/kernel \
--macho-symbols /path/kernel > output.json
Gli offset dei simboli estratti dalle informazioni della tabella dei simboli hanno precedenza su quelli estratti dalle informazioni DWARF. Pertanto, i simboli estratti dai file specificati con il flag --macho-symbols hanno precedenza sui simboli estratti dai file specificati con --macho.
È consentito fornire più file di input per un dato flag. Ad esempio, ./dwarf2json --macho file1 --macho file2 ... elaborerebbe sia file1 che file2. Quando si incontrano informazioni contrastanti su simboli o tipi, i dati dell'ultimo file specificato nell'invocazione del comando avranno la precedenza.
Quando si elaborano binari universali FAT Mach-O, il flag --arch deve essere usato per selezionare l'architettura per uno dei file Mach-O incorporati.
Ad esempio, generare il file JSON ISF per l'architettura i386 di un debug kit del kernel OS X 10.7 si può fare con:
$ ./dwarf2json mac --arch i386 \
--macho mach_kernel.dSYM/Contents/Resources/DWARF/mach_kernel \
--macho-symbols mach_kernel > mach_kernel.json