Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Защита программ от компьютерных вирусов

я
абсолютного адреса перемещаемой ссылки;
• извлекается слово по адресу ReloSeg:ltemOfs-сегментная часть перемещаемой
ссылки;
• к этому слову прибавляется StartSeg (осуществляется так называемая
привязка сегмента);
• результат помещается обратно по адресу ReloSeg:ltemOfs.
      9) Выделяется память за концом программы в соответствии со значениями
MinMem и МахМет.
      10) Инициируются регистры и запускается программа:
• регистры ES и DS получают значение сегмента, в котором располагается
PSP',
• регистр АХ отражает корректность идентификаторов дисков в командной
строке (при нормальном запуске содержит 0);
•  SS = StartSeg+ReloSS;
•  SP = ExeSP;
•  CS == StartSeg^ReloCS;
•   IP= Exelp;
• содержимое остальных регистров не имеет значения. Регистры сегмента кода
CS и указателя инструкций IP обычно инициируются следующими тремя
командами:
      PUSH StartSeg+ReloCs
      PUSH Exelp
      RETF
(команда RETF дальнего возврата из  подпрограммы  извлекает  из  стека  два
слова-смещение и сегмент адреса перехода-и помещает их соответственно в  IP
и CS).
      Таким образом, сразу после получения управления фаг должен  сохранить
значения регистров АХ и DS и поместить в DS значение собственного  сегмента
данных. На практике  сегмент  данных  в  коротких  ассемблерных  программах
обычно совпадает с сегментом кода, т.е. программа и  данные  размещаются  в
одном сегменте.  Сегмент  стека  SS  можно  не  изменять,  т.к.  программа-
установщик фага должна позаботиться о  том,  чтобы  стек  не  разрушил  код
самого фага, и соответствующим образом настроить ReloSS и/или ExelP. Обычно
в ЕХЕ-программе начальное значение  ReloSS  таково,  что  стек  размещается
сразу за концом программы, т.е.  в  том  месте,  куда  программа-установщик
помещает "код фага. Длина стека ExeSP как правило более чем достаточна  для
того, чтобы работа фага со  стеком  не  привела  к  разрушению  кода  фага,
поэтому в  большинстве  случаев  установщик  оставляет  начальные  значения
ReloSS и ExeSP без изменения.

                 4.1. Описание программ SetFag.pas и Fag.asm

      В этом  параграфе  описываются  программы  SetFag.pas  и  Fag.asm,  с
помощью которых  реализуется  описанный  выше  механизм  защиты.  Программа
SetFag  (прил.П8.1)  осуществляет  установку  фага,  а  программа   Fag.asm
(прил.П8.2)  содержит   сам   фаг.   Если   Вы   захотите   воспользоваться
предлагаемыми программами, откомпилируйте Турбо  Ассемблером  файл  Fag.asm
командой
                                 tasm fag /L
В ходе компиляции на экран будет выведено 13 предупреждений вида
Warning* Open procedure: XXXXXX а в конце сводка:
Error message:    None Warning message: 13 Passes:           I Remainig
memory: XXXК
      Если в строке Error message вместо None  указано  число  обнаруженных
ошибок,  просмотрите  файл  листинга  компиляции  fag.lst,  отыщите  в  нем
•сообщения компилятора  об  ошибках  и  устраните  их.  Затем  преобразуйте
полученный файл fag.obj в программу Fag.prg командой
                             tiink fag, fag.prg
Компоновщик должен сообщить Warning: No stack
      Замечу, что программа Fag.prg не может  работать  самостоятельно  без
предварительной  настройки  установщиком  SetFag.exe,   поэтому   в   целях
предосторожности  ей  присваивается  нестандартное  расширение   PRG.   Для
установки защиты на любой ЕХЕ-фаил следует дать команду
                                setfag NAME,
где  NAME-имя  защищаемого  файла.  Иными  словами,  имя  файла  передается
программе установки фага SetFag.exe с помощью параметров запуска.  В  имени
NAME можно опускать стандартное расширение ЕХЕ, а также разрешается указать
маршрут поиска файла и/или символы—заменители ДОС «*» и«?» для  определения
группового имени-в этом случае защита будет  установлена  на  каждый  файл,
соответствующий групповому имени. Например, команда
                              setfag d:mydir *
означает требование установить защиту на все ЕХЕ-файлы из каталога MYDIR на
диске D.
      Перед установкой зашиты программа осуществляет серию проверок  файла.
Она проверяет заголовок файла и блокирует установку защиты, если первые два
байта заголовка не соответствуют сигнатуре «MZ» (признаку ЕХЕ-файла). Кроме
того, она проверяет «хвост» файла с тем, чтобы убедиться в отсутствии  кода
фага, и блокирует повторную установку защиты на уже защищенный файл. Далее,
защита не устанвливается также в том случае, если длина  загружаемой  части
файла станет слишком большой (превысит  доступную  память).  Если  в  конце
файла  обнаружена  незагружаемая  часть,  программа  информирует  об   этом
пользователя и запрашивает у него подтверждение на установку за-щиты. После
завершения всех проверок программа создает резервную копию исходного  файла
с расширением ВАК. Создание ВАК-файла можно запретить, если команду  вызова
дополнить  ключом  /NOBAK,  например  setfag  myprog  /nobak.  Для   защиты
используется ключ, соответствующий такой структуре данных:

Type
  HeadType = record
   case Byte of
1:(Sign   : Word; {Сигнатура 'MZ' = $5MD}
PartPag: Word; {Часть неполного сектора}
PageCnt: Word; {Количество секторов}
ReloCnt: Word; {Количество элементов в таблице перемещения}
HdrSize: Word; {Длина заголовка в параграфах}
MinMem : Word; {Минимальный размер кучи}
МахМет : Word); {Максимальный размер кучи}
end.

      Разумеется, фаг нельзя устанавливать на файлы, защищенные  средствами
модуля F_Anti так как  в  этом  случае  процедура  CheckFile  этого  модуля
обнаружит   изменение   заголовка   и   удалит   фаг.   Кроме   того,   фаг
пристыковывается в конец программы  и,  следовательно,  не  может  защищать
крупные программы.  Последнее  обстоятельство  контролируется  установщиком
SetFag.

ReloSS : Word; {Начальное значение сегмента стека SS}
ExeSP : Word; {Начальное значение указателя стека SP}
ChkSum : Word; {Контрольная сумма всех слов файла}
   ExelP : Word; {Смещение точки запуска программы}
   ReloCS : Word; {Начальное значение сегмента кода CS});
2:(W: array [1..12] of Word) end;

TAVir = record
Head24: HeadType;    {24 байта эталонного заголовка}
Starts: Word; {Относительный сегмент}
StartO: Word; {и смещение точки запуска программы} Leng24: Longint;{Длина
незараженной программы минус 24 байта}
Key   : Word; {Ключ шифровки}
end;

      Как видим, этот ключ-несколько отличается от использованного в модуле
F_Anti: сохраняются только  24  байта  заголовка  (вряд  ли  вирус  изменит
смещение таблицы TablOff  и  номер  оверлея  Overlay),  исключено  ненужное
теперь  поле  HFf  добавлены  поля  StartS   и   StartO   для   запоминания
относительного адреса точки запуска  защищаемой  программы.  Поле  Key  по-
прежнему содержит шифр для  защиты  ключа.  Суммарная  длина  ключа  SizeOf
{TAVir) составляет 34 байта.
      Процесс установки защиты состоит из следующих этапов.
     1) В динамическую память считывается код фага  из  файла  FAG.PRG.  Вы
можете создать свой вариант фага и заставить программу SetFag  использовать
его, если в команду запуска установщика добавите ключ /F: NameFag.Ext,  где
NameFag,Ext-имя и расширение файла, содержащего разработанный Вами  фаг.  В
этом случае учтите, что SetFag помещает 34—байтный ключ в самое начало кода
фага (см. листинг FAG. ASM) и поэтому при считывании из файла пропускает 34
байта от начала его загружаемой части.  Выделение  кода  фага  в  отдельный
P^G—файл понадобилось мне на этапе разработки и отладки кода фага. Я  решил
сохранить возможность загрузки кода из внешнего файла для  того,  чтобы  Вы
смогли при желании поэкспериментировать с этим кодом.
      2) В поле Head24 переменной НН типа TAVir считывается заголовок  ЕХЕ-
файла и  осуществляется  настройка  ключа  НН:  в  полях  StartS  и  StartO
запоминается  относительный  адрес  точки  запуска  защищаемой   программы;
вычисляется файловое смещение LS в параграфах, соответствующее полной длине
файла и выровненное на границу параграфа - с этим смещением от начала файла
в него будет помещен ключ и тело фага (выравнивание  на  границу  параграфа
необходимо  для  того,  чтобы  обеспечить   корректность   внутрисегментной
адресации кода фага); в ReloCS  помещается  новое  значение  относительного
сегмента точки запуска фага, а в ExelP-смещение этой точки;  рассчитывается
новое значение длины загружаемой части файла с учетом ключа и тела  фага  и
соответствующим образом изменяются поля PageCnt и  PartPag;  проверяются  и
при необходимости корректируются поля MinMem и ExeSP  так,  чтобы  стек  не
разрушил код фага.
      3) В начало ЕХЕ-файла записывается новый заголовок  HH.Head24,  затем
осуществляется смещение файлового указателя на 15*16 байт от начала файла и
в него записывается зашифрованный ключ и тело фага. Ассемблерная  программа
FAG. ASM работает следующим образом.
      Сразу после получения управления фаг сохраняет в  стеке  регистр  АХ,
запоминает в переменной PSP значение регистра сегмента данных  DS  (в  этот
момент он указывает на префикс  программного  сегмента)  и  помещает  в  DS
сегмент кода CS (данные и код фага расположены  в  одном  сегменте).  Кроме
того, в переменной SPO запоминается вершина стека,  а  в  CSO-сегмент  кода
фага.  Затем  вычисляется  абсолютный  сегмент  точки  запуска   защищаемой
программы (как уже  говорилось,  он  равен  PSP+16)  и  найденное  значение
помещается в StartS-таким образом готовится запуск защищаемой программ.
      Вся основная работа фага запрограммирована  в  серии  последовательно
вызываемых процедур (при разработке фага  использовался  метод  нисходящего
программирования). Вначале с помощью процедуры  GetExeNome  фаг  определяет
полное  имя   защищаемого   ЕХЕ-   файла.   Для   этого   используется   то
обстоятельство, что в версиях ДОС 3.0 и выше стандартный загр
12345
скачать работу

Защита программ от компьютерных вирусов

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ