
converter informações de símbolos e tipos ELF/DWARF no JSON intermediário do vol3
dwarf2json é um utilitário em Go que processa arquivos contendo informações de símbolos e tipos para gerar saída JSON de Arquivo de Símbolos Intermediário (ISF) do Volatility3, adequada para análise de Linux e macOS.
Para compilar (Go 1.18+ necessário):
$ go build
Para executar:
$ ./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: o processamento de arquivos DWARF grandes requer um mínimo de 8 GB de RAM.
O dwarf2json oferece suporte ao processamento de informações de DWARF e tabela de símbolos de arquivos ELF e de símbolos de arquivos de entrada System.map para produzir ISF para análise de Linux.
O usuário pode selecionar se deseja incluir símbolo, tipo ou ambos para cada arquivo 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 exemplo, para incluir símbolos e tipos de um determinado arquivo DWARF do kernel Linux, pode-se usar:
$ ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-4.4.0-137-generic > output.json
Os offsets de símbolos extraídos das informações da tabela de símbolos têm precedência sobre aqueles extraídos das informações DWARF. Assim, os símbolos extraídos de arquivos especificados com a opção --elf-symbols têm precedência sobre os símbolos extraídos de arquivos especificados com --elf. Os offsets de símbolos de System.Map, especificados com a opção --system-map, têm a maior precedência. Se houver conflito entre as diferentes fontes de informações de símbolos, o offset de System.Map será usado.
É permitido fornecer vários arquivos de entrada para uma determinada opção. Por exemplo, ./dwarf2json --elf file1 --elf file2 ... processaria tanto file1 quanto file2. Quando informações conflitantes de símbolos ou tipos forem encontradas, os dados do último arquivo especificado na invocação do comando terão precedência.
O dwarf2json oferece suporte ao processamento de informações de DWARF e tabela de símbolos de arquivos Mach-O para produzir ISF para análise de macOS.
O usuário pode selecionar se deseja incluir símbolo, tipo ou ambos para cada arquivo 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 exemplo, para incluir símbolos e tipos de um determinado arquivo DWARF do kernel macOS e símbolos de um kernel macOS, pode-se usar:
$ ./dwarf2json mac --macho /path/kernel.dSYM/Contents/Resources/DWARF/kernel \
--macho-symbols /path/kernel > output.json
Os offsets de símbolos extraídos das informações da tabela de símbolos têm precedência sobre aqueles extraídos das informações DWARF. Assim, os símbolos extraídos de arquivos especificados com a opção --macho-symbols têm precedência sobre os símbolos extraídos de arquivos especificados com --macho.
É permitido fornecer vários arquivos de entrada para uma determinada opção. Por exemplo, ./dwarf2json --macho file1 --macho file2 ... processaria tanto file1 quanto file2. Quando informações conflitantes de símbolos ou tipos forem encontradas, os dados do último arquivo especificado na invocação do comando terão precedência.
Ao processar binários universais FAT Mach-O, a opção --arch precisa ser usada para selecionar a arquitetura de um dos arquivos Mach-O incorporados.
Por exemplo, a geração do arquivo JSON ISF para a arquitetura i386 de um kit de depuração do kernel OS X 10.7 pode ser feita com:
$ ./dwarf2json mac --arch i386 \
--macho mach_kernel.dSYM/Contents/Resources/DWARF/mach_kernel \
--macho-symbols mach_kernel > mach_kernel.json