Новые советы вирмерам-недоучкам by DrMAD "Вероятно, во сне я бессознательно произнес формулу материализации и нечаянно вызвал из небытия это угрюмое животное. Загнать его обратно в небытие мне не удалось..." А. и Б. Стругацкие Через мои руки прошло не так уж много вирусов. Но ковыряться в их потрохах - одно из моих любимых занятий. Встречаясь с каждым новым представителем электронной микрофлоры и микрофауны, я невольно сравниваю его с ранее изученными образцами. И прихожу к неутешительному выводу: несмотря на то, что в "лице лучших своих представителей" современные вирусы далеко ушли от "студенческих" поделок, но качество общей массы оставляет желать лучшего. Не буду здесь останавливаться на юридических и/или моральных аспектах вирусописательства. Отмечу только неоспоримый факт: чем грубей и примитивней алгоритм вируса, тем больше вреда этот вирус приносит. Много лет тому назад ( в 1992 году ) Вадим Богданов, "продвигая" свой антивирус antiape, создал любопытный и очень поучительный документ: "Несколько советов авторам вирусов". С тех пор немало воды утекло... На мой взгляд, назрела необходимость несколько дополнить этот документ. Итак... 0. Если Вы уж пишете вирусы (что само по себе не так уж и плохо и порой даже занимательно J) и даже распространяете их (что гораздо хуже и заслуживает, как минимум, порицания), то уж постарайтесь, чтобы Ваши "чада" причиняли как можно меньше вреда. Помните: хороший вирус - это тот, который трудно заподозрить, заподозрив - трудно выделить, выделив - трудно излечить, излечив - трудно забыть. Постарайтесь удивить своим умением писать качественные вирусы (если уж больше ничем другим удивить не можете K ) , а не заставить себя проклинать. 1. Большинство вирусов пишутся в предположении их работы в DOS, в то время как большая часть пользователей некоторое время назад перешла на работу под различные варианты Windows, OS/ 2 и пр. Проверяйте, в какой среде Вы работаете, например, так: mov ax, 1600h int 2Fh or al,al jz NoWindows ... Если вирус обнаруживает, что зараженная им программа стартует из под Windows, то самое лучшее, что он может сделать - мирно передать управление оригинальному коду. И уж ни в коем случае не пытаться остаться резидентно в памяти, рисовать картинки, играть музыку и пр. (Фролов А.В., Фролов Г.В. Защищенный режим процессоров Intel 80286/ 80386/80486.-М.: "ДИАЛОГ-МИФИ", 1993.) 2. Большинство потенциальных жертв вирусов также могут оказаться программами в формате Windows. Будучи заражены, такие программы, не исключено, начнут при работе "глючить". Проверяйте, какой именно файл Вы пытаетесь заразить: если слово по смещению 0х18 в заголовке ЕХЕ-программ содержит значение 0х40 или больше, то такую программу лучше не трогать. (Сван Т. Форматы файлов Windows. М.: Бином, 1995.) 3. Авторам загрузочных вирусов. Перед тем, как записать свой код в boot-сектор дискеты или mbr винчестера, убедитесь, что там располагается "настоящий" загрузчик. Вы ведь все равно прочитаете этот сектор, чтобы "спрятать" его в другое место, так уж потратьте несколько команд на проверку, например, по первым байтам: cmp word ptr es:[bx], 33FAh jnz SkipInfect ... Если Вы не сделаете этого, то можете "угодить" на другой вирус, который обосновался там раньше Вас. Весьма вероятен случай, когда Ваше "произведение" и "произведение" Вашего коллеги используют для своих нужд одни и те же сектора 0-й дорожки винчестера (например, 0/0/7). Кроме того, на компьютере может быть установлена нестандартная конфигурация программного обеспечения, например, драйвер ADM, чей код также располагается на 0-й дорожке. Результат и в том и в другом случае очевиден: компьютер зависнет при загрузке K. 4. Авторам полиморфных вирусов. А не забываете ли вы про такую простую вещь, как "очередь команд" в процессорах фирмы Intel? Длина очереди в буфере команд постоянно возрастает пропорционально номеру версии процессора: 8086 - 4 байта 80286 - 8 байт 80386 - 16 байт и пр. Кто знает, какой длины будет очередь процессора в "сикстиумах" и "севентиумах"? Модифицируя код впереди себя, подстрахуйтесь - сбросьте очередь командой "холостого" перехода: mov word ptr Int21, 021CDh jmp Int21 Int21: nop nop (А. Щербаков. Защита от копирования.-М.: Эдель, 1992 ) 5. Оформляйте код своего вируса аккуратно и красиво. Помните, рано или поздно Ваш вирус будет пойман и отправлен на "вскрытие". Так уж позаботьтесь о внешнем виде своей "публикации". Уверяю Вас, код вируса с многочисленными переходами в разных направлениях, с "оборванными концами" нереализованных процедур и пр., ненамного усложняет процесс исследования алгоритма, зато вызывает брезгливое чувство, сходное с тем, какое возникает при виде заляпанной кляксами и жирными пальцами, криво и безграмотно заполненной ученической тетради. Если Вы не уважаете весь остальной мир, то хоть уважайте себя. 6. Лучший способ проверки "качества" вируса - запустите его на собственной машине. Ах, Вы боитесь? Вы не предполагаете, к каким повреждениям это может привести, и не знаете, как от своего "детища" избавиться? Тогда займитесь лучше "разведением опенков в сухой местности". Вам противопоказано писать вирусы и программировать вообще. Извините, конечно, но это суровая правда J |