Простейший способ неразрушающего заражения файла состоит в расширении последней секции/сегмента жертвы и дозаписи своего тела в ее конец (далее по тексту просто "секции", хотя применительно к ELF-файлам это будет несколько некорректно, т.к. системный загрузчик исполняемых ELF-файлов работает исключительно с сегментами, а секции игнорирует). Строго говоря, это утверждение не совсем верно. Последней секцией файла, как правило, является секция .bss, предназначенная для хранения неинициализированных данных. Внедряться сюда можно, но бессмысленно, поскольку загрузчик не настолько глуп, чтобы тратить драгоценное процессорное время на загрузку неинициализированных данных с медленного диска. Правильнее было бы сказать "последней значимой секции", но давайте не будем придираться, это ведь не научная статья, верно?
Перед секций .bss
обычно располагается секция .data, содержащая инициализированные данные. Вот она-то и становится основным объектом вирусной атаки! Натравив дизассемблер на исследуемый файл, посмотрите – в какой секции расположена точка входа. И, если этой секцией окажется секция данных (как например в случае, изображенном в листинге 5), исследуемый файл с высокой степенью вероятности заражен вирусом.
При внедрении в a.out файл вирус в общем случае должен проделать следующие действия:
q считав заголовок файла, убедиться, что это действительно a.out файл;
q увеличить поле a_data на величину, равную размеру своего тела;
q скопировать себя в конец файла;
q скорректировать содержимое поля a_entry для перехвата управления (если вирус действительно перехватывает управление таким образом);
Внедрение в ELF-файлы происходит несколько более сложным образом:
q вирус открывает файл и, считывая его заголовок, убеждается, что это действительно ELF;