Немой укор за компьютерный хардкор Крис Касперски Спецвыпуск: Хакер, номер #048, стр. 048-058-8 Более актуальным представляется вопрос распространения обновлений по интернету. Но почему бы просто не выкладывать обновления на такой-то сервер? Пусть удаленные приложения (например, те же черви) периодически посещают его, вытягивая свежачок… Ну и сколько такой сервер просуществует? Если он не рухнет под натиском бурно размножающихся червей, его закроет разъяренный администратор. Поэтому тут необходимо действовать строго по распределенной схеме. Простейший алгоритм выглядит так: пусть каждый червь сохраняет в своем теле IP-адреса заражаемых машин. Тогда "родители" будут знать своих "детей", а "дети" помнить "родителей". Впрочем, обратное утверждение неверно. "Дедушки" и "бабушки" знают лишь своих непосредственных "детей", но не имеют никакого представления о «внуках», если, конечно, «внуки» явным образом не установят с ними соединение и не сообщат свои адреса… Главное – рассчитать интенсивность обмена информацией так, чтобы не сожрать весь сетевой трафик. Тогда, обновив одного червя, мы сможем достучаться и до всех остальных, причем противостоять этому будет очень и очень непросто. Распределенная система обновлений не имеет единого координационного центра и, даже будучи уничтоженной на 99,999%, сохраняет свою работоспособность. Правда, для борьбы с червями может быть запущенно обновление-камикадзе, автоматически уничтожающее всех червей, которые успели его заголить. Поэтому прогрессивно настроенные вирусописатели активно используют механизмы цифровой подписи и несимметричные криптоалгоритмы. Если лень разрабатывать свой собственный движок, можно использовать PGP (благо ее исходные тексты открыты). Главное, иметь идеи и уметь держать компилятор с отладчиком в руках. Все остальное – вопрос времени. Это все? Без притока новых идей техника самомодификации обречена на медленную смерть. Чтобы поддержать ее на плаву, необходимо найти правильную точку применения сил, используя самомодифицирующийся код там и только там, где его действительно нужно использовать! Самомодифицирующийся код возможен только на компьютерах Фон-Неймоновской архитектуры (одни и те же ячейки памяти в различное время могут трактоваться и как код, и как данные). Представители процессоров племени Pentium в действительности построены по Гавардской архитектуре (код и данные обрабатываются раздельно) и Фон-Неймоновскую они только эмулируют, поэтому самомодифицирующийся код резко снижает их производительность. Фанаты Ассемблера уверяют, что он поддерживает самомодифицирующийся код. Это неверно! У Ассемблера нет никаких средств для работы с самомодифицирующимся кодом, кроме директивны DB. Такая, с позволения сказать, "поддержка" есть и в Си! Для написания самообновления по интернету необходимо иметь представление и о PHP. Знание функций wininet.dll тоже не повредит. Исходники и иллюстрации из статьи ты можешь видеть и на диске. |