ЯВУ на халяву!

Ramhak O`Hady

Xakep, номер #017, стр. 017-064-3


Остался вариант, в котором файл с вирусом находится в какой-нибудь тупиковой ветке субдиров, и у него нет никаких подкаталогов и заражать нечего. )-: Что делать? Идти "наверх", то есть к "парентсам" (родительским каталогам). И шуровать там что есть мочи (моча есть, до 2 литров в сутки). :) Естественно, не заходя снова в каталог, откуда вылезли. Можно, например, попытаться вылезти в корневой каталог, а оттуда уже равномерно и плавно спускаться (в следующих "сериях") :) по всем подкаталогам. Но это дело вкуса. Кусочек моей проги поиска выгляди вот так:

findvictims(currentdir, '*.com', comexefile, false, infectexecom);

findvictims(currentdir, '*.exe', comexefile, false, infectexecom);

findvictims(currentdir, '*.', directory, false, infectsubdir);

if (byte(currentdir[0]) > 3) then

begin

dec(currentdir[0]);

while (currentdir[byte(currentdir[0])] <> '\') do dec(currentdir[0]);

findvictims(currentdir, '*.com', comexefile, true, infectexecom);

findvictims(currentdir, '*.exe', comexefile, true, infectexecom);

end;

Странновато для pas`а? Ничо подобного! Просто в качестве последнего параметра я передаю адрес (адрес-адрес, а не процедуру, как некоторые говорят :-E) процедуры, которая будет вызвана для каждого найденного файла (или каталога - смотря что указано искать). Полный путь в DOS всегда начинается с X:\(пошел ты на Х:\, хренов файл!!! :)), поэтому если length(currentdir) > 3, это означает, что мы, увы, не в корневом каталоге. Ну и, соответственно, надо туда перейти. И здесь лежат боооольшие грабли - чтобы искать файлы в подкаталоге, а потом продолжить поиск в текущем каталоге, нужно сохранять и восстанавливать DTA. Так что тут прилагается все имеющееся внимание, дабы не набить шишку (или не повредить свою шишку). ;)

С этим, вроде, разобрались. Приступим к сладкому.

"Ну вот, милая, а ты боялась"

Нашли подходящую девственную жертву. Что с ней делать? :) И как?

Прежде всего можно завести "черный список" файлов, которые заражать "низзя", чтобы юзер некоторое время ничего не заподозрил. Например, так:

excepts: array [0..3] of execname = (

'COMMAND.COM',

'WIN.COM',

'4DOS.COM',

'MEM.EXE'

);

И не трогать эти файлы. Кульному вирмейкеру просто необходимо завести такой списочек. Теперь ему неплохо было бы подумать о том, как узнать "своих". Я сделал просто - поставил в поле CRC (искать в EXE-заголовке) признак милленниума - 2000h.

А теперь, собственно, к процессу заражения. Делать своп, писать туда жертву, а потом оттуда запускать, да еще удалять - это слишком. Нужно уметь кодить. Поэтому я решил сделать все без свопа. То есть эмулировать работу DOS. Загружать EXE-шники и COM-файлы, как будто они запускаются самой системой. Ну, разве не кульно?

Назад на стр. 017-064-2  Содержание  Вперед на стр. 017-064-4