Софт для анализа бинарных файлов в Linux
Список программ для работы с двоичными файлами в операционной системе Linux.
GDB
GNU Debugger (GDB) - отладчик GDB хорош не только для отладки приложений с ошибками. Он также может использоваться для того, чтобы узнать о самом нижнем уровне управления программой, изменить этот нижний уровень управления программой, изменить код, регистры и структуры данных. Эти функции являются крайне полезными в процессе поиска уязвимостей программного обеспечения, изучения структуры и принципов работы вредоносного кода. Отладчик GDB работает с двоичными файлами ELF и процессами Linux.
Objdump
Objdump из GNU binutils. Дамп объекта (objdump) - простое и понятное решение для быстрого дизассемблирования программного кода. Objdump отлично подходит для дизассемблирования простых и неповреждённых двоичных файлов, но все его ограничения сразу выплывут на поверхность при попытке использовать objdump для любого, действительно сложного реверса, особенно в ситуациях, использования данной программы против вредоносного ПО. Основная слабость objdump заключается в том, что он, в своей работе, полностью полагается на заголовки раздела ELF и не выполняет необходимый анализ нижнего уровня управления. Оба эти ограничения значительно снижают надёжность программы, что приводит к невозможности правильно дизассемблировать код внутри двоичного файла, а возможно, что даже к возникновению ошибок при простой попытке открыть двоичный файл, не имеющий в своей структуре заголовков разделов. Однако, для многих простых и обычных задач, он идеально подходит. Например, при дизассемблировании обычных двоичных файлов, которые не расширяются, не удаляются, не используют обфускацию. Он может читать все распространенные типы двоичных ELF файлов. Вот несколько примеров использования программы objdump:
• Просмотрите все данные / код в каждом разделе файла ELF:
objdump -D <elf_object>
• Просмотр только программного кода в файле ELF:
objdump -d <elf_object>
• Просмотреть все символы:
objdump -tT <elf_object>
Objcopy
Objcopy из GNU binutils. Копирование объекта (Objcopy) - невероятно мощный и миниатюрный инструмент, но при этом весь его функционал крайне тяжело уместить всего в нескольких предложениях. Я настоятельно рекомендую вам прочитать страницы руководства для изучения полного описания данной программы. Objcopy можно использовать для анализа и изменения объектов ELF любого типа, хотя некоторые из его функций специфичны для определенных типов объектов ELF. Objcopy часто используется для изменения или копирования раздела ELF в двоичный файл ELF или обратно, раздела ELF из файла.
Пример использования objcopy:
Для копирования секции .data из объекта ELF в файл, используйте следующую команду:
objcopy –only-section=.data <infile> <outfile>
Strace
Трассировка системного вызова (strace) - это инструмент, основанный на системном вызове ptrace (2), он
использует запрос PTRACE_SYSCALL в цикле для отображения информации о системном вызове в запущенной программе, а также сигналов, которые
были перехвачены во время исполнения программы. Эта программа может быть очень полезна для отладки или просто для сбора информации о том, какие именно системные вызовы вызываются во время исполнения программного кода.
Команда strace, используемая для трассировки базовой программы:
strace / bin / ls -o ls.out
Команда strace, используемая для подключения к существующему процессу, выглядит следующим образом:
strace -p <pid> -o daemon.out
Первоначальный вывод команды (по умолчанию) покажет вам номер дескриптора файла каждого системного вызова, который принимает в качестве своего аргумента дескриптор файла, например:
SYS_read (2, buf, sizeof (buf));
Если вы хотите увидеть все данные, которые считывались в дескриптор файла 2, вы можете выполнить следующую команду:
strace -e read = 2 / bin / ls
Вы также можете использовать параметр -e write = fd для просмотра записанных данных. Программа strace - отличный инструмент, и у вас, несомненно, будет целый ряд причин, чтобы его использовать.
ltrace
Библиотека трассировки (ltrace) - еще один мощный инструмент, который очень похож на strace. ltrace работает аналогично, но фактически анализирует информацию о связывании разделяемых библиотек программы и печатает используемые библиотечные функции.
Вы можете увидеть системные вызовы в дополнение к вызовам библиотечных функций при помощи параметра -s.
Команда ltrace предназначена для предоставления более детальной информации, поскольку она анализирует динамический сегмент исполняемого файла и печатает фактические символы / функции из общих и статические библиотеки.
Пример использования ltrace:
ltrace <program> -o program.out
ftrace
Функция трассировки (ftrace) - это инструмент, очень похожий на ltrace, он
показывает вызовы функций внутри самого двоичного файла.
Программу ftrace можно скачать по следующему адресу: https://github.com/elfmaster/ftrace.
Readelf
Программа readelf - это пожалуй, один из самых полезных инструментов для анализа двоичных файлов формата ELF. Readelf анализирует каждый бит данных, используемый в формате ELF и позволяет получить большое количество информации об объекте ещё до его реверс инжиниринга. Readelf используется для сбора информации о символах, сегментах, разделах, записях релокации, динамическом связывании данных и ещё много другой полезной информации. Команда readelf - это
Швейцарский армейский нож для файлов формата ELF.
Примеры некоторых из наиболее часто используемых функций readelf:
- Получение таблицы заголовков раздела:
readelf -S <object>
- Получение таблицы заголовков программы:
readelf -l <object>
- Получение таблицы символов:
readelf -s <object>
- Получение данных заголовка файла формата ELF:
readelf -e <object>
- Получение записи о релокациях:
readelf -r <object>
- Получение динамического сегмента:
readelf -d <object>
Послесловие
А какие программы для анализа бинарных файлов в операционной системе Linux знаете и используете Вы? Поделитесь своим личным опытом и расскажите об этом в комментариях!
До новых встреч!