
Преобразование информации о символах и типах ELF/DWARF в промежуточный JSON vol3
dwarf2json — это утилита на Go, которая обрабатывает файлы, содержащие информацию о символах и типах, для генерации JSON-вывода Intermediate Symbol File (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-файлов требует минимум 8 ГБ ОЗУ.
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. При обнаружении конфликтующей информации о символах или типах данные из последнего файла, указанного в команде, будут иметь приоритет.
При обработке универсальных FAT-бинарников Mach-O необходимо использовать флаг --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