
Внедряет код в ELF-исполняемые файлы после сборки

drow — это утилита командной строки, используемая для внедрения кода и перехвата точки входа ELF-исполняемых файлов (после сборки). Она принимает немодифицированные ELF-исполняемые файлы на вход и экспортирует изменённый ELF, содержащий встроенную пользовательскую полезную нагрузку, которая выполняется во время работы.
Drow выполняет следующие шаги для создания нового модифицированного ELF:
sh_size последней секции (в сегменте) и p_memsz/p_filesz программного заголовка на размер пользовательской полезной нагрузки.sh_offset заголовков секций и p_offset программных заголовков (сдвигает секции и сегменты вниз, чтобы освободить место для полезной нагрузки и небольшого «stager stub»).e_shoff, e_phoff и т.д.).e_entry ELF-заголовка (смещение точки входа ELF) так, чтобы он указывал на внедрённый код.Помимо внедрения пользовательской полезной нагрузки, drow внедряет небольшой код-заглушку, которая добавляется в начало полезной нагрузки. Эта заглушка предназначена для вызова полезной нагрузки. Если полезная нагрузка написана так, чтобы возвращать управление вызывающему, то после её возврата stager выполняет хвостовой вызов в _start, восстанавливая выполнение, чтобы программа могла работать как задумано.
Установите gcc и scons. Затем запустите scons из корня каталога.
Помимо сборки drow, этот проект также собирает полезную нагрузку для Linux x86-64 с именем rappers_delight.bin, которая просто выводит данные в stdout. Её можно использовать для тестирования. В настоящее время drow работает только с ELF64-файлами, предназначенными для x86-64.
В этой области было проделано много работы с открытым исходным кодом. Я рекомендую также ознакомиться со следующими проектами и связанными с ними публикациями: