Нет приятней и полезней венерических болезней! Dr.Klouniz Спецвыпуск Xakep, номер #035, стр. 035-066-4 Чтение содержимого программы --> удаление ее/создание нового файла с этим же именем --> Запись тела вируса --> Запись проги --> Запись метки зараженности --> CloseHandle. Все процедуры для этого ты уже знаешь, остается только один вопрос – что такое метка зараженности? Как следует из названия, это то, что позволяет тебе не заразить один файл два раза (после чего он откинется :)). Это может быть пара байт твоих инициалов, записанные после проги, может – некое условное время создания файла. Процедура FileSetDate существует именно для этого, поэтому не стесняйся. Раньше многие вирмейкеры любили выставлять файлу 62 секунду во времени создания и тому подобную бредятину, но ты никогда так не делай :). Действительно, лучше работают несколько байт, записанных после проги. Надежно, как форт-нокс. Я рассмотрел самый простейший алгоритм заражения, и, конечно же, в нем есть свой облом. Во-первых – лечится такой файл элементарно, достаточно знать размер программы-жертвы, и такое под силу даже ADinf+CureModule. Что же делать? Тут нам помогает все то же шифрование, причем, чем более извращенный ключ и алгоритм ты подберешь, тем лучше. Ключ вообще лучше генерировать динамически из каких-либо характеристик зараженной тачки, но… все равно файл будет расшифрован. Как? Да элементарно. Если ты тупо зашифруешь программу, не подумав, что первые 2 байта – MZ (сигнатура) хорошо известны не только тебе, но и Лаборатории Данилова (и всем остальным), процесс расшифровки пойдет как по маслу. Конечно, это не единственный косяк в данном случае, но тебе должно быть ясно – удаляй или переноси хотя бы сигнатуру, так антивирусам будет намного сложнее лечить прогу. Во-вторых – это проблема чтения всей программулины в буфере. А если она 16 Мб? Какие это будут тормоза, если вообще не облом? Выход один – читать в буфер первую часть программы, равную длине тела вируса, переносить ее в конец зараженной проги, а в начало писать, как обычно, вирус. При запуске инфицированной проги тебе, разумеется, придется проделать все это в обратном порядке. Кстати, помнишь, в начале я говорил, что вирус можно писать и в конец проги? Это не опечатка, и большинство вирусов так и делают, предварительно записав в заголовок программы jmp near на тело вируса. То есть – он все равно запускается первым. На самом деле, таких проблем намного больше, а эти я привел только как намек на то, что писать вирусы – тяжелый, незаконный и неблагодарный труд :). Ведь на создание лечащего обновления на средний вирус у программеров-антивирусников уходит всего несколько минут. После чего это самое «горячее обновление» выкладывается на их сайте на обозрение широкой общественности. Но я что-то отвлекся, настало время рассказать собственно о противодействии антивирусам. |