Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

[Alekseev_A.P.]_Informatika_2015(z-lib.org)

.pdf
Скачиваний:
219
Добавлен:
26.01.2020
Размер:
8.07 Mб
Скачать

Вирусы и антивирусные программы

151

__________________________________________________________________________________

Троянская программа маскируется, как правило, под коммерческий продукт. Ее другое название «троянский конь».

Программа монолитного вируса представляет собой единый блок, который можно обнаружить после инфицирования.

Программа распределенного вируса разделена на части. Эти части содержат инструкции, которые указывают компьютеру, как собрать их воедино, чтобы воссоздать вирус. Таким образом, вирус почти все время находится в распределенном состоянии и лишь на короткое время собирается в единое целое. В этот момент времени вирус производит вредоносное действие.

Есть вирусы, которые осуществляют фишинг.

Фишинг — выманивание ложным путём данных пользователей (логинов, паролей, номеров кредитных карт, банковских счетов, PIN-кодов). Кибепреступники создают сайт, внешне сходный с каким-либо популярным сайтом и обманным путём заманивают на него пользователей. На сайте мошенники стараются выманить у пользователей секретные данные. В переводе с английского языка слово «фишинг» означает «рыбалка». Мошенники терпеливо «ловят» доверчивых людей.

Вирус Virus.Win32.Gpcode.ak шифрует пользовательские файлы различных типов (.doc, .txt, .pdf, .xls, .jpg, .png и др.) при помощи криптостойкого алгоритма шифрования RSA с длиной ключа 1024 бит. Затем злоумышленники шантажируют жертву, требуя вознаграждения за дешифрование.

Программы кейлоггеры используются для записи информации о нажатиях клавиш клавиатуры. Записанная информация отправляется по сети на FTP-сервер, в почтовый ящик и т. д. Современные кейлоггеры осуществляют перехват звука с микрофона и изображения с веб-камеры.

Для борьбы с вирусами разрабатываются антивирусные программы. Говоря медицинским языком, эти программы могут выявлять (диагностировать), лечить(уничтожать) вирусыидажеделатьпрививку«здоровым» программам.

Различают следующие виды антивирусных программ:

программы-детекторы (сканеры);

программы-доктора (или фаги, дезинфекторы);

программы-ревизоры;

программы-фильтры (сторожа, мониторы);

программы-иммунизаторы.

Программы-детекторы рассчитаны на обнаружение конкретных вирусов. Принцип их действия основан на сравнении характерной (специфической) последовательности байтов (сигнатур, портретов или масок вирусов), содержащихся в теле вируса, с текстом проверяемых программ. Программыдетекторы нужно регулярно обновлять, так как они быстро устаревают и не могут выявлять новые виды вирусов.

152 Вирусы и антивирусные программы

__________________________________________________________________________________

Следует подчеркнуть, что программы-детекторы могут обнаружить только те вирусы, которые ей «известны», т. е., если сигнатуры этих вирусов заранее помещены в базу данных антивирусных программ.

Таким образом, если проверяемая программа не опознается детектором как заражённая, то ещё не следует считать, что она «здорова». Она может быть инфицирована новым вирусом, который не занесен в базу данных детектора.

Для устранения этого недостатка программы-детекторы стали снабжаться блоками эвристического анализа программ. В этом режиме делается попытка обнаружить новые или неизвестные вирусы по характерным для всех вирусов кодовым последовательностям (фрагментам программы). Наиболее развитые эвристические механизмы позволяют с вероятностью около 80% обнаружить новый вирус.

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

В России получили широкое распространение программы-детекторы, одновременно выполняющие и функции программ-докторов. Наиболее известные представители этого класса — AVP (AntiViral Toolkit Pro, автор — Е. Касперский), Aidstest (автор — Д. Лозинский), Doctor Web (авторы — И. Данилов, В. Лутовинов, Д. Белоусов), AVZ (автор — О.Зайцев).

Ревизоры — это программы, которые анализируют текущее состояние файлов и системных областей диска и сравнивают его с информацией, сохраненной ранее в одном из файлов ревизора. При этом проверяется состояние Boot-секторов, FAT-таблицы, а также длина файлов, их время создания, атрибуты, контрольные суммы.

Контрольная сумма является интегральной оценкой всего файла (его слепком). Получается контрольная сумма путем суммирования по модулю два (Исключающее ИЛИ) всех байтов файла. Практически всякое изменение кода программы приводит к изменению контрольной суммы файла.

Ревизоры сначала запоминают сведения о состоянии программ и системных областей дисков (загрузочного сектора и сектора с таблицей разбиения жесткого диска). Предполагается, что в этот момент программы и системные области дисков не заражены. После этого с помощью ревизора можно в любой момент времени сравнить состояние программ и системных областей дисков с их исходными состояниями. О выявленных несоответствиях ревизор сообщает пользователю. Ревизоры контролируют файловую систему, отслеживая перемещение, переименование, создание и удаление файлов

и папок (каталогов). Доктора-ревизоры не только обнаруживают изменения

вфайлах и системных областях дисков, но и могут в случае обнаружения изменений вернуть их в исходное состояние.

Вирусы и антивирусные программы

153

__________________________________________________________________________________

Антивирусная программа ADinf (Advanced

Diskinfoscope, автор —

Д. Мостовой) относится к классу ревизоров. Антивирус имеет высокую скорость работы, способен с успехом противостоять вирусам, находящимся в памяти.

В отличие от полифагов, ADinf не использует в своей работе «портреты» (сигнатуры) конкретных вирусов. Поэтому ADinf особенно эффективен при обнаружении новых вирусов, противоядие для которых еще не придумано.

Антивирусы-фильтры — это резидентные программы (мониторы), которые оповещают пользователя обо всех попытках какой-либо программы выполнить подозрительные действия. Фильтры контролируют следующие операции:

обновление программных файлов и системной области диска;

форматирование диска;

резидентное размещение программ в ОЗУ.

Обнаружив попытку выполнения таких действий, сторож (монитор) сообщает об этом пользователю, который принимает окончательное решение по выполнению данной операции. В качестве примера такой антивирусной программы можно назвать VSafe. Заметим, что она неспособна обезвредить даже известные вирусы. Для «лечения» обнаруженных фильтром вирусов нужно использовать программу - доктор.

К последней группе относятся наименее эффективные антивирусы — вакцинаторы (иммунизаторы). Они записывают в вакцинируемую программу признаки конкретного вируса так, что вирус считает ее уже зараженной, и поэтому не производит повторное инфицирование. Нужно отметить, что этот вид антивирусных программ морально устарел.

Среди зарубежных антивирусных программ чаще других упоминают-

ся в печати программы Norton AntiVirus (фирма Symantec), McAfee (США), Eset NOD32 (Словакия), Panda (Испания), AVG Antivirus (США).

Рассмотрим основные меры по защите ЭВМ от заражения вирусами.

Необходимо оснастить ЭВМ современными антивирусными программами и регулярно обновлять их версии.

При работе в глобальной сети обязательно должна быть установлена программа-фильтр (сторож, монитор).

Перед считыванием информации с оптических дисков, Flashпамяти, записанной на других ЭВМ, следует всегда проверять эти носители на наличие вирусов.

При переносе на свой компьютер файлов в архивированном виде необходимо их проверять сразу же после разархивации.

Целесообразно делать архивные копии ценной информации на других носителях информации.

154 Вирусы и антивирусные программы

__________________________________________________________________________________

Следует иметь ввиду, что невозможно заразиться вирусом, просто подключившись к Интернету. Чтобы вирус активизировался, программа, полученная из сети, должна быть запущена на компьюте- ре-клиенте на выполнение. Не используйте гиперссылки, которые находятся в письмах от неизвестных пользователей.

При считывании информации с Flash-памяти целесообразно включить защиту от записи. Это создаст препятствие для размножения вирусов.

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

Последняя — не совсем серьёзная мера. Если вы хотите полно-

стью исключить вероятность попадания вирусов в ваш компь-

ютер, то не набирайте на клавиатуре непонятных для вас программ, не используйте лазерные диски, Flash-память, фотоаппараты, видеокамеры, мобильные телефоны для ввода программ и документов. Отключитесь от локальной и глобальной сетей. Не включайте питание компьютера, так как возможно, что вирус уже

зашит в ПЗУ или проник в CMOS.

Во всякой шутке есть доля шутки, а остальное – серьёзная часть. Так недавно было сообщение, что мобильные телефоны одной фирмы продавались с ПЗУ, в котором был зашит вирус.

Нужно иметь в виду, что не существует антивирусных программ, которые могут выявлять все типы вирусов. Но принципиальная возможность их создания всегда имеется. Проблема состоит в том, что некоторое время новые типы вирусов могут не обнаруживаться антивирусными программами. Это время требуется разработчикам антивирусных программ для создания нужного «противоядия». Поэтому пользователям необходимо постоянно обновлять базы своих антивирусных программ.

Как и всякие автоматические средства, антивирусные программы могут совершать ошибки первого и второго родов: пропускать имеющиеся вирусы и давать ложные сигналы даже при отсутствии вирусов.

В ряде программ используется так называемое эвристическое сканирование, основанное на вероятностном методе выявления вирусов. При эвристическом сканировании антивирусная программа отыскивает характерные для вирусов комбинации команд (перезапись, удаление и т. п.). Для таких программ не требуется обновления портретов вирусов (сигнатур), и они способны обнаружить новые разновидности вирусов.

Языки программирования

155

__________________________________________________________________________________

5.4.Основные понятия программирования

Вэтом разделе рассматриваются общие сведения о языках программирования, описаны основные свойства и способы представления алгоритма, проанализированы базовые структуры программирования.

5.4.1.Языки программирования

На голове косу носила. Своей косой косу косила.

Пока неизвестный поэт

Языки программирования являются искусственными языками, в них синтаксис и семантика строго определены. Поэтому языки программирования, в отличие от естественных языков, не допускают многозначных толкований одних и тех же языковых конструкций (такое, как в эпиграфе).

Рассмотрим важные для программирования понятия: алфавит, синтаксис и семантика.

Алфавит — допустимый для данного языка программирования набор символов (букв, цифр, специальных знаков), которые могут быть использованы при составлении программ.

Синтаксис — правила построения из символов алфавита языковых конструкций (переменных, констант, функций, процедур, операторов…).

Семантика — система правил, определяющих функциональное назначение языковых конструкций.

Семантика определяет, что делает ЭВМ при выполнении данной языковой конструкции, а синтаксис определяет форму записи данной языковой конструкции.

Составление программ для ЭВМ первого поколения велось исключительно на машинном языке, который представляет собой свод правил кодирования действий ЭВМ с помощью чисел. Для всех цифровых ЭВМ «понятна» только двоичная система счисления (СС), которая для сокращения записи часто заменяется восьмеричной или шестнадцатеричной СС. Восьмеричная и шестнадцатеричная СС используются лишь для облегчения работы программистов. Для технической реализации ЭВМ нужна только двоичная СС.

Совершенствование машинных языков привело к созданию машин- но-ориентированных языков символического кодирования. Основной принцип создания языков символического кодирования состоит в замене двоичных кодов на их буквенные обозначения, а также в автоматизации рас-

156 Языки программирования

__________________________________________________________________________________

пределения памяти и диагностики ошибок. Такой машинноориентированный язык получил название языка Ассемблера.

ЭВМ «понимает» только машинный язык, только команды, операнды и адреса, записанные с помощью двоичных чисел. Поэтому для преобразования программы, написанной на языке Ассемблера, в машинные коды необходим «переводчик».

Перевод программы, написанной на языке Ассемблера, на машинный язык осуществляется с помощью транслятора — специальной программы, которая имеет созвучное с именем языка название: ассемблер.

Недостатком машинно-ориентированных языков является невозможность выполнения программы, составленной для процессора одного типа, на ЭВМ, которая построена на процессоре другого типа. Другими словами, вид программы зависит от типа машины. Данный язык ориентирован на определенный тип машины (точнее – процессора).

На следующем этапе развития языков программирования были созда-

ны процедурно-ориентированные языки. В отличие от машинно-

ориентированных языков программирования, синтаксис и семантика этих языков не зависят от состава имеющихся команд конкретной ЭВМ (конкретного процессора). Привязку составленной программы к конкретному типу ЭВМ осуществляет транслятор (программа-переводчик).

После ввода в ОЗУ исходной программы, составленной на языке программирования высокого уровня, осуществляется ее трансляция. В результате создается программа на машинном языке, т. е. программа, состоящая из команд того процессора (той машины), с помощью которого будет решаться задача.

Процесс перевода программы и процесс ее исполнения могут происходить двумя способами. Первый способ, называемый компиляцией, заключается в том, что процесс выполнения программы ЭВМ осуществляется после того, как процесс перевода полностью завершен.

Второй способ трансляции — интерпретация — предполагает, что отдельные операторы (или другие части исходной программы) выполняются сразу после трансляции, после чего та же процедура совершается над другими операторами и т. д. Интерпретатор можно сравнить с переводчиком (человеком), который выполняет устный синхронный перевод с одного естественного языка на другой (например, перевод кинофильма с английского языка на русский язык). Интерпретатор переводит и сразу выполняет программу последовательно, строчку за строчкой.

Компилятор можно сравнить с писателем, который делает письменные перевод статьи или книги. Компилятор перед выполнением программы вначале полностью переводит весь текст программы на машинный язык.

Интерпретатор работает медленнее, чем компилятор, занимает больше места в оперативной памяти. Однако при отладке новых программ удоб-

Языки программирования

157

__________________________________________________________________________________

нее работать с интерпретатором, так как он позволяет после исправления ошибки продолжить выполнение программы с места её остановки. При работе с компилятором после устранения ошибки необходимо повторно компилировать программу и запускать ее с самого начала, а не с места расположения обнаруженной ошибки.

Существуют комбинированные способы трансляции и выполнения программ. Например, язык Java позволяет сначала компилировать программу в некоторый промежуточный код (байт-код), а затем выполнять его с помощью интерпретатора (виртуальной Java-машины).

В дальнейшем мы будем рассматривать общие характеристики различных языков программирования высокого уровня. При этом язык программирования нужно представлять себе, как некоторый транслятор (интерпретатор или компилятор), который переводит программу, написанную на языке программирования, понятном для человека, в машинные коды, с которыми работает ЭВМ.

Запись программы на процедурно-ориентированном языке достаточно близка к общепринятой математической записи, компактна и удобна для восприятия. Рассмотрим, как выглядит операция суммирования двух чисел, например, 7 и 5, запрограммированная на различных языках:

1)

на машинном языке:

 

 

 

 

 

 

Адрес

 

Команда

 

1101 0001

 

0011 1111

 

1101 0010

 

0000 0101

 

1101 0011

 

0000 0110

 

1101 0100

 

0000 0111

 

1101 0101

 

1000 0000

2)

на машинно-ориентированном языке (микропроцессорный ком-

плект 580-й серии): MVI A,5 MVI B, 7 ADD B;

 

3)

на процедурно-ориентированном языке: А = 7 + 5.

Из приведенных примеров видно, что наиболее проста для понимания последняя запись. Наиболее сложна для восприятия программа, написанная на машинном языке.

Одним из первых процедурно-ориентированных языков был язык Фортран (FORmula TRANslation — преобразование формул). Фортран является компилирующим языком. Он не только просуществовал до наших дней, но и удерживает одно из первых мест в мире по распространенности. Среди причин такого долголетия можно отметить простую структуру, как самого Фортрана, так и предназначенных для его преобразования в машинные коды трансляторов. Фортран используется в сфере научных и инженер- но-технических вычислений.

158 Языки программирования

__________________________________________________________________________________

Язык Фортран продолжает развиваться и совершенствоваться, оказывая сильное влияние на создание и развитие других языков программирования, например, Фортран заложен в основу диалогового языка Бейсик (BASIC — beginners all-purpose symbolic instruction code). Это переводится так:

многоцелевой язык символьных команд для начинающих.

Язык Бейсик позволил привлечь к изучению технологии программирования большое число людей из различных предметных областей (непро- фессионалов-программистов). В момент его создания он предназначался в основном для обучения программированию. Современные версии языка Бейсик позволяют решать сложные задачи на профессиональном уровне.

Первые версии Бейсика были интерпретирующими, что позволяло в диалоговом режиме быстро редактировать создаваемые программы. Последние версии Бейсика позволяют использовать оба вида трансляции: и компиляцию, и интерпретацию. При разработке программ Бейсик работает как интерпретатор, а для получения конечного варианта программа компилируется в машинные коды. Такой вариант позволяет получить высокую скорость отладки программы и одновременно большую скорость работы конечного продукта.

Алгол-60 (ALGOritmic Language — алгоритмический язык) — это более совершенный язык, чем Фортран.

Решение экономических задач (учет материальных ценностей, выпущенной предприятием продукции, личного состава) в 60-х годах ХХ столетия удобно было выполнять на языке Кобол.

Языки Лисп (Lisp) и Пролог (Prolog) были разработаны для решения задач, относящихся к искусственному интеллекту. Эти языки позволяют обрабатывать текстовую (символьную) информацию, решать логические и математические задачи.

Язык Пролог является непроцедурным языком логического программирования. Он выбран основным языком при разработке ЭВМ пятого поколения, которые будут обладать искусственным интеллектом.

Язык ЛОГО (LOGO) используется для обучения детей основам программирования. Характерной особенностью языка является применение так называемой «черепашьей» графики (движущаяся черепаха оставляет за собой след в виде рисунка).

Обилие алгоритмических языков, появившихся в период разработки и внедрения второго поколения ЭВМ, объясняется невозможностью ни одним из существовавших языков рационально решать разнообразные задачи. В это время появилась идея создания универсального алгоритмического языка.

Одной из попыток такого рода является разработка фирмой IBM языка ПЛ/1 (Programming Language). Он основан на языках Фортран, Алгол и Кобол.

В1971 г. появилась публикация с описанием языка Паскаль (Pascal),

вкотором проводятся идеи структурного программирования. Благодаря хорошей структурированности программ, написанных на языке Паскаль, над

Языки программирования

159

__________________________________________________________________________________

разработкой сложных проектов могут одновременно работать несколько программистов.

На основе языка Паскаль в конце 70-х годов ХХ в. по заказу Министерства обороны США во Франции был разработан язык Ада (Ada). Язык назван в честь первой программистки Augusta Ada Byron, работавшей с Ч. Бэббиджем. Это хорошо структурированный язык, однако, слишком громоздкий и многословный.

Язык Ада используется при разработке программного обеспечения для компьютерных систем, встроенных в самонаводящиеся ракеты, космические объекты, самолеты. Эти системы работают в реальном масштабе времени, где накладываются жесткие требования на быстродействие. Язык Ада поддерживает параллельное выполнение задач в многомашинных и в многопроцессорных вычислительных системах. В этом случае программа делится на части и одновременно выполняется на нескольких процессорах.

Развитие современной вычислительной техники характеризуется тенденцией распространения многопроцессорных компьютеров и вычислительных сетей. Поэтому в области программного обеспечения вызывают все больший интерес языки, поддерживающие разработку распределенных программ (т. е. программ, которые выполняются с помощью нескольких процессоров или машин).

Одним из таких языков является Linda — язык, предназначенный для параллельной обработки данных. При использовании языка Linda вычислительный процесс делится на группу процессов, среди которых выделяется главный. Указанные процессы осуществляются одновременно на нескольких процессорах и синхронизируются один относительно другого.

Кроме языков Ада и Линда, существуют и другие языки параллельного и распределённого программирования, например, Erlang, Occam. Язык Erlang позволяет поддерживать связь между совместно работающими ЭВМ по протоколу TCP/IP.

Язык СИ позволяет писать эффективные программы, не прибегая к сложным конструкциям языков Ассемблера. На этом языке написана популярная операционная система UNIX.

Перспективным направлением дальнейшего развития технологии программирования явилось создание объектно-ориентированных языков программирования.

Объекты представляют собой многократно используемые программные модули. Структурно объекты состоят из двух частей: методов и переменных.

Методы представляют собой набор процедур и функций, определяющих алгоритм работы объекта. Переменные могут содержать как простые данные (числа, массивы, текст и т. д.), так и информацию сложной структуры (графика, звуки и т. д.).

160 Языки программирования

__________________________________________________________________________________

Однотипные объекты объединяются в классы. Объектноориентированное программирование (ООП) оперирует следующими тремя терминами: инкапсуляцией, наследованием и полиморфизмом.

Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними, в объекте и скрыть детали реализации от пользователя. Такое «сокрытие» информации позволяет объектам спрятать их внутреннее устройство. При этом объект можно использовать, ничего не зная о механизме его работы и ненужных деталях. При инкапсуляции объект заключается в непроницаемую оболочку (интерфейс),

итолько его внешний вид доступен для использования.

Спомощью механизма наследования одни классы объектов могут происходить от других. Дочерний класс способен перенять от своего родительского класса все его методы и данные, причем потомок может унаследовать способности и от нескольких родителей.

Полиморфизм — это свойство, которое позволяет объекты с одинаковым интерфейсом использовать для решения двух или более сходных, но технически разных задач. С помощью полиморфизма можно создать общий интерфейс для группы близких по назначению действий. Например, символ + используется для суммирования целых чисел, длинных целых чисел, чисел с плавающей точкой и конкатенации символьных переменных.

Первым объектно-ориентированным языком программирования был язык Simula 67 (Симула). Он разработан в конце 60-х годов ХХ столетия в Норвегии для решения задач моделирования.

Первоначально прохладному отношению к языку Симула способствовало то обстоятельство, что он был реализован как интерпретируемый (а не компилируемый) язык, что в 60-е годы прошлого столетия было существенным недостатком, так как интерпретация связана со снижением скорости выполнения программ.

Типичные современные объектно-ориентированные языки, такие как Си++ и Smalltalk, содержат инструменты, которые максимально облегчают повторное использование созданных программных модулей.

Язык Smalltalk — один из наиболее развитых и мощных объектноориентированных языков программирования. В нем присутствуют все основные признаки объектно-ориентированного языка, в том числе наследование, полиморфизм и инкапсуляция данных.

Язык Дельфи (Delphi) разработан фирмой Borland на базе языка Тур- бо-Паскаль. Чаще всего этот язык программирования используется для работы с базами данных по технологии клиент-сервер. Основной упор в Дельфи делается на максимальном повторном использовании имеющихся программ. Это позволяет разработчикам строить приложения из уже существующих объектов, а также дает им возможность создавать свои собственные объекты.