EXE в заложниках

Крис Касперски ака мыщъх

Хакер, номер #077, стр. 077-116-1

(FreeBSD@smtp.ru)

Основы создания самоходного программного обеспечения

Конструирование вирусов - отличный стимул к изучению ассемблера! И хотя вирус в принципе можно написать и на Бэйсике, это будет неправильный вирус! Настоящие хакеры пишут только на FASM'е и только под Pain/Hypocrisy или на худой конец под группу Absu - запрещенную в большинстве стран Европы. ОК! Затариваемся всем необходимым, надеваем наушники, запускаем Multi-Edit или TASMED и погружаемся в мрачный chemical excrement кибернетического мира, ряды которого скоро пополняется еще одним злобным созданием.

[о вирусах и потоках]

Внедрение кода вируса в исполняемый файл - достаточно сложный и мучительней процесс. Как минимум для этого требуется изучить формат PE-файла и освоить десятки API-функций. Такими темпами мы не накодим вируса и за сезон, а хочется получить его прямо здесь и сейчас (накодим-накодим, в ближайших номерах читай о создании настоящего PE-вируса – прим. Горл). Но хакеры мы или нет? Файловая система NTFS (основная файловая система Windows XP) содержит такую фичу как "потоки" (stream) они же "атрибуты". Внутри одного файла может существовать несколько независимых потоков данных.

Имя потока отделяется от имени файла знаком ":", например: my_file:stream. Основное тело файла при этом хранится в безымянном потоке. Как ты уже, наверное, понял, мы так же можем создавать и свои потоки. Заходим в FAR, давим <Shift-F4>, вводим "xxx:yyy" и скармливаем редактору какое-нибудь восклицание, например: «Банзай!». Выходим из редактора и видим файл "xxx" с нулевой длиной. Как это так с нулевой длинной?! А где наше восклицание?! Жмем <F4> и… ни хрена не видим. Все правильно! Если не указано имя потока, файловая система отображает основной поток, а он у нас пустой. Размер остальных потоков не отображается и чтобы дотянуться до их содержимого имя потока должно быть указано явно. Вводим "more < xxx:yyy" и вот он, наш, «банзай».

Будем мыслить так: раз создание дополнительных потоков не изменяет видимых размеров файла, наше пребывание в нем скорее всего останется незамеченным. Конечно, чтобы передать управление на свой поток, необходимо модифицировать основной поток. Контрольная сумма при этом неизбежно изменится, что вряд ли понравится антивирусным сторожам. Ну, со сторожами мы еще разберемся, а пока определимся со стратегией внедрения.

[алгоритм работы вируса]

Закрой руководство по PE-формату. Оно нам не понадобится. Мы ведь хакеры, а не штангисты какие-нибудь (штанга – ось, два блина…ось, два блина…ээх, не запомнить… - прим. Лозовского). Действовать мы будет так: создаем внутри жертвы дополнительный поток, копируем туда основное тело файла, а на его место записываем свой код, делающий что-то «полезное» и передающий управление на основное тело. Работать это будет только на Windows NT/2000/XP и только под NTFS. FAT отдыхает. Оригинальное содержимое заражаемого файла на FAT-разделах будет безвозвратно утеряно, а это плохо. То же самое произойдет, если упаковать файл ZIP'ом или любым другим архиватором, не поддерживающим потоков. Кстати, WinRAR их поддерживает. В диалоговом окне «имя и параметры архива» есть вкладка «дополнительно», а в ней галочка «сохранять файловые потоки». Она позволит заархивировать не только основной поток, но и все дополнительные.

Содержание  Вперед на стр. 077-116-2
ttfb: 3.0639171600342 ms