Почему я выбрал эту тему для своего индивидуального задания? Ответ очень прост: компьютерные вирусы – главная проблема каждого пользователя ПК. Ведь вирусы в наши дни настолько распространены, что, наверно, нет в мире не одного сетевого ПК на который не были сделаны попытки атаки вирусами. Почему выбрана система MS-DOS? Ответ тоже прост: MS-DOS – предшественник операционных систем используемых в наши дни, а поэтому рассматривать варианты борьбы с вирусами надо с вариантов борьбы в системе MS-DOS. В работе анализируется механизм распространения и функционирования вирусов в операционной системе MS-DOS и на основе анализа, предлагаются достаточно эффективные способы борьбы с ними. Приводятся описания трех разных программ, обеспечивающих выявление и ликвидацию вирусов. Модуль F_Anti может использоваться для автоматической защиты вновь разрабатываемых Турбо Паскалевых программ. Программа AntiVir осуществляет выявление и ликвидацию загрузочных вирусов и контроль любых исполняемых файлов на основе сопоставления наиболее уязвимых для вируса частей файлов с их эталонными копиями. Наконец, комплекс программ SetFag. exe и Fag, prg даст Вам возможность установить антивирусную программу – фаг на любой уже созданный ЕХЕ-файл: в момент запуска программы фаг проверит ее состояние, если программа поражена вирусом, сообщит об этом и удалит вирус.
Если Вы имеете опыт продолжительной работы с ПК, то, возможно, уже сталкивались с компьютерными вирусами или хотя бы слышали о них. Компьютерный вирус-это программа, производящая в Вашем ПК действия, в которых Вы не нуждаетесь и о которых не подозреваете. Главной ее особенностью является способность к “размножению”, т.е. к созданию множества готовых к дальнейшей работе экземпляров вируса. Вирусы “цепляются” к обычным исполняемым файлам типа ЕХЕ, СОМ или к загрузочным секторам физических носителей информации (дискет) и таким образом перемещаются от одного ПК к другому.
Являвшиеся первоначально вполне невинным развлечением скучающих программистов компьютерные вирусы, сегодня стали настоящим бедствием для пользователей ПК: количество и типы таких программ растут с ужасающей скоростью, а сами вирусы в ряде случаев приобрели весьма неприятные свойства – некоторые из них способны уничтожать файловую структуру дисков со всеми катастрофическими для пользователя последствиями. В литературе описывается беспрецедентный случай, когда вирус на три дня (с 2 по 4 ноября 1988 г.) вывел из строя фактически всю компьютерную сеть США. Были парализованы компьютеры Агентства национальной безопасности, Стратегического командования ВВС США, локальные сети всех крупных университетов и исследовательских центров. Лишь в последний момент удалось спасти систему управления полетом космических кораблей Шаттл. Положение было настолько серьезным, что к расследованию немедленно приступило ФБР. Виновником катастрофы, причинившей ущерб более чем в 100 миллионов долларов, оказался студент выпускного курса Корнеллского университета Р. Моррис, придумавший достаточно хитрую разновидность вируса. Он был исключен из университета с правом восстановления через год и приговорен судом к уплате штрафа в 270 тысяч долларов и трем месяцам тюремного заключения.
Трудно объяснить, для чего программисты тратят силы и время на создание все более изощренных типов вируса, поскольку их авторы почти всегда остаются или надеются остаться анонимными, так что естественное для человека стремление к известности здесь исключено. Может быть это неудачная шутка (этой версии придерживался Р. Моррис), возможно, это связано с патологическими отклонениями в психике, а может быть, объяснение кроется в стремлении заработать на создании антивирусных программ? Как бы там ни было, нам нельзя не считаться с возможностью заражения ПК компьютерным вирусом.
В цикле существования любого вируса можно выделить три этапа. Первоначально вирус находится в неактивном состоянии. В этом состоянии он внедрен в тело исполняемого файла или находится в загрузочном секторе диска и “ждет” своего часа. Именно в неактивном состоянии вирусы переносятся вместе с программами или дискетами от одного ПК к другому (обмен программами между пользователями ПК – явление обыденное, и Вы сами, читатель, возможно, копировали полюбившуюся Вам игру или текстовый редактор, не подозревая, что копируете еще и вирус). Разумеется, в неактивном состоянии вирус ничего не может сделать. Для того чтобы он начал свою работу, необходимо запустить исполняемый файл или загрузиться с зараженной дискеты. В этот момент активизируется вирус, который либо создает резидентную в памяти программу, способную порождать копии или производить какие-то разрушительные действия, либо немедленно приступает к работе.
Если вирус создал резидентную программу, то ее активизация осуществляется различными способами – все зависит от фантазии автора вируса. Обычно вирус перехватывает прерывание $21, являющееся ключевым для доступа к любым операциям с MS-DOS. Таким образом, любая попытка чтения или записи информации на диск или обращение к клавиатуре дисплея приводит к активизации резидентной программы вируса. После получения управления (или активизации резидентной программы) вирус приступает к “размножению”: он отыскивает подходящий исполняемый файл и внедряет свой код в его тело (см. ниже). Как правило, вирус заражает лишь один исполняемый файл за раз, чтобы пользователь не обратил внимания на чрезмерное замедление в работе программ: второй этап жизнедеятельности вируса – это этап активного размножения, поэтому вирусная программа стремится максимально скрыть от пользователя ПК результаты своей деятельности.
После того как заражено достаточно много файлов, может наступить третий этап, связанный с внешними проявлениями работы вируса. Ваш компьютер вдруг начнет вести себя странно: зазвучит ли музыкальная фраза, или начнут “сыпаться” символы на экране дисплея – не суть важно, главное, что только в этот момент Вы с ужасом вспомните, что на жестком диске находятся чрезвычайно важные для Вас данные или программы, которые Вы не успели или не смогли скопировать на дискеты. Увы! Некоторые вирусы к этому моменту могут уже безвозвратно нарушить файловую структуру.
Что делать при обнаружении вируса? Прежде всего, не паниковать, ведь далеко не все вирусы отличаются “кровожадностью”. Следует выключить компьютер, вставить в привод гибкого диска заранее припасенную эталонную системную дискету (никогда не снимайте с нее защиту!) и снова включить компьютер. Если на ПК имеется специальная кнопка для перезагрузки (RESET или INIT), можно использовать ее и не выключать/включать компьютер, но во всех случаях не пытайтесь перезагрузиться с помощью Ctrl+Alt+Del: от некоторых типов вируса Вы не избавитесь таким образом. Затем нужно запустить какую-либо программу – антивирус (например, AIDSTEST Д. Н. Лозинского) и с ее помощью локализовать и удалить вирус. Если антивирусная программа не может обнаружить вирус или у Вас под рукой нет такого рода программ, следует попробовать обратиться к нужному Вам жесткому диску и, если это удастся сделать, скопировать все наиболее ценное (но только не исполняемые файлы!) на диски. После этого заново переформатировать жесткий диск, перенести на него эталонную копию ДОС и восстановить с дискет то, что удалось спасти.
Что же следует сделать, чтобы эта безрадостная картина не стала реальностью? Один ответ очевиден – периодически (и по возможности чаще) сохранять жизненно важные для Вас результаты работы на диски. Нет ничего проще, чем дать этот совет, гораздо сложнее заставить себя следовать ему: я сам, честно говоря, далеко не каждый день трачу время на архивирование. Второй ответ менее очевиден.
Вот он: нужно произвести “вакцинацию” исполняемых программ, т.е. придать им свойство самодиагностики, позволяющее произвести контроль собственного файла и выяснить, заражен он или нет. Если факт заражения установлен, программа может попытаться восстановить свой исходный вид, т.е. удалить прицепившийся к ее файлу вирус. Если эту идею последовательно воплощать в жизнь, то большинство Ваших программ приобретет стойкий “иммунитет” к вирусам, во всяком случае, они смогут достаточно быстро сообщить Вам о факте заражения.
Преимущества этой идеи очевидны: в отличие от разработчиков многочисленных антивирусных программ, которые борются с конкретными разновидностями вирусов, Вы можете сохранить в файле программы некоторую ключевую информацию о ее незараженном виде, и поэтому факт заражения любым видом вируса может быть легко установлен в момент запуска Вашей программы.
3.1. Заголовок исполняемых файлов
Какую именно информацию о незараженном файле следует сохранять? Для ответа на этот вопрос необходимо знать соглашение ДОС о формате исполняемых файлов. Как известно, существуют два формата: СОМ и ЕХЕ. Любая программа, обрабатываемая системой Турбо Паскаль версии 4.0 и выше, может быть оттранслирована только в ЕХЕ - файл, поэтому все дальнейшие рассуждения относятся именно к этому формату.
В начале ЕХЕ - файла располагается заголовок, в котором содержится вся информация, необходимая для преобразования дискового файла в готовую к работе программу. Первые 28 байт заголовка соответствуют следующей структуре данных:
Остальные элементы заголовка содержат так называемую таблицу перемещения, предназначенную для настройки адресов загруженной программы. Таблица начинается с байта TabiOff от начала файла и содержит ReloCnt четырехбайтных элементов следующего вида:
Признак ЕХЕ - файла хранится в поле Sign в виде символов “MZ” (код $5A4D) - с этого признака должен начинаться любой ЕХЕ - файл. Поле HdrSize содержит длину всего заголовка в параграфах (участках памяти длиной по 16 байт каждый). Поля PartPag и PageCnt определяют общую длину загружаемой в память части ЕХЕ - файла по следующей формуле:
Остальная часть файла (длина ЕХЕ - файла может быть больше L+HdrSize16) при загрузке программы не учитывается. Обычно в остатке файла, созданного системой Турбо Паскаль, (если, разумеется, есть остаток) содержится информация, используемая встроенным отладчиком, или оверлеи.
Подавляющее большинство ЕХЕ - вирусов пристыковывает свою программу в конец файла, а для того чтобы эта программа была загружена в память и ей было передано управление, изменяет поля PartPag, PageCnt, ReloCS, ExelP (адрес точки, куда передается управление после окончания загрузки) и, возможно, некоторые другие поля. При таком способе внедрения общая длина загружаемой в память части файла должна составлять ExeSize = FileSize + VirusSize, где FileSize- полная длина ЕХЕ - файла, а VirusSize – длина программы вируса. Так как в остатке файла могут храниться оверлеи (или архив для саморазгружающихся архивных программ), длина ExeSize может оказаться чрезмерно большой, так что программа не сможет загрузиться в память или не сможет работать нормальным образом. Некоторые безграмотно написанные вирусы не учитывают это обстоятельство и быстро выдают себя, т.к. зараженные программы перестают работать.
Другой способ внедрения вируса – пристыковка кода вируса до начала загружаемой части программы и сразу за заголовком файла. L – загружаемая в память часть файла.
Такой способ внедрения позволяет не загружать в память весь ЕХЕ - файл, а длина загруженной программы увеличивается только на длину кода вируса. Несмотря на кажущееся преимущество такого способа, он используется достаточно редко. Его реализация значительно сложнее, так как перед передачей управления основной программе вирус должен перенести 256 байт префикса программного сегмента (PSP) в конец собственного кода так, чтобы они непосредственно предшествовали телу программы – в противном случае будет нарушена важная связь программы с PSP или относительная адресация в самой программе.
Кроме того, в процессе заражения он должен увеличить на величину VirusSize поле IternOfs каждого элемента таблицы перемещения и абсолютного адреса, указываемого этим элементом. В отличие от стандартного загрузчика ДОС вирусу приходится корректировать не загруженную программу, а ее файловый образ. Так как в ЕХЕ - программе средней сложности может быть несколько сотен элементов таблицы перемещения, процесс настройки таблицы вирусом приводит к заметному увеличению времени запуска программы, что может обнаружиться пользователем. На этапе размножения вирусы стремятся по возможности скрыть от пользователя результат своей деятельности, поэтому ЕХЕ - файлы редко поражаются вирусами, пристыкованными в начало файла.
Разумеется, существует возможность внедрения вируса непосредственно в тело исполняемой программы. Однако на практике это почти всегда означает разрушение логики работы программы, поэтому такой вирус немедленно обнаруживается.
Анализ сказанного позволяет сделать важный вывод: практически любой существующий вирус (или вирус, который еще только будет создан!), рассчитанный на поражение ЕХЕ -файла, пристыковывает свой код в конец файла и изменяет его заголовок. Следовательно, для контроля факта заражения программы и ликвидации вируса необходимо где-то сохранить заголовок файла и его эталонную длину и периодически сопоставлять действительный заголовок и длину с эталонными значениями. При этом следует учитывать то обстоятельство, что некоторые вирусы контролируют любое обращение к дисковым секторам, в которых расположена их программа, и “подсовывают” незараженные копии этих секторов. Такие вирусы (их называют вирусы-невидимки) вряд ли удастся обнаружить с помощью стандартного обращения к функциям ДОС. Для борьбы с ними используют прямое обращение к BIOS- прерыванию $13.
3.2. Защита вновь создаваемых программ
Ключевую информацию (будем для краткости называть ее ключ) о незараженной программе можно хранить в отдельном файле, но в этом случае существует опасность потерять дополнительный файл при копировании программы или ошибочно уничтожить его. Гораздо надежнее хранить ключ в теле самого защищаемого файла. К сожалению, его нельзя подобно вирусу пристыковать в конец файла, т.к. в случае заражения вирус изменит поля PartPag и PageCnt, и мы никогда не сможем определить то место в файле, где он располагается. Вспомним, что все константы (в том числе и типизированные) создаются на этапе компиляции программы, таким образом, в файле обязательно имеется область данных, содержащая значения этих констант. Эта область в Турбо Паскалевых программах располагается в самом конце загружаемой части файла. Следовательно, мы должны объявить в программе типизированную констант, предназначенную для хранения ключа, а затем в область файла, отведенную для ее размещения, поместить нужную информацию.
Каким образом отыскать в ЕХЕ - файле место, занимаемое ключом? Конечно, можно перед ним в программе разместить какую-либо типизированную константу с характерным значением (например, заранее обусловленную текстовую строку) и затем отыскивать ее в файле. Однако такое решение вряд ли можно признать удовлетворительным: во-первых, всегда существует вероятность того, что какой-то фрагмент кодов программы содержит ту же цепочку байт, что и заголовок ключа; во-вторых, придется просматривать подчас большой по объему ЕХЕ - файл в поисках нужной константы. Значительно изящнее выглядит решение, основанное на точном вычислении смещения от начала файла до ключа.
Для этого нужно определить начало области данных в файле. В заголовке файла не предусмотрено никакой информации о начальном значении регистра DS, в котором хранится сегмент данных. Перед передачей управления программе загрузчик устанавливает значение этого регистра так, чтобы он указывал на начало так называемого префикса программного сегмента (PSP), а запущенная программа уже сама должна установить его надлежащим образом.
Префикс программного сегмента имеет длину 256 байт (16 параграфов) и размещается загрузчиком в оперативной памяти непосредственно перед загруженной программой. В PSP содержится различная служебная информация, которая может быть достаточно важной для ДОС и работающей программы (в PSP, например, хранятся параметры обращения к программе) , но в нем нет указаний на содержимое регистра DS. Таким образом, найти начало области данных в файле достаточно трудно. Однако это нетрудно сделать в работающей программе – для этого предусмотрена стандартная функция DSeg, возвращающая сегмент данных. Если бы программа могла получить также информацию о сегменте PSP, с которого начинается загруженная программа, можно было бы вычислить смещение в файле от его начала до начала области данных. Такая возможность есть – функция MS-DOS с номером $62 возвращает в регистре ВХ значение сегмента PSP. Следовательно, программа должна получить значения обоих сегментов, вычислить их разницу и таким образом определить место в файле, с которого начинается область данных.
Остается последняя проблема – как найти нужную константу. Турбо Паскаль размещает константы в области данных по мере их объявления в программе. Зная размер каждой константы и порядок их объявления, можно вычислить место размещения нужной нам типизированной константы. Однако этот метод не годится для универсальной программы защиты, так как порядок объявления констант может меняться от программы к программе. К счастью, мы можем использовать операцию получения адреса @. Результатом применения этой операции к адресу константы, выбранной в качестве ключа, является указатель (четырехбайтный адрес); смещение адреса, который он содержит, и является нужным нам смещением начала ключа относительно начала области данных.
3.3. Модуль F_Anti
В этом параграфе описывается модуль F_Anti, в котором осуществляются все необходимые действия по установке ключа во вновь создаваемый ЕХЕ - файл и последующей проверке этого ключа при каждой загрузке программы.
В качестве ключа для контроля факта заражения ЕХЕ - файла в модуле F_Anti используется типизированная константа Head, соответствующая такой структуре данных:
При создании этой типизированной константы компилятор в поле HF помещает значение False. Запущенная программа анализирует это поле. При первом прогоне HF = False, в результате чего программа вызывает процедуру Save, в ходе выполнения которой в файле сохраняются эталонный заголовок и начальная длина файла. При этом одновременно в поле HF (в файле программы!) помещается значение True, поэтому при любом последующем запуске программы вместо Save будет вызвана процедура CheckFile, которая осуществит нужный контроль файла. Если в ходе контроля обнаруживается хотя бы малейшее отличие заголовка файла от его эталона, хранящегося в Head, программа сообщает о факте заражения и предлагает восстановить испорченный заголовок и начальную длину файла.
При восстановлении зараженного файла осуществляются следующие действия: • зараженный файл копируется в файл с расширением VIR -это позволит Вам в случае неудачной попытки восстановления повторить ее еще раз; кроме того, при желании Вы сможете передать разработчикам антивирусных программ копию вируса для выработки методов его обнаружения и уничтожения; • анализируется адрес запуска зараженной программы: если относительное значение сегмента точки запуска у зараженной программы меньше, чем в эталоне, то это означает, что вирус располагается в начале или в середине.
Если программа запускается на уже зараженном ПК. не исключено, что заголовок файла будет испорчен вирусом, и тогда система защиты будет ревностно следить за сохранностью вируса! В этом случае программа предупреждает пользователя о невозможности восстановления (если Вас заинтересовал описываемый способ борьбы с вирусами, попробуйте модифицировать программу защиты так, чтобы она работала и в этом случае) ; • если вирус пристыкован в конец файла, то в восстанавливаемый файл переносится эталонный заголовок и незараженная часть, начиная с байта TablOff + ReloCnt'4 от начала файла и до байта FileSize-HL. Отмечу следующее обстоятельство. Описанная система защиты дублирует заголовок файла в тело программы. Ничто не мешает вирусу проверить тело программы на наличие дубликата и соответствующим образом изменить его. Я далек от мысли, что Вы уважаемый читатель, после знакомства с этим разделом захотите создать собственный вирус, учитывающий это обстоятельство. Тем не менее, я считаю, что нелишней будет какая-то защита самого ключа. Такая защита реализуется очень просто: для этого достаточно все 16 - битные поля эталона заголовка сложить по модулю 2 со случайной константой Key, С этой целью в процедуру Save помещен следующий фрагмент:
Процедура CheckFile, осуществляющая установку или контроль ключа, вызывается в ходе выполнения установочной части модуля F_Anti, поэтому для использования описанного метода защиты достаточно указать имя модуля в предложении Uses. Замечу, что в случае разработки программы с оверлеями модуль F_Anti можно объявить оверлейным, если в установочной части любого не оверлейного модуля инициируется работа администратора оверлея.
В распоряжении программиста имеется глобальная переменная CheckVirasResult, сигнализирующая о результатах проверки программы. Значения этой переменной интерпретируются следующим образом: 0; {Не обнаружен факт заражения}; 1; {Первый запуск, в программе установлена защита}; - 1; {Вирус обезврежен с согласия пользователя}; - 2; {Вирус обезврежен автоматически}.; - 3; {Контроль подавлен ключом /NOANTI}; - 4; {Вирус расположен в начале программы}
Работа процедуры CheckFile может быть подавлена, если программа запускается с ключом /NOANTI. Ключ /NOQUERY разрешает автоматическое удаление обнаруженного вируса без разрешения пользователя.
Ключ /NOALARM также разрешает процедуре автоматически удалить вирус, но запрещает выдавать на экран предупреждающее сообщение. Наконец, ключ /NOCOPY запрещает создание резервной копии зараженного файла (с расширением VIR) .
Следующая простая программа иллюстрирует технику использования модуля F-Anti. Если Вы скомпилируете эту программу в файл testanti. exe, то после команды testanti на экране появится сообщение
Установлена защита файла TESTANII. EXE . при первом запуске программы и в файле TESTANTI. EXE вирус не обнаружен, при каждом следующем запуске. Если запустить программу командой testanti /noanti на экран будет выведено сообщение. Контроль блокирован ключом /NOANTI. Uses FAnti; begin case CheckVirusResuit of 0: WriteLn(‘B файле', ParamStr (0) , ' вирус не обнаружен.); 1: WriteLn ('Установлена защита файла ', aramStr (0) ,.); - 1: WriteLn ('Вирус удален с разрешения пользователя'); - 2: WriteLn ('Вирус удален автоматически'); - 3: WriteLn (Контроль блокирован ключом /NOANTI.); - 4: WriteLn (Вирус расположен в начале + файла - удаление невозможно') end end.
В наши дни системы MS-DOS уже давно устарели, но проблема вирусов осталась. В наши дни есть более простой вариант борьбы с вирусами в вашем компьютере. ЧТО НАДО ДЕЛАТЬ, ЕСЛИ ВИРУСЫ «УБИВАЮТ» ВАШ КОПЬЮТЕР? Моё предложение для выхода из этой ситуации следующее. Для начала необходимо зайти на какой либо сайт, где есть форум по поводу рейтинга антивирусных программ, или спросить у своих друзей, знакомых и т.д.: какой антивирус самый лучший? Хорошенько проанализировать полученную информацию! Ну, а после уже сделать свой выбор по подбору антивирусной программы. После выбора, советую вам загрузить из Интернета пробную версию выбранного вами антивируса, что, в принципе, не бьет по карману. Установить на свой компьютер эту версию и выделить плюсы и минусы выбранной программы. Для сравнения установите еще одну версию, какого-либо антивируса из вашего рейтинга программ. Только мой вам совет: не ставьте два антивируса сразу на один компьютер, не выделив в них доверенные области, где будет стоять другой антивирус. После выделите плюсы и минусы второго антивируса. А да, чуть не забыл, после установки, надо проверить работу каждого антивируса. Для этого предлагаю вам, чтобы вы загрузили парочку вирусов из Интернета на сайтах антивирусных программ. Попробовать антивирусы в работе. И делать свой выбор.
Допустим, что выбор вы уже сделали. Что делать дальше. А дальше, вам обратно необходимо зайти в Интернет на официальный сайт и выполнить процесс регистрации закаченной ранее пробной версии антивируса.
Какие возникают проблемы при работе антивирусов? Т.к. вирусы создаются программистами каждую минуту, то вам необходимо будет обновлять антивирусные базы, что так же необходимо делать на официальных сайтах. Если этого не делать, то антивирус будет вам постоянно выдавать сообщение о том, что антивирусные базы устарели и др. Кроме обновлений, через определенный промежуток времени вам обратно необходимо будет выполнять регистрацию своего антивируса и платить деньги за это, обычно это необходимо делать раз в год.
Какие можно дать советы для самозащиты вашего компьютера? Поменьше выполнять загрузку с непроверенных носителей, поменьше рыться в Интернете, не включив ВЕБ - АНТИВИРУС или что-то вроде этого, и вообще ограничить обмен информации с вашим компьютером. Кроме того, я предлагаю вам установить сразу несколько антивирусных программ, что в принципе намного лучше, чем постоянно менять «побитый» софт, если один антивирус не обнаружил «гостя» в вашем компьютере. Для установки нескольких антивирусов не забудьте выделить в установленном антивирусе доверенную область, где будет стоять устанавливаемый антивирус, в котором также, необходимо выделить доверенную область. Если этого не сделать, то антивирусы будут между собой «ругаться» что может пагубно сказаться на работе вашего компьютера.
P.S.: ВАМ СОВЕТЫВАЛ, СОВЕТЫВАЛ А САМ ПОПАЛСЯ!!! ВИРУС «УБИЛ» СИСТЕМУ НА МОЁМ КОМПЬЮТЕРЕ ДОМА, НУ И, КАК САМИ ПОНИМАЕТЕ, НА НЕСКОЛЬКО ДНЕЙ ОСТАНОВИЛ ВСЮ МОЮ РАБОТУ. А ПРИЧИНОЙ ВСЕМУ ТО, ЧТО Я ПОСТОЯННО ОТКЛЮЧАЮ АНТИВИРУСЫ ПРИ РАБОТЕ В АВТОНОМНОМ РЕЖИМЕ (ДЛЯ ТОГО ЧТОБ ОНИ МНЕ НЕ НАПОМИНАЛИ О СВОЕМ ПРИСУТСВИИ НА КОМПЬЮТЕРЕ). А В ДАННОМ СЛУЧАЕ Я ПРОСТО ЗАБЫЛ ИХ АКТИВИЗИРОВАТЬ ИЗ-ЗА СВОЕЙ СПЕШКИ, НУ И ПОЛУЧИЛ ЗА ЭТО РЕЗУЛЬТАТ – ВРЕМЯ НА ЗАМЕНУ СОФТА 5-10 ЧАСОВ + ВРЕМЯ НА ПОИСК СОФТА.