Реферат по Информатике ученика 11 " а "
Вид материала | Реферат |
- Учебно-методический комплекс курса по выбору "задачи егэ по информатике" (физико-математический, 704.64kb.
- Реферат по информатике что такое «реферат», 129.5kb.
- Реферат. Ученика 10 класса "Б", 386.1kb.
- Эксперт-рецензия на реферат, 56.28kb.
- Рабочая программа по информатике в 5 классе на 2010-2011 учебный год, 228.89kb.
- Реферат по информатике и икт на тему: «Логика», 356.67kb.
- Методические рекомендации по организации контроля учебных достижений учащихся, 322.73kb.
- Реферат по географии ученика 10 «Б» класса, 144.05kb.
- Обучение информатике во II-IV классах рекомендуется проводить учителям начальной школы, 112.11kb.
- Русская общественная мысль первой половины, 405.71kb.
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 байта от начала его загружаемой части. Выделение кода фага в отдельный PG—файл понадобилось мне на этапе разработки и отладки кода фага. Я решил сохранить возможность загрузки кода из внешнего файла для того, чтобы Вы смогли при желании поэкспериментировать с этим кодом.
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 и выше стандартный загрузчик помещает полное имя загружаемого файла в расширенное окружение ДОС. Окружение ДОС - это область памяти длиной до 32 Кбайт, в которой ДОС сохраняет переменные окружения типа COMSPEC, PATH, PROMPT и т.п. Каждая переменная окружения представляет собой текстовую строку, составленную из кодов ASCII, в конце которой ставится байт 0 как признак конца строки - фирма IBM называет такой код ASCIIZ (Z - Zero, ноль). Переменные окружения располагаются в памяти последовательно друг за другом. В конце «стандартной» части окружения (эта часть поддерживается и в ранних версиях ДОС) ставится дополнительный нулевой байт. За стандартной частью следует расширенная часть, куда загрузчик новых версий ДОС помещает полное имя файла (с указанием диска и маршрута поиска) и, возможно, параметры обращения к программе. Таким образом, чтобы найти имя файла, нужно отыскать в окружении ДОС два ноля подряд - это признак начала расширенной части окружения. Слово, следующее за этим признаком, содержит количество переменных в расширенной части, за ним помещаются сами переменные. Например, в терминах ассемблера структура окружения может быть такой:
db *COMSPEC==C:\COMMAND .СОМ ',0 ; Переменная
COMSPEC db 'PATH=C:\;C:\DOS;D:\TP*,0 ; Переменная
PATH db * PROMPT==$p$g * , 0; Переменная
PROMPT db 0 ; Признак конца
В этом месте кончается стандартная часть окружения и начинается его расширенная часть (только для ДОС 3.0 и выше!).
dw 2 ; Количество переменных в расширенной части
db 'D:\MYDIR\SETFAG .ЕХЕ ',0 ;Имя файла
db */NOBAK*,0 ; Параметр вызова
Перед передачей управления программе загрузчик копирует окружение в отдельную область памяти и помещает сегмент этой области в PSP (в слово со смещением 44 байта от начала PSP).
В заключение следует сказать, что программы SetFag и Fag.asm не являются эталоном. Просто мне показалось, что такой способ организации защиты ЕХЕ- файлов будет достаточно удобным в использовании и эффективным в работе. Действительно, тестовые заражения программ специально разработанным вирусом, а также вирусом Yankee показали, что фаг успешно выполняет свои функции.
Поскольку программу Fag.asm без особого труда можно изменить, существует потенциальная опасность, что этот материал может быть использован для разработки вирусов. Я очень надеюсь, что к Вам, уважаемый читатель, это не относится.