Смекни!
smekni.com

Разработка антивирусного монитора

  1. Методзащиты файловдиска «Эксклюзив»



Начало


Ввод диска длязащиты, Вы-

бор типовобъектов защиты

и способадоступа к ним.


Конец спискаДа

каталогов?


Нет


Да Конец списка

файлов?


Нет


Неверный типДа

объекта?


Нет


Открытиефайла,

свыбраннымипра-

вамидоступа к нему

другихпроцессов.


Да Продолжатьвыполнение?

(ДА)


Нет


Да Продолжатьвыполнение?

(ДА)


Нет


Конец


  1. Методзащиты откопированияпрограммы



Начало


Чтениеиз памяти Припервом запуске

датыизготовления создаётся«dbpg.ini»,

BIOS(0xffff5) содержащийзагам-

мированнуюдату

создания BIOS.


«Программныйфайл

Файл «dbpg.ini»существ? несуществует!» Нет


Да


Чтениеиз файла

«dbpg.ini»созданной

при установкеи загам-

мированнойдаты BIOS


Гамма-функ-

ции не совпадают?


«Нелегальная копия

программы!!!»


Конец


Запуск программы


  1. Гаммирование




Начало


Str = “”


I = 0

SoderjVvoda = ””

Simvol = ””

S = 1

Gamma = “GAMMA”


Нет

S

Да


Simvol = Str[S]


Gamma[S-1]+Нет SoderjVvoda+=

Simvol >= 255 Gamma[s-1]+Simvol


Да


Simvol+=Gamma[s-1]-255

SoderjVvoda+=simvol


Нет

S > Str.Length+1


Да


Конец


Анализсуществующихвариантоврешения задачии выбор наиболееприемлемого.

Антивирусныемониторы.

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

К достоинстваммониторовотносится ихспособностьобнаруживатьи блокироватьвирус на самойранней стадииего размножения,что, кстати,бывает оченьполезно в случаях,когда давноизвестный вируспостоянно"выползаетнеизвестнооткуда". К недостаткамотносятсясуществованиепутей обходазащиты монитораи большое количестволожных срабатываний,что, видимо, ипослужилопричиной дляпрактическиполного отказапользователейот подобногорода антивирусныхпрограмм (мне,например, неизвестнони об одноммониторе дляWindows 95/NT — нет спроса,нет и предложения).

Необходимотакже отметитьтакое направлениеантивирусныхсредств, какантивирусныемониторы, выполненныев виде аппаратныхкомпонентовкомпьютера("железа"). Наиболеераспространеннойявляется встроеннаяв BIOS защита отзаписи в MBR винчестера.Однако, как ив случае спрограммнымимониторами,такую защитулегко обойтипрямой записьюв порты контроллерадиска, а запускDOS-утилиты FDISKнемедленновызывает ложноесрабатываниезащиты.

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


Обнаружениезагрузочноговируса

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

Вначалеследует проверитьсодержимоесектора, подозрительногона наличиевируса. Дляэтой цели удобноиспользоватьDISKEDIT из "Нортоновскихутилит" илиAVPUTIL из профессиональногокомплекта AVP.

Некоторыезагрузочныевирусы практическисразу можнообнаружитьпо наличиюразличныхтекстовых строк(например, вирусStoned содержитстроки: "Your PC is nowStoned!", "LEGALISE MARIJUANA!"). Некоторыевирусы, поражающиезагрузочныесектора дисков,наоборот,определяютсяпо отсутствиюстрок, которыеобязательнодолжны бытьв загрузочномсекторе. К такимстрокам относятсяимена системныхфайлов (например,строка IOSYSMSDOS SYS) истроки сообщенийоб ошибках.Отсутствиеили изменениестроки-заголовказагрузочногосектора (строка,содержащаяномер версииDOS или названиефирмы — производителяПО, напримерMSDOS5.0 или MSWIN4.0) такжеможет служитьсигналом озаражениивирусом, еслина компьютерене установленаWindows 95/NT, так как этисистемы понеизвестноймне причинезаписываютв заголовокзагрузочныхсекторов дискетслучайныестроки текста.

СтандартныйзагрузчикMS-DOS, расположенныйв MBR, занимаетменьше половинысектора, и многиевирусы, поражающиеMBR винчестера,довольно простозаметить поувеличениюдлины кода,расположенногов секторе MBR.

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

Существуюттакже вирусы,использующиеболее сложныеприемы заражения,например, изменяющиепри инфицированииMBR всего 3 байтаDisk Partition Table, соответствующиеадресу активногозагрузочногосектора. Дляидентификациитакого вирусапридется провестиболее детальноеисследованиекодов загрузочногосектора вплотьдо полногоанализа алгоритмаработы егокода.

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


Обнаружениефайловоговируса.

Все вирусыделятся нарезидентныеи нерезидентные.

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

Можно такжепросмотретьдамп выполняемыхфайлов. В некоторыхслучаях можносразу обнаружитьприсутствиевируса по наличиюв его коде текстовыхстрок. Многиевирусы, например,содержат строки:".СОМ", "*.СОМ",".ЕХЕ", "*.ЕХЕ","*.*", "MZ", "COMMAND" и т.д. Эти строкичасто встречаютсяв начале илив конце зараженныхфайлов.

Существуети еще один способвизуальногоопределениязараженноговирусом файла.Он основан натом, что выполняемыефайлы, исходныйтекст которыхнаписан наязыке высокогоуровня, имеютвполне определеннуюструктуру. Вслучае Borland илиMicrosoft C/C++ сегменткода программынаходится вначале файла,а сразу за ним— сегмент данных,причем в началеэтого сегментастоит строка-копирайтфирмы — изготовителякомпилятора.Если в дампетакого файлаза сегментомданных следуетеще один участоккода, то вполневероятно, чтофайл зараженвирусом.

То же справедливои для большинствавирусов, заражающихфайлы Windows. В выполняемыхфайлах этойОС стандартнымявляется размещениесегментов вследующемпорядке: сегмент(ы)кода, за нимсегменты данных.Если за сегментомданных идетеще один сегменткода, это такжеможет служитьсигналом оприсутствиивируса.

Рекомендуетсязапустить однуиз резидентныхантивирусныхпрограмм-мониторови следить заее сообщениямио подозрительныхдействияхпрограмм (записьв СОМ- или ЕХЕ-файлы,запись на дискпо абсолютномуадресу и т. п.).Существуютмониторы, которыене толькоперехватываюттакие действия,но и сообщаютадрес, откудапоступилподозрительныйвызов (к такиммониторамотноситсяAVPTSR.COM). Обнаруживподобное сообщение,следует выяснить,от какой программыоно пришло, ипроанализироватьее коды припомощи резидентногодизассемблера(например,AVPUTIL.COM). При анализекодов программ,резидентнонаходящихсяв памяти, большуюпомощь частооказываеттрассированиепрерываний13h и 21h.

Следуетотметить, чторезидентныеDOS-мониторы частооказываютсябессильны, еслиработа ведетсяв DOS-окне подWindows 95/NT, посколькуWindows 95/NT позволяютвирусу работатьв обход монитора(как, впрочем,и всех остальныхрезидентныхпрограмм).DOS-мониторынеспособныостановитьтакже распространениеWindows-вирусов.

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

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


Выбор методовпостроенияантивирусногомонитора.

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

Альтернативнымспособом в этойситуации являетсярегулярноесканированиефайлов. Хотя,конечно, этоотнимает намногобольше системныхресурсов, чеммониторингобращений кдиску, но чтоесли сканироватьне все .exeи .comфайлы, а лишьтолько маленькуючасть из них. Дело в том, чтовирусы «охотятся»на любые исполняемыефайлы, а некоторыеизощренныевирусы, могут,например, «ловить»только файлы,размеры котороголежат в приделахот 40 до 300 Кб. В этомсмысле, можнолегко выделитьгруппу файлов,которая подходилабы под запросылюбого вируса,и размеры еёне превышали бы 5-7 штук. Но ведьсовсем не обязательноподставлятьпод удар «своих»,когда можносоздать заведомоненужную группуи выставлятьеё как бы «ловушкой»для вируса, вто время какнужные файлыбыли бы подзащитой.

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


Постановказадачи напроектирование.

Метод ведениямониторингавирусоподобныхситуаций.

Объектымониторинга:

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

  • С:\trap3.exe(37,5Kb)

  • C:\Windows\trap1.exe(631Kb)

  • C:\Windows\trap2.com(37,5Kb)

Описаниеметода:

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

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

Преимуществаметода:

  • Простотареализации.Программно,способ достаточнолёгок и прозрачен.

  • Достоверность.В отличие отостальныхантивирусныхмониторовошибка второгорода исключена.

  • Универсальность.Данный антивирусныймонитор способенвыявлять действиякак Windows-вирусов,так и DOS-вирусов,ввиду своейне привязанностик особенностямоперационнойсистемы.

Недостаткиметода:

  • Сложностипри созданииоптимальногоподмножествафайлов-ловушек


Метод защитыфайлов отнесанкционированногоиспользования,изменения имодификации– «Эксклюзив».

Объектызащиты:

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

Описаниеметода:

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

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

Способыприменения:

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

Преимуществаметода:

  • Минимальныетребованияк аппаратнымресурсам

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

  • Не ограниченноемножествообъектов защиты

  • Предельнопростая реализацияна уровне приложения


Методы построениясистемы защитыот несанкционированного копирования и использованияприложения.

Метод фиксацииаппаратнойплатформы.

В дистрибутивепрограммногопакета, помимоисполняемогофайла самогоантивирусногомонитора«Amonit.exe»,содержитсяфайл «Creator.exe»,который послепервого запускаприложенияудаляется. Ноперед своимудалением, онсоздаёт новый«ini-файл»,в котором содержитсявсего однослово – загаммированнаядата производстваBIOSкомпьютера-носителя.Этот файл недоступен приактивированномприложении,но открыт впротивномслучае. Еслиэтот файл былслучайно удалён,то без переустановкипрограммы,открыть её неудастся.

Метод шифровкиключевой информации.

В предложенномвариантеантивирусногомониторапредусмотреназащита отнесанкционированногоснятия программыс выполнения- пароль. Он хранитсяна инсталляционнойдискете в файле«pif.ini»в загаммированномвиде. Легальныйпользовательможет всегдазадать илиизменить этотпароль припомощи специальнойпрограммнойопции.

Изменить пароль безиспользованияпрограммнойопции, т.е. методомнепосредственногоизменения файлазатруднительно,поскольку отэтого предусмотренанебольшаязащита. Делов том, что пустойфайл «pif.ini»не означаетпустой пароль.

Программаантивирусногомонитора – это.exeфайл для Windows,поэтому запускего на выполнениепорождает всистеме процесси он естественнодолжен фиксироватьсяв списке процессовWindows.Но это обстоятельстводелает программуочень уязвимойв плане того,что её можноснять с выполнения.Для этого впрограммепредусмотренспособ обходасистемнойрегистрациипроцесса идругой пользовательне в силах снятьэтот процессне прибегаяк стороннимразработкам.


Метод защитыфайлов отнесанкционированногоиспользования,изменения имодификации– «Эксклюзив».


Объекты защиты:

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


Описание метода:

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

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


Способы применения:

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


Преимуществаметода:

  • Минимальныетребованияк аппаратнымресурсам

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

  • Не ограниченноемножествообъектов защиты

  • Предельнопростая реализацияна уровне приложения


Разработал:Трутнев ЕвгенийВладимирович23ноября 2003г.



МинистерствообразованияРФ

Тульскийгосударственныйуниверситет

Кафедра ЭВМ

Защита системногопрограммногообеспечения

Курсоваяработа

Антивирусныймонитор

Выполнилстудент/ТрутневЕ.В./

гр.230901датаподпись

Проверил:/СавинН.И./

датаподпись

Тула 2003

Оглавление

Оглавление1

1. Анализсуществующихвариантоврешения задачии выбор наиболееприемлемого2

1.1.Антивирусныемониторы2

1.2. Обнаружениезагрузочноговируса 3

1.3. Обнаружениефайловоговируса 5

1.4. Выборметодов построенияантивирусногомонитора7

2. Постановказадачи напроектирование8

2.1. Методведения мониторингавирусоподобныхситуаций8

2.2. Методзащиты файловот несанкционированногоиспользования,изменения имодификации– «Эксклюзив».9

2.3. Методыпостроениясистемы защитыот несанкционированного копирования и использованияприложения10

2.3.1. Методфиксации аппаратнойплатформы10

2.3.2. Методшифровки ключевойинформации10

3. Модельнарушителяи системы защиты12

4. Разработкаалгоритмовдля выбранныхметодов решения13

4.1. Методзащиты файловдиска «Эксклюзив»13

4.2. Методзащиты откопированияпрограммы14

4.3.Гаммирование15

5. Руководствосистемногопрограммистапо установкекомплекса16

6.Организационныетребованияк эксплуатациисистемы защиты16

Обзорлитературныхисточников17

Листингпрограммы18

Заголовочныйфайл основнойформы (Unit1.h)18

C++ файлосновной формы(Unit1.cpp)18

C++ файлформы парольногоокна (Unit2.cpp)24

C++ файлформы окнаизмененияпароля (Unit3.cpp)24

C++ файлпараллельнойнити (Unit6.cpp)25

C++ файлтестирующегоприложения(Вирус.cpp)27

С++ файлинсталляционногофайла Creator.cpp27

Списокглобальныхпеременных29

Описаниеосновных функций30


1. Анализ существующихвариантоврешения задачии выбор наиболееприемлемого

1.1. Антивирусныемониторы

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

К достоинстваммониторовотносится ихспособностьобнаруживатьи блокироватьвирус на самойранней стадииего размножения,что, кстати,бывает оченьполезно в случаях,когда давноизвестный вируспостоянно"выползаетнеизвестнооткуда". К недостаткамотносятсясуществованиепутей обходазащиты монитораи большое количестволожных срабатываний,что, видимо, ипослужилопричиной дляпрактическиполного отказапользователейот подобногорода антивирусныхпрограмм. [1]

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

Существуетнесколько болееуниверсальныхаппаратныхмониторов, нок перечисленнымвыше недостаткамдобавляютсятакже проблемысовместимостисо стандартнымиконфигурациямикомпьютерови сложностипри их установкеи настройке.Все это делаетмониторы крайненепопулярнымина фоне остальныхтипов антивируснойзащиты. [1]

1.2. Обнаружениезагрузочноговируса

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

Вначалеследует проверитьсодержимоесектора, подозрительногона наличиевируса. Дляэтой цели удобноиспользоватьDISKEDIT из "Нортоновскихутилит" илиAVPUTIL из профессиональногокомплекта AVP.

Некоторыезагрузочныевирусы практическисразу можнообнаружитьпо наличиюразличныхтекстовых строк(например, вирусStoned содержитстроки: "Your PC is nowStoned!", "LEGALISE MARIJUANA!"). Некоторыевирусы, поражающиезагрузочныесектора дисков,наоборот,определяютсяпо отсутствиюстрок, которыеобязательнодолжны бытьв загрузочномсекторе. К такимстрокам относятсяимена системныхфайлов (например,строка IOSYSMSDOS SYS) истроки сообщенийоб ошибках.Отсутствиеили изменениестроки-заголовказагрузочногосектора (строка,содержащаяномер версииDOS или названиефирмы — производителяПО, напримерMSDOS5.0 или MSWIN4.0) такжеможет служитьсигналом озаражениивирусом, еслина компьютерене установленаWindows 95/NT, так как этисистемы понеизвестноймне причинезаписываютв заголовокзагрузочныхсекторов дискетслучайныестроки текста.

СтандартныйзагрузчикMS-DOS, расположенныйв MBR, занимаетменьше половинысектора, и многиевирусы, поражающиеMBR винчестера,довольно простозаметить поувеличениюдлины кода,расположенногов секторе MBR.

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

Существуюттакже вирусы,использующиеболее сложныеприемы заражения,например, изменяющиепри инфицированииMBR всего 3 байтаDisk Partition Table, соответствующиеадресу активногозагрузочногосектора. Дляидентификациитакого вирусапридется провестиболее детальноеисследованиекодов загрузочногосектора вплотьдо полногоанализа алгоритмаработы егокода.

Приведенныерассужденияосновываютсяна том, чтостандартныезагрузчики(программы,записываемыеоперационнойсистемой взагрузочныесектора) реализуютстандартныеалгоритмызагрузки ОСи оформляютсяв соответствиис ее стандартами.Если же дискиотформатированыутилитами, невходящими всостав DOS (Disk Manager), тодля обнаруженияв них вирусаследует проанализироватьалгоритм работыи оформлениезагрузчиков,создаваемыхтакой утилитой.[2]

1.3. Обнаружениефайловоговируса

Все вирусыделятся нарезидентныеи нерезидентные.

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

Можнотакже просмотретьдамп выполняемыхфайлов. В некоторыхслучаях можносразу обнаружитьприсутствиевируса по наличиюв его коде текстовыхстрок. Многиевирусы, например,содержат строки:".СОМ", "*.СОМ",".ЕХЕ", "*.ЕХЕ","*.*", "MZ", "COMMAND" и т.д. Эти строкичасто встречаютсяв начале илив конце зараженныхфайлов.

Существуети еще один способвизуальногоопределениязараженноговирусом файла.Он основан натом, что выполняемыефайлы, исходныйтекст которыхнаписан наязыке высокогоуровня, имеютвполне определеннуюструктуру. Вслучае Borland илиMicrosoft C/C++ сегменткода программынаходится вначале файла,а сразу за ним— сегмент данных,причем в началеэтого сегментастоит строка-копирайтфирмы — изготовителякомпилятора.Если в дампетакого файлаза сегментомданных следуетеще один участоккода, то вполневероятно, чтофайл зараженвирусом.

То жесправедливои для большинствавирусов, заражающихфайлы Windows. В выполняемыхфайлах этойОС стандартнымявляется размещениесегментов вследующемпорядке: сегмент(ы)кода, за нимсегменты данных.Если за сегментомданных идетеще один сегменткода, это такжеможет служитьсигналом оприсутствиивируса.

Рекомендуетсязапустить однуиз резидентныхантивирусныхпрограмм-мониторови следить заее сообщениямио подозрительныхдействияхпрограмм (записьв СОМ- или ЕХЕ-файлы,запись на дискпо абсолютномуадресу и т. п.).Существуютмониторы, которыене толькоперехватываюттакие действия,но и сообщаютадрес, откудапоступилподозрительныйвызов (к такиммониторамотноситсяAVPTSR.COM). Обнаруживподобное сообщение,следует выяснить,от какой программыоно пришло, ипроанализироватьее коды припомощи резидентногодизассемблера(например,AVPUTIL.COM). При анализекодов программ,резидентнонаходящихсяв памяти, большуюпомощь частооказываеттрассированиепрерываний13h и 21h.

Следуетотметить, чторезидентныеDOS-мониторы частооказываютсябессильны, еслиработа ведетсяв DOS-окне подWindows 95/NT, посколькуWindows 95/NT позволяютвирусу работатьв обход монитора(как, впрочем,и всех остальныхрезидентныхпрограмм).DOS-мониторынеспособныостановитьтакже распространениеWindows-вирусов.

Рассмотренныевыше методыобнаруженияфайловых изагрузочныхвирусов подходятдля большинствакак резидентных,так и нерезидентныхвирусов. Однакоэти методы несрабатывают,если вирусвыполнен потехнологии"Стелс", чтоделает бесполезнымиспользованиебольшинстварезидентныхмониторов,утилит сравненияфайлов и чтениясекторов. [2]

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

1.4. Выбор методовпостроенияантивирусногомонитора

Передомной стоитзадача разработатьантивирусныймонитор подоперационнуюсистему Windows98. Первое,что приходитв голову прианализе такойзадачи, - разработатьрезидентнуюпрограмму,перехватывающуюобращения кдиску и привозникновениивирусоподобнойситуации генерирующуюисключение[7], либо простопредупреждениепользователю.Однако, написаниерезидентнойпрограммы подWindows, это далеконе простаязадача. Да и ковсему прочему,как оказалось,вовсе не обязательноперехватыватьи сканироватьвсе обращенияк диску, чтоможет вызыватьогромную массуложных срабатываний.

Альтернативнымспособом в этойситуации являетсярегулярноесканированиефайлов. Хотя,конечно, этоотнимает намногобольше системныхресурсов, чеммониторингобращений кдиску, но чтоесли сканироватьне все .exe и .com файлы,а лишь толькомаленькую частьиз них. Дело втом, что вирусы«охотятся»на любые исполняемыефайлы, а некоторыеизощренныевирусы, могут,например, «ловить»только файлы,размеры котороголежат в приделахот 40 до 300 Кб [2]. В этомсмысле, можнолегко выделитьгруппу файлов,которая подходилабы под запросылюбого вируса,и размеры еёне превышали бы 5-7 штук. Но ведьсовсем не обязательноподставлятьпод удар «своих»,когда можносоздать заведомоненужную группуи выставлятьеё как бы «ловушкой»для вируса, вто время какнужные файлыбыли бы подзащитой.

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

2. Постановказадачи напроектирование

2.1. Метод ведениямониторингавирусоподобныхситуаций

Объектымониторинга:

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

  • С:\trap3.exe(37,5Kb)

  • C:\Windows\trap1.exe(631 Kb)

  • C:\Windows\trap2.com(37,5 Kb)

Описаниеметода:

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

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

Преимуществаметода:

  • Простотареализации.Программно,способ достаточнолёгок и прозрачен.

  • Достоверность.В отличие отостальныхантивирусныхмониторовошибка второгорода исключена.

  • Универсальность.Данный антивирусныймонитор способенвыявлять действиякак Windows-вирусов,так и DOS-вирусов,ввиду своейне привязанностик особенностямоперационнойсистемы.

Недостаткиметода:

  • Сложностипри созданииоптимальногоподмножествафайлов-ловушек

2.2. Метод защитыфайлов отнесанкционированногоиспользования,изменения имодификации– «Эксклюзив».

Объектызащиты:

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

Описаниеметода:

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

Суть данногометода заключаетсяв следующем.Выбранныезащищаемыефайлы, помечаютсясистемой какоткрытые наэксклюзивноеиспользованиеприложением[7], использующим«Эксклюзив».Т.е. в файловойсистеме указываетсяслужебнаяинформацияо непосредственномвладельце файла(пользовательскомприложении).В зависимостиот цели, пользовательвыбирает способдоступа к файламдругих процессов,определённыйна некоторомподмножестве(полныйдоступ, закрытдля любых операций,закрыт длячтения, закрытдля записи)[7]. Тем самым,владельцемпрограммы,обеспечиваетсяэксклюзивноеправо владенияи определениеспособа доступак защищаемымобъектам другихпроцессов.

Способыприменения:

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

Преимуществаметода:

  • Минимальныетребованияк аппаратнымресурсам

  • Стойкостьк обходу защитыметода оцениваемаяуровнем стойкостиоперационнойсистемы с однойстороны иприложения,использующегоданный метод,с другой [3].

  • Не ограниченноемножествообъектов защиты

  • Предельнопростая реализацияна уровне приложения

2.3. Методы построениясистемы защитыот несанкционированного копирования и использованияприложения

2.3.1. Метод фиксацииаппаратнойплатформы

В дистрибутивепрограммногопакета, помимоисполняемогофайла самогоантивирусногомонитора«Amonit.exe», содержитсяфайл «Creator.exe», которыйпосле первогозапуска приложенияудаляется. Ноперед своимудалением, онсоздаёт новый«ini-файл», в которомсодержитсявсего однослово – загаммированная[5] дата производстваBIOS компьютера-носителя.Этот файл недоступен приактивированномприложении,но открыт впротивномслучае. Еслиэтот файл былслучайно удалён,то без переустановкипрограммы,открыть её неудастся.

2.3.2. Метод шифровкиключевой информации

В предложенномвариантеантивирусногомониторапредусмотреназащита отнесанкционированногоснятия программыс выполнения– пароль. Онхранится наинсталляционнойдискете в файле«pif.ini» в загаммированном[5] виде. Легальныйпользовательможет всегдазадать илиизменить этотпароль припомощи специальнойпрограммнойопции.

Изменить пароль безиспользованияпрограммнойопции, т.е. методомнепосредственногоизменения файлазатруднительно,поскольку отэтого предусмотренанебольшаязащита. Делов том, что пустойфайл «pif.ini» неозначает пустойпароль.

Программаантивирусногомонитора – это*.exe файл для Windows,поэтому запускего на выполнениепорождает всистеме процесси он естественнодолжен фиксироватьсяв списке процессовWindows [6]. Но это обстоятельстводелает программуочень уязвимойв плане того,что её можноснять с выполнения.Для этого впрограммепредусмотренспособ обходасистемнойрегистрациипроцесса идругой пользовательне в силах снятьэтот процессне прибегаяк стороннимразработкам.

3. Модель нарушителяи системы защиты


4. Разработкаалгоритмовдля выбранныхметодов решения

4.1. Метод защитыфайлов диска«Эксклюзив»

4.2. Метод защитыот копированияпрограммы

4.3. Гаммирование

5. Руководствосистемногопрограммистапо установкекомплекса

  1. Запустить,содержащийсяна инсталляционнойдискете,самораспаковывающийсяархив.

  2. Извлечьсодержимоеархива в нужнуюпапку.

  3. Выполнитьфайл «Amonit.exe». Приэтом из папкипрограммыудалится файл«Creator.exe» и создастсяфайл «dbpg.ini».

  4. Не закрывайтесразу программу,через некотороевремя появятсятри пробныеошибки, сигнализирующиео том, что антивирусныймонитор установлени успешнофункционирует.

6. Организационныетребованияк эксплуатациисистемы защиты

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

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

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

  4. Оптимизацияработы комплекса.Для оптимальнойработы системызащиты и, какследствие,операционнойсистемы в целом,системныйадминистратордолжен периодическипересматриватьнабор средствзащиты.

Обзор литературныхисточников

  1. ФигурновВ.Э. IBM PCдля пользователя– М.: «ИНФРА-М»,1995 г. – 432с.: ил.

  2. CD –500 Русских учебников.Истории о вирусах.М.: - НАВИГАТОР2001 г.

  3. Теоретическиеосновы компьютернойбезопасности.Учебное пособиедля вузов. –М.: Радио и связь2000 – 189с.

  4. ШамисВ.А. – «Borland C++ Builder 5 - Техникавизуальногопрограммирования»:Москва-2001

  5. ЧмораА.Л. «Современнаяприкладнаякриптография»2-е изд., стер. –М.: Гелиос АРВ,2002. – 256 с.: ил.

  6. Борн Г.Реестр Windows98: Пер. с англ. –СПб.:БХВ-Петербург,2003г. – 496 с.: ил.

  7. АрхангельскийА.Я. – Программированиев С++Builder 6 – М.: ЗАО«ИздательствоБИНОМ», 2002 г. –1152 с.: ил.

  8. СтефанР. Дэвис – «C++»(4-е издание):Москва – Санкт-Питербург– Киев, 2001


Приложение1

Листинг программы

Заголовочныйфайл основнойформы (Unit1.h)

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include

#include

#include

#include

#include "cdiroutl.h"

#include

#include

#include

#include

#include

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published:// IDE-managedComponents

TCDirectoryOutline*CDirectoryOutline1;

TFileListBox*FileListBox1;

TDriveComboBox*DriveComboBox1;

TLabel *Label1;

TButton *Button1;

TButton *Button2;

TButton *Button3;

TButton *Button4;

TButton *Button5;

TButton *Button6;

TButton *Button7;

TTimer *Timer1;

TAnimate *Animate1;

TControlBar *ControlBar1;

TButton *Button8;

TButton *Button9;

void __fastcallButton7Click(TObject *Sender);

void __fastcallButton5Click(TObject *Sender);

void __fastcallButton3Click(TObject *Sender);

void __fastcallButton6Click(TObject *Sender);

void __fastcallButton1Click(TObject *Sender);

void __fastcallDriveComboBox1Change(TObject *Sender);

void __fastcallButton2Click(TObject *Sender);

void __fastcallButton4Click(TObject *Sender);

void __fastcallTimer1Timer(TObject *Sender);

void __fastcallButton8Click(TObject *Sender);

void __fastcallButton9Click(TObject *Sender);

private:// User declarations

void __fastcallOnClose(TWMClose& Message);

public:// User declarations

__fastcallTForm1(TComponent* Owner);

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_CLOSE,TWMClose, OnClose)

END_MESSAGE_MAP(TComponent)

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

C++ файл основнойформы (Unit1.cpp)

#include

#pragma hdrstop


#include //

#include //

#include //

#include //для эксклюзивногодоступа


#include

#include

#include


#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit6.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "cdiroutl"

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------


String PathDir;

StringPathToTraps=ExtractFileDir(GetCommandLine()).c_str()+1;


TFScan *SecondProcess;

int trapshnd[3];

int hndsys[3];

intM[2000]; //ограничениечисла открываемых.EXEфайлов

int glob=0;

String ZashDrives="";

int ZashFiles=0;

int ZashFolders=0;

int ExeFiles=0;

int ComFiles=0;


String Gammirovanie(StringStroka)

{

charGamma[5]={'G','A','M','M','A'};

String SodegjVvoda="";

char simvol;

for(ints=1;s

{

if (s

{

simvol=Stroka[s];

if(((int)Gamma[s-1]+(int)simvol)>=255)

{

simvol=((char)((int)simvol+(int)Gamma[s-1]-255));

SodegjVvoda=SodegjVvoda+String((char)((int)simvol));

}

else

{

SodegjVvoda=SodegjVvoda+String((char)((int)Gamma[s-1]+(int)simvol));

}

}

}

return SodegjVvoda;

}

//---------------------------------------------------------------------------


String OpenAndReadFile(StringFName)

{

String pas="";

String SoderjDiska="";

FILE *F;

F=fopen(FName.c_str(), "r");

if(FileExists(FName))

{

for(ints=0;!feof(F);s++)

{

SoderjDiska=pas;

pas=pas+(char)(getc(F));

}

}

fclose(F);

return SoderjDiska;

}

//---------------------------------------------------------------------------


void OpenAndWriteFile(StringFName, String WordInFile)

{

String pas="";

String SoderjDiska="";

FILE *F;

F=fopen(FName.c_str(), "w");

if(FileExists(FName))

{

fputs(WordInFile.c_str(),F);

}

fclose(F);

}

//---------------------------------------------------------------------------


String DataBios(void)

{

String ItogData="";

unsigned char far * addr =(unsigned char far *) 0xffff5;

for(int s=0;s

{

ItogData=ItogData+(char)*addr;

*addr++;

}

return ItogData;

}

//---------------------------------------------------------------------------


void StelsProgram(void)//обеспечиваетскрытостьпроцесса отрегистрацииWindows

{

typedef DWORD (CALLBACK*LPFNDLLFUNC1)(DWORD,DWORD);

HINSTANCE hdll;

LPFNDLLFUNC1 f1;

hdll =LoadLibrary("Kernel32.dll");

f1 =(LPFNDLLFUNC1)GetProcAddress(hdll,"RegisterServiceProcess");

(f1)(0,1);

}

//---------------------------------------------------------------------------


void CloseTraps(void)

{

FileClose(trapshnd[0]);

FileClose(trapshnd[1]);

FileClose(trapshnd[2]);

}

//---------------------------------------------------------------------------


String PathTrapsDir(String Tr)

{

PathDir =PathToTraps+"\Traps\"+Tr;

return PathDir;

}

//---------------------------------------------------------------------------


void OpenTraps (void)

{

trapshnd[0]=FileOpen(PathTrapsDir("Trap1.exe"),fmShareExclusive);

trapshnd[1]=FileOpen(PathTrapsDir("Trap2.exe"),fmShareExclusive);

trapshnd[2]=FileOpen(PathTrapsDir("Trap3.exe"),fmShareExclusive);

}

voidExclusiveOpenAllExeAndComFilesOnDrive(void)

{

CloseTraps();

for(int j=1;jCDirectoryOutline1->Lines->Count; j++)

{

if(Form1->CDirectoryOutline1->Items[j]->Expanded==false)

{

Form1->CDirectoryOutline1->Items[j]->Expand();

ZashFolders++;

}

else

{

ZashFolders++;

}

Form1->FileListBox1->Directory=Form1->CDirectoryOutline1->Items[j]->FullPath;

String vrem;

for(int i=0;iFileListBox1->Count; i++)

{

vrem=Form1->FileListBox1->Items->Strings[i];

if(vrem!="Trap1.exe")if(vrem!="Trap2.exe")if(vrem!="Trap3.exe")

{

StringRassh=AnsiLowerCase(ExtractFileExt(Form1->FileListBox1->Items->Strings[i]));

if(Rassh==".exe")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareDenyWrite);

glob++;

ExeFiles++;

FileSetAttr(Form1->FileListBox1->Items->Strings[i],NULL);

}

elseif(Rassh==".com")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareDenyWrite);

glob++;

ComFiles++;

FileSetAttr(Form1->FileListBox1->Items->Strings[i],NULL);

}

elseif(Rassh==".bat")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareDenyWrite);

glob++;

FileSetAttr(Form1->FileListBox1->Items->Strings[i],NULL);

}

}

}

}

Form1->CDirectoryOutline1->Refresh();

}

//---------------------------------------------------------------------------


__fastcallTForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

WinExec("Creator.exe",SW_MAXIMIZE);

DeleteFile("Creator.exe");

StringDataBiosFileName="dbpg.ini";

if(FileExists(DataBiosFileName))

{

StringItog=OpenAndReadFile(DataBiosFileName);

StringItog1=Gammirovanie(DataBios());

if(Itog1!=Itog)

{

Application->MessageBoxA("Нелегальнаякопияпрограммы!!!","Защита",MB_ICONSTOP);

exit(1);

}

else

{

Form1->CDirectoryOutline1->Items[1]->Collapse();

}

_sopen(DataBiosFileName.c_str(),O_RDONLY,SH_DENYRW);//обеспечиваетэкскл. доступк файлу

}

else

{

Application->MessageBoxA("Нарушениецелостностипрограммы!!!","Защита",MB_ICONSTOP);

exit(1);

}

StelsProgram();

CDirectoryOutline1->Items[1]->Collapse();

}

//---------------------------------------------------------------------------


voidSecuritySystemsBootFiles(void)

{

StringCmdCom="C:/Windows/Command.com";

StringCmdComOsn="C:/Command.com";

StringAutoExecBat="C:/AutoExec.bat";


hndsys[0]=FileOpen(CmdCom,fmShareExclusive);

hndsys[1]=FileOpen(CmdComOsn,fmShareExclusive);

hndsys[2]=FileOpen(AutoExecBat,fmShareExclusive);

}

//---------------------------------------------------------------------------

void __fastcallTForm1::Button7Click(TObject *Sender)

{

Form4->Visible=true;

}

//---------------------------------------------------------------------------

void __fastcallTForm1::Button5Click(TObject *Sender)

{

Form3->Visible=true;

}

//---------------------------------------------------------------------------

void __fastcallTForm1::Button3Click(TObject *Sender)

{

Form2->Visible=true;

}

//---------------------------------------------------------------------------

void __fastcallTForm1::Button6Click(TObject *Sender)

{

Form1->Hide();

}

//---------------------------------------------------------------------------

void __fastcallTForm1::Button1Click(TObject *Sender)

{

Form5->Visible=true;

ZashDrives=ZashDrives+""+DriveComboBox1->Drive;

Form4->Label8->Caption=ZashDrives;


ExclusiveOpenAllExeAndComFilesOnDrive();

OpenTraps();


ZashFiles=ComFiles+ExeFiles;

Form4->Label9->Caption=ZashFolders;

Form4->Label10->Caption=ZashFiles;

Form4->Label11->Caption=ExeFiles;

Form4->Label12->Caption=ComFiles;

Form5->Visible=false;

}

//---------------------------------------------------------------------------

void __fastcallTForm1::DriveComboBox1Change(TObject *Sender)

{

CDirectoryOutline1->Drive=DriveComboBox1->Drive;

CDirectoryOutline1->Items[1]->Collapse();

CDirectoryOutline1->Items[1]->Expand();

}

//---------------------------------------------------------------------------

void __fastcallTForm1::Button2Click(TObject *Sender)

{

FileClose(hndsys[0]);

FileClose(hndsys[1]);

FileClose(hndsys[2]);

SecuritySystemsBootFiles();

}

//---------------------------------------------------------------------------

void __fastcallTForm1::Button4Click(TObject *Sender)

{

FileClose(hndsys[0]);

FileClose(hndsys[1]);

FileClose(hndsys[2]);

}

void __fastcallTForm1::OnClose(TWMClose& a)

{

Form2->Visible=true;

}

//---------------------------------------------------------------------------


void CloseTimer(void)

{

Form1->Timer1->Enabled=false;

}

//---------------------------------------------------------------------------


void OpenTimer(void)

{

Form1->Timer1->Enabled=true;

}

//---------------------------------------------------------------------------


void __fastcallTForm1::Timer1Timer(TObject *Sender)

{

SecondProcess = new TFScan(true);

SecondProcess->Resume();

}

//---------------------------------------------------------------------------


void __fastcallTForm1::Button8Click(TObject *Sender)

{

Form5->Visible=true;

for(int j=1;jCDirectoryOutline1->Lines->Count; j++)

{

if(Form1->CDirectoryOutline1->Items[j]->Expanded==false)

{

Form1->CDirectoryOutline1->Items[j]->Expand();

}

Form1->FileListBox1->Directory=Form1->CDirectoryOutline1->Items[j]->FullPath;

String vrem;

for(int i=0;iFileListBox1->Count; i++)

{

vrem=Form1->FileListBox1->Items->Strings[i];

if(vrem!="Trap1.exe")if(vrem!="Trap2.exe")if(vrem!="Trap3.exe")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareDenyWrite);

}

}

}

Form1->CDirectoryOutline1->Refresh();

Form5->Visible=false;

}

//---------------------------------------------------------------------------


void __fastcallTForm1::Button9Click(TObject *Sender)

{

Form5->Visible=true;

for(int j=1;jCDirectoryOutline1->Lines->Count; j++)

{

if(Form1->CDirectoryOutline1->Items[j]->Expanded==false)

{

Form1->CDirectoryOutline1->Items[j]->Expand();

}

Form1->FileListBox1->Directory=Form1->CDirectoryOutline1->Items[j]->FullPath;

String vrem;

for(int i=0;iFileListBox1->Count; i++)

{

vrem=Form1->FileListBox1->Items->Strings[i];

if(vrem!="Trap1.exe")if(vrem!="Trap2.exe")if(vrem!="Trap3.exe")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareExclusive);

}

}

}

Form1->CDirectoryOutline1->Refresh();

Form5->Visible=false;

}

//---------------------------------------------------------------------------

C++ файл формыпарольногоокна (Unit2.cpp)

#include

#pragma hdrstop


#include "Unit1.cpp"

#include "Unit2.h"

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcallTForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------


void __fastcallTForm2::Button1Click(TObject *Sender)

{

StringItog1=Gammirovanie(Edit1->Text)+"m";

StringItog=OpenAndReadFile("A:/Прога/pif.ini");

Edit1->Text="";

if(Itog!=Itog1)

{

Application->MessageBoxA("Неверныйпароль!!!","Защита",MB_ICONSTOP);

Form2->Close();

}

else

{

for(int i=0; i

{

FileClose(M[glob]);

}

exit(1);

}

}

//---------------------------------------------------------------------------

void __fastcallTForm2::Button2Click(TObject *Sender)

{

Form2->Close();

}

//---------------------------------------------------------------------------

C++ файл формыокна измененияпароля (Unit3.cpp)

#include

#pragma hdrstop


#include "Unit1.cpp"

#include "Unit3.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

//---------------------------------------------------------------------------


String GamOldPass="";

String GamNuwPass="";

String SaveGamPass="";


__fastcallTForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------


void __fastcallTForm3::Button1Click(TObject *Sender)

{

GamOldPass=Gammirovanie(Edit1->Text)+"m";

SaveGamPass=OpenAndReadFile("A:/Прога/pif.ini");

if(GamOldPass==SaveGamPass)

{

if(Edit2->Text==Edit3->Text)

{

GamNuwPass=Gammirovanie(Edit2->Text)+"m";

OpenAndWriteFile("A:/Прога/pif.ini",GamNuwPass);

Form3->Close();

}

else

{

Application->MessageBoxA("Введеныразныепароли!!!","Отменаоперации",MB_ICONSTOP);

}

}

else

{

Application->MessageBoxA("Введённеверныйдействующийпароль!!!","Защита",MB_ICONSTOP);

}

}

//---------------------------------------------------------------------------

void __fastcallTForm3::Button2Click(TObject *Sender)

{

Form3->Close();

}

//---------------------------------------------------------------------------

C++ файлпараллельнойнити (Unit6.cpp)

#include

#pragma hdrstop


#include "Unit1.cpp"

#include "Unit6.h"

#include "Unit1.h"

#pragma package(smart_init)


void Zapolnenie(StringFName1,String FName2)

{

FILE *F1;

FILE *F2;

F1=fopen(FName1.c_str(), "rb");

F2=fopen(FName2.c_str(), "wb");

for(ints=0;s

{

putc(getc(F1),F2);

}

fclose(F1);

fclose(F2);

}

//----------------------------------------------------------------------


void Proverka(StringFName1,String FName2)

{

FILE *F1;

FILE *F2;

F1=fopen(FName1.c_str(), "rb");

F2=fopen(FName2.c_str(), "rb");

if(F1!=NULL)

{

if(F2!=NULL)

{

intLengthTrap1=filelength(_fileno(F1));

intLengthTrap2=filelength(_fileno(F1));

if(LengthTrap1!=LengthTrap2)

{

Application->MessageBoxA("Внимание!!!Произошлаперезапись.EXE или .COM файла!","Извещение!",MB_ICONSTOP);

fclose(F1);

fclose(F2);

Zapolnenie(FName1,FName2);

}

else

{

for(intj=0;j

{

if(getc(F1)!=getc(F2))

{

fclose(F1);

fclose(F2);

Zapolnenie(FName1,FName2);

Application->MessageBoxA("Внимание!!!Произошлазаписьв.EXE или.COM файл!","Извещение!",MB_ICONSTOP);

j=LengthTrap1;

}

}

}

}

else

{

if(!FileExists(FName2))

{

int DelFileHnd=0;

DelFileHnd=FileCreate(FName2);

FileClose(DelFileHnd);

fclose(F1);

fclose(F2);

Zapolnenie(FName1,FName2);

Application->MessageBoxA("Внимание!!!Былапредпринятапопытка удалитьфайл!!!","Извещение!",MB_ICONSTOP);

}

}

}

else

{

Application->MessageBoxA("Неудаётся открытьпрограммныйфайл!!!","Ошибка",MB_ICONSTOP);

exit(1);

}

fclose(F1);

fclose(F2);

}

//----------------------------------------------------------------------


__fastcall TFScan::TFScan(boolCreateSuspended)

:TThread(CreateSuspended)

{


}

//---------------------------------------------------------------------------


void __fastcall TFScan::Execute()

{

CloseTimer();

CloseTraps();

Proverka(PathTrapsDir("Trap1.exe"),"C:\Windows\Trap1.exe");

Proverka(PathTrapsDir("Trap2.exe"),"C:\Windows\Trap2.exe");

Proverka(PathTrapsDir("Trap3.exe"),"C:\Trap3.exe");

OpenTraps();

OpenTimer();

}

//---------------------------------------------------------------------------

C++ файлтестирующегоприложения(Вирус.cpp)

#include

#include

#include

#pragma hdrstop


#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcallTForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------


void __fastcallTForm1::Button1Click(TObject *Sender)

{

FILE *F;

if(F=fopen(Edit1->Text.c_str(),"w+b"))

{

fprintf(F,"\t This isvirus!!!");

fclose(F);

}

else

{

String t="Нетдоступа к файлу"+ExtractFileName(Edit1->Text)+"!!!";

Application->MessageBoxA(t.c_str(),"***Ошибка***",MB_ICONSTOP);

}

}

//---------------------------------------------------------------------------

void __fastcallTForm1::Button2Click(TObject *Sender)

{

OpenDialog1->Execute();

Edit1->Text=OpenDialog1->FileName;

}

С++ файл инсталляционногофайла Creator.cpp

#pragma hdrstop


#include "Unit1.h"


//---------------------------------------------------------------------------

#pragma package(smart_init)


#include

#pragma hdrstop


#include

#include

#include


//---------------------------------------------------------------------------

String Gammirovanie(StringStroka)

{

charGamma[5]={'G','A','M','M','A'};

String SodegjVvoda="";

char simvol;

for(ints=1;s

{

if (s

{

simvol=Stroka[s];

if(((int)Gamma[s-1]+(int)simvol)>=255)

{

simvol=((char)((int)simvol+(int)Gamma[s-1]-255));

SodegjVvoda=SodegjVvoda+String((char)((int)simvol));

}

else

{

SodegjVvoda=SodegjVvoda+String((char)((int)Gamma[s-1]+(int)simvol));

}

}

}

return SodegjVvoda;

}

//---------------------------------------------------------------------------


int main (void)

{

String DataBios="";

unsigned char far * addr =(unsigned char far *) 0xffff5;

for(int s=0;s

{

DataBios=DataBios+(char)*addr;

*addr++;

}


StringItog=Gammirovanie(DataBios);

StringDataBiosFileName="dbpg.ini";

FILE *F;

F=fopen(DataBiosFileName.c_str(),"w");

fputs(Itog.c_str(),F);

fclose(F);

}


Приложение2

Список глобальныхпеременных

StringPathDir//Содержиттекущую директорию

StringPathToTraps//Содержитпуть к файлу“Amonit.exe”

TFScan*SecondProcess//Указательна параллельнуюнить приложения

inttrapshnd[3]//Массивдескрипторовфайлов-закладок

inthndsys[3]//Массивдескрипторовсистемныхфайлов

intM[2000] //Массивдескрипторов.EXE файлов

intglob//Текущийэлемент массиваМ

StringZashDrives//Содержитназвание дискадля защиты

intZashFiles//Индикаторколичествазащищённыхфайлов

intZashFolders//Индикаторкол-ва защищённыхкаталогов

intExeFiles//Количествозащищённых*.EXE файлов

intComFiles//Количествозащищённых*.COM файлов

StringGamOldPass//Загаммированныйстарый пароль

StringGamNuwPass//Загаммированныйновый пароль

StringSaveGamPass//Сохранённыйзагаммированныйпароль


Приложение3

Описание основныхфункций

  1. StringGammirovanie(StringStroka)// Шифруетвходное словопри помощигаммы и возвращаетрезультат

charGamma[5]={'G','A','M','M','A'}//Массивсимволов, содержащийгамму

StringSodegjVvoda//Переменнаянакапливающаяитоговое слово

char simvol//Текущийзагаммированныйсимвол

  1. StringOpenAndReadFile(String FName)//Возвращаетслово изфайла

String FName//Имяфайла

String pas//Словоиз файла

StringSoderjDiska//Словоиз файла

  1. voidOpenAndWriteFile(StringFName, StringWordInFile)//Заноситв файл FNameслово WordInFile

String pas//Словоиз файла

String SoderjDiska//Словоиз файла

  1. StringDataBios(void)//Возвращаетпервые 5 символовдаты созданияBIOS

String ItogData//Содержитдату BIOS

unsigned char far *addr//Указательна адресBIOS

  1. voidStelsProgram(void)//Обеспечиваетскрытостьпроцесса отрегистрацииWindows

  2. voidCloseTraps(void)//Закрываетфайлы ловушки

  3. StringPathTrapsDir(StringTr)//Возвращаетпуть к оригиналамловушек

  4. voidOpenTraps (void)//Открываетфайлы ловушки

  5. voidExclusiveOpenAllExeAndComFilesOnDrive(void)//Открываетвсе исполняемыефайлы указанногов DriveComboBox1 дискас эксклюзивнымиправами доступа

String vrem//Текущийфайл спискаFileListBox1

  1. voidSecuritySystemsBootFiles(void)//Открываетсистемныезагрузочныефайлы с эксклюзивнымиправами доступа

  2. void__fastcall TForm1::OnClose(TWMClose&a)//Собственныйобработчикзакрытия окнаприложения.При попыткезакрыть окновозникает окноввода пароля.

  3. void__fastcall TForm1::Timer1Timer(TObject *Sender)//Обработчикактивациитаймера.Его выполнениепроисходиткаждые 10 секунд.Этот обработчиквызывает выполнениепараллельнойнити процессаприложения.

  4. void__fastcall TForm1::Button8Click(TObject*Sender)//Открываетвсе файлы дискас эксклюзивнымправом доступаприложения.Другие процессымогут толькочитать файл.

  5. void__fastcall TForm1::Button9Click(TObject*Sender) void__fastcall TForm1::Button9Click(TObject*Sender) )//Открываетвсе файлы дискас эксклюзивнымправом доступаприложения.Другие процессыне могут использоватьфайл.

String vrem//Текущийфайл спискаFileListBox1



Приложение1: Листинг программы


Заголовочныйфайл основнойформы (Unit1.h):


#ifndefUnit1H

#defineUnit1H

//---------------------------------------------------------------------------

#include

#include

#include

#include

#include"cdiroutl.h"

#include

#include

#include

#include

#include

//---------------------------------------------------------------------------

classTForm1 : public TForm

{

__published://IDE-managed Components

TCDirectoryOutline*CDirectoryOutline1;

TFileListBox *FileListBox1;

TDriveComboBox *DriveComboBox1;

TLabel *Label1;

TButton *Button1;

TButton *Button2;

TButton *Button3;

TButton *Button4;

TButton *Button5;

TButton *Button6;

TButton *Button7;

TTimer *Timer1;

TAnimate *Animate1;

TControlBar *ControlBar1;

TButton *Button8;

TButton *Button9;

void __fastcallButton7Click(TObject *Sender);

void __fastcallButton5Click(TObject *Sender);

void __fastcallButton3Click(TObject *Sender);

void __fastcallButton6Click(TObject *Sender);

void __fastcallButton1Click(TObject *Sender);

void __fastcallDriveComboBox1Change(TObject *Sender);

void __fastcallButton2Click(TObject *Sender);

void __fastcallButton4Click(TObject *Sender);

void __fastcallTimer1Timer(TObject *Sender);

void __fastcallButton8Click(TObject *Sender);

void __fastcallButton9Click(TObject *Sender);

private://User declarations

void __fastcall OnClose(TWMClose&Message);

public://User declarations

__fastcall TForm1(TComponent*Owner);

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_CLOSE,TWMClose, OnClose)

END_MESSAGE_MAP(TComponent)

};

//---------------------------------------------------------------------------

externPACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif


C++ файл основнойформы (Unit1.cpp)


#include

#pragmahdrstop


#include //

#include //

#include //

#include //для эксклюзивногодоступа


#include

#include

#include


#include"Unit1.h"

#include"Unit2.h"

#include"Unit3.h"

#include"Unit4.h"

#include"Unit5.h"

#include"Unit6.h"

//---------------------------------------------------------------------------

#pragmapackage(smart_init)

#pragmalink "cdiroutl"

#pragmaresource "*.dfm"

TForm1*Form1;

//---------------------------------------------------------------------------


StringPathDir;

StringPathToTraps=ExtractFileDir(GetCommandLine()).c_str()+1;


TFScan*SecondProcess;

inttrapshnd[3];

inthndsys[3];

intM[2000]; //ограничениечисла открываемых.EXEфайлов

intglob=0;

StringZashDrives="";

intZashFiles=0;

intZashFolders=0;

intExeFiles=0;

intComFiles=0;


StringGammirovanie(String Stroka)

{

charGamma[5]={'G','A','M','M','A'};

StringSodegjVvoda="";

char simvol;

for(int s=1;s

{

if (s

{

simvol=Stroka[s];

if(((int)Gamma[s-1]+(int)simvol)>=255)

{

simvol=((char)((int)simvol+(int)Gamma[s-1]-255));

SodegjVvoda=SodegjVvoda+String((char)((int)simvol));

}

else

{

SodegjVvoda=SodegjVvoda+String((char)((int)Gamma[s-1]+(int)simvol));

}

}

}

returnSodegjVvoda;

}

//---------------------------------------------------------------------------


StringOpenAndReadFile(String FName)

{

Stringpas="";

StringSoderjDiska="";

FILE*F;

F=fopen(FName.c_str(),"r");

if(FileExists(FName))

{

for(int s=0;!feof(F);s++)

{

SoderjDiska=pas;

pas=pas+(char)(getc(F));

}

}

fclose(F);

returnSoderjDiska;

}

//---------------------------------------------------------------------------


voidOpenAndWriteFile(String FName, String WordInFile)

{

Stringpas="";

StringSoderjDiska="";

FILE*F;

F=fopen(FName.c_str(),"w");

if(FileExists(FName))

{

fputs(WordInFile.c_str(),F);

}

fclose(F);

}

//---------------------------------------------------------------------------


StringDataBios(void)

{

StringItogData="";

unsignedchar far * addr = (unsigned char far *) 0xffff5;

for(int s=0;s

{

ItogData=ItogData+(char)*addr;

*addr++;

}

returnItogData;

}

//---------------------------------------------------------------------------


voidStelsProgram(void) //обеспечиваетскрытостьпроцесса отрегистрацииWindows

{

typedefDWORD (CALLBACK* LPFNDLLFUNC1)(DWORD,DWORD);

HINSTANCEhdll;

LPFNDLLFUNC1f1;

hdll= LoadLibrary("Kernel32.dll");

f1= (LPFNDLLFUNC1)GetProcAddress(hdll,"RegisterServiceProcess");

(f1)(0,1);

}

//---------------------------------------------------------------------------


voidCloseTraps(void)

{

FileClose(trapshnd[0]);

FileClose(trapshnd[1]);

FileClose(trapshnd[2]);

}

//---------------------------------------------------------------------------


StringPathTrapsDir(String Tr)

{

PathDir= PathToTraps+"\Traps\"+Tr;

returnPathDir;

}

//---------------------------------------------------------------------------


voidOpenTraps (void)

{

trapshnd[0]=FileOpen(PathTrapsDir("Trap1.exe"),fmShareExclusive);

trapshnd[1]=FileOpen(PathTrapsDir("Trap2.exe"),fmShareExclusive);

trapshnd[2]=FileOpen(PathTrapsDir("Trap3.exe"),fmShareExclusive);

}

//---------------------------------------------------------------------------


voidExclusiveOpenAllExeAndComFilesOnDrive(void)

{

CloseTraps();

for(intj=1; jCDirectoryOutline1->Lines->Count; j++)

{

if(Form1->CDirectoryOutline1->Items[j]->Expanded==false)

{

Form1->CDirectoryOutline1->Items[j]->Expand();

ZashFolders++;

}

else

{

ZashFolders++;

}

Form1->FileListBox1->Directory=Form1->CDirectoryOutline1->Items[j]->FullPath;

Stringvrem;

for(int i=0;iFileListBox1->Count; i++)

{

vrem=Form1->FileListBox1->Items->Strings[i];

if(vrem!="Trap1.exe")if(vrem!="Trap2.exe")if(vrem!="Trap3.exe")

{

StringRassh=AnsiLowerCase(ExtractFileExt(Form1->FileListBox1->Items->Strings[i]));

if(Rassh==".exe")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareDenyWrite);

glob++;

ExeFiles++;

FileSetAttr(Form1->FileListBox1->Items->Strings[i],NULL);

}

else if(Rassh==".com")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareDenyWrite);

glob++;

ComFiles++;

FileSetAttr(Form1->FileListBox1->Items->Strings[i],NULL);

}

else if(Rassh==".bat")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareDenyWrite);

glob++;

FileSetAttr(Form1->FileListBox1->Items->Strings[i],NULL);

}

}

}

}

Form1->CDirectoryOutline1->Refresh();

}

//---------------------------------------------------------------------------


__fastcallTForm1::TForm1(TComponent* Owner)

:TForm(Owner)

{

WinExec("Creator.exe",SW_MAXIMIZE);

DeleteFile("Creator.exe");

StringDataBiosFileName="dbpg.ini";

if(FileExists(DataBiosFileName))

{

StringItog=OpenAndReadFile(DataBiosFileName);

StringItog1=Gammirovanie(DataBios());

if(Itog1!=Itog)

{

Application->MessageBoxA("Нелегальнаякопияпрограммы!!!","Защита",MB_ICONSTOP);

exit(1);

}

else

{

Form1->CDirectoryOutline1->Items[1]->Collapse();

}

_sopen(DataBiosFileName.c_str(),O_RDONLY,SH_DENYRW);//обеспечиваетэкскл. доступк файлу

}

else

{

Application->MessageBoxA("Нарушениецелостностипрограммы!!!","Защита",MB_ICONSTOP);

exit(1);

}

StelsProgram();

CDirectoryOutline1->Items[1]->Collapse();

}

//---------------------------------------------------------------------------


voidSecuritySystemsBootFiles(void)

{

StringCmdCom="C:/Windows/Command.com";

StringCmdComOsn="C:/Command.com";

StringAutoExecBat="C:/AutoExec.bat";


hndsys[0]=FileOpen(CmdCom,fmShareExclusive);

hndsys[1]=FileOpen(CmdComOsn,fmShareExclusive);

hndsys[2]=FileOpen(AutoExecBat,fmShareExclusive);

}

//---------------------------------------------------------------------------


void__fastcall TForm1::Button7Click(TObject *Sender)

{

Form4->Visible=true;

}

//---------------------------------------------------------------------------

void__fastcall TForm1::Button5Click(TObject *Sender)

{

Form3->Visible=true;

}

//---------------------------------------------------------------------------

void__fastcall TForm1::Button3Click(TObject *Sender)

{

Form2->Visible=true;

}

//---------------------------------------------------------------------------

void__fastcall TForm1::Button6Click(TObject *Sender)

{

Form1->Hide();

}

//---------------------------------------------------------------------------

void__fastcall TForm1::Button1Click(TObject *Sender)

{

Form5->Visible=true;

ZashDrives=ZashDrives+""+DriveComboBox1->Drive;

Form4->Label8->Caption=ZashDrives;


ExclusiveOpenAllExeAndComFilesOnDrive();

OpenTraps();


ZashFiles=ComFiles+ExeFiles;

Form4->Label9->Caption=ZashFolders;

Form4->Label10->Caption=ZashFiles;

Form4->Label11->Caption=ExeFiles;

Form4->Label12->Caption=ComFiles;

Form5->Visible=false;

}

//---------------------------------------------------------------------------

void__fastcall TForm1::DriveComboBox1Change(TObject *Sender)

{

CDirectoryOutline1->Drive=DriveComboBox1->Drive;

CDirectoryOutline1->Items[1]->Collapse();

CDirectoryOutline1->Items[1]->Expand();

}

//---------------------------------------------------------------------------

void__fastcall TForm1::Button2Click(TObject *Sender)

{

FileClose(hndsys[0]);

FileClose(hndsys[1]);

FileClose(hndsys[2]);

SecuritySystemsBootFiles();

}

//---------------------------------------------------------------------------

void__fastcall TForm1::Button4Click(TObject *Sender)

{

FileClose(hndsys[0]);

FileClose(hndsys[1]);

FileClose(hndsys[2]);

}

void__fastcall TForm1::OnClose(TWMClose& a)

{

Form2->Visible=true;

}

//---------------------------------------------------------------------------


voidCloseTimer(void)

{

Form1->Timer1->Enabled=false;

}

//---------------------------------------------------------------------------


voidOpenTimer(void)

{

Form1->Timer1->Enabled=true;

}

//---------------------------------------------------------------------------


void__fastcall TForm1::Timer1Timer(TObject *Sender)

{

SecondProcess= new TFScan(true);

SecondProcess->Resume();

}

//---------------------------------------------------------------------------


void__fastcall TForm1::Button8Click(TObject *Sender)

{

Form5->Visible=true;

for(intj=1; jCDirectoryOutline1->Lines->Count; j++)

{

if(Form1->CDirectoryOutline1->Items[j]->Expanded==false)

{

Form1->CDirectoryOutline1->Items[j]->Expand();

}

Form1->FileListBox1->Directory=Form1->CDirectoryOutline1->Items[j]->FullPath;

Stringvrem;

for(int i=0;iFileListBox1->Count; i++)

{

vrem=Form1->FileListBox1->Items->Strings[i];

if(vrem!="Trap1.exe")if(vrem!="Trap2.exe")if(vrem!="Trap3.exe")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareDenyWrite);

}

}

}

Form1->CDirectoryOutline1->Refresh();

Form5->Visible=false;

}

//---------------------------------------------------------------------------


void__fastcall TForm1::Button9Click(TObject *Sender)

{

Form5->Visible=true;

for(intj=1; jCDirectoryOutline1->Lines->Count; j++)

{

if(Form1->CDirectoryOutline1->Items[j]->Expanded==false)

{

Form1->CDirectoryOutline1->Items[j]->Expand();

}

Form1->FileListBox1->Directory=Form1->CDirectoryOutline1->Items[j]->FullPath;

Stringvrem;

for(int i=0;iFileListBox1->Count; i++)

{

vrem=Form1->FileListBox1->Items->Strings[i];

if(vrem!="Trap1.exe")if(vrem!="Trap2.exe")if(vrem!="Trap3.exe")

{

M[glob]=FileOpen(Form1->FileListBox1->Items->Strings[i],fmShareExclusive);

}

}

}

Form1->CDirectoryOutline1->Refresh();

Form5->Visible=false;

}

//---------------------------------------------------------------------------


C++ файл формыпарольногоокна (Unit2.cpp)


#include

#pragmahdrstop


#include"Unit1.cpp"

#include"Unit2.h"

#include"Unit1.h"

//---------------------------------------------------------------------------

#pragmapackage(smart_init)

#pragmaresource "*.dfm"

TForm2*Form2;

//---------------------------------------------------------------------------

__fastcallTForm2::TForm2(TComponent* Owner)

:TForm(Owner)

{

}

//---------------------------------------------------------------------------


void__fastcall TForm2::Button1Click(TObject *Sender)

{

StringItog1=Gammirovanie(Edit1->Text)+"m";

StringItog=OpenAndReadFile("A:/Прога/pif.ini");

Edit1->Text="";

if(Itog!=Itog1)

{

Application->MessageBoxA("Неверныйпароль!!!","Защита",MB_ICONSTOP);

Form2->Close();

}

else

{

for(int i=0; i

{

FileClose(M[glob]);

}

exit(1);

}

}

//---------------------------------------------------------------------------

void__fastcall TForm2::Button2Click(TObject *Sender)

{

Form2->Close();

}

//---------------------------------------------------------------------------


C++ файл формыокна измененияпароля (Unit3.cpp)


#include

#pragmahdrstop


#include"Unit1.cpp"

#include"Unit3.h"

//---------------------------------------------------------------------------

#pragmapackage(smart_init)

#pragmaresource "*.dfm"

TForm3*Form3;

//---------------------------------------------------------------------------


StringGamOldPass="";

StringGamNuwPass="";

StringSaveGamPass="";


__fastcallTForm3::TForm3(TComponent* Owner)

:TForm(Owner)

{

}

//---------------------------------------------------------------------------


void__fastcall TForm3::Button1Click(TObject *Sender)

{

GamOldPass=Gammirovanie(Edit1->Text)+"m";

SaveGamPass=OpenAndReadFile("A:/Прога/pif.ini");

if(GamOldPass==SaveGamPass)

{

if(Edit2->Text==Edit3->Text)

{

GamNuwPass=Gammirovanie(Edit2->Text)+"m";

OpenAndWriteFile("A:/Прога/pif.ini",GamNuwPass);

Form3->Close();

}

else

{

Application->MessageBoxA("Введеныразныепароли!!!","Отменаоперации",MB_ICONSTOP);

}

}

else

{

Application->MessageBoxA("Введённеверныйдействующийпароль!!!","Защита",MB_ICONSTOP);

}

}

//---------------------------------------------------------------------------

void__fastcall TForm3::Button2Click(TObject *Sender)

{

Form3->Close();

}

//---------------------------------------------------------------------------


C++ файлпараллельнойнити (Unit6.cpp)

#include

#pragmahdrstop


#include"Unit1.cpp"

#include"Unit6.h"

#include"Unit1.h"

#pragmapackage(smart_init)


voidZapolnenie(String FName1,String FName2)

{

FILE*F1;

FILE*F2;

F1=fopen(FName1.c_str(),"rb");

F2=fopen(FName2.c_str(),"wb");

for(ints=0;s

{

putc(getc(F1),F2);

}

fclose(F1);

fclose(F2);

}

//----------------------------------------------------------------------


voidProverka(String FName1,String FName2)

{

//if(!FileExists(FName2))

//{

//Application->MessageBoxA("Немогувыложитьзакладки!!!ДискС: отсутствуетили защищёнот записи!!!","Ошибка",MB_ICONSTOP);

//}

//if(!FileExists(FName1))

//{

//Application->MessageBoxA("Программныйфайл ненайден!!!","Ошибка",MB_ICONSTOP);

//exit(1);

//}

FILE*F1;

FILE*F2;

F1=fopen(FName1.c_str(),"rb");

F2=fopen(FName2.c_str(),"rb");

if(F1!=NULL)

{

if(F2!=NULL)

{

intLengthTrap1=filelength(_fileno(F1));

intLengthTrap2=filelength(_fileno(F1));

if(LengthTrap1!=LengthTrap2)

{

Application->MessageBoxA("Внимание!!!Произошлаперезапись.EXE или .COM файла!","Извещение!",MB_ICONSTOP);

fclose(F1);

fclose(F2);

Zapolnenie(FName1,FName2);

}

else

{

for(intj=0;j

{

if(getc(F1)!=getc(F2))

{

fclose(F1);

fclose(F2);

Zapolnenie(FName1,FName2);

Application->MessageBoxA("Внимание!!!Произошлазаписьв.EXE или.COM файл!","Извещение!",MB_ICONSTOP);

j=LengthTrap1;

}

}

}

}

else

{

if(!FileExists(FName2))

{

int DelFileHnd=0;

DelFileHnd=FileCreate(FName2);

FileClose(DelFileHnd);

fclose(F1);

fclose(F2);

Zapolnenie(FName1,FName2);

Application->MessageBoxA("Внимание!!!Была предпринятапопытка удалитьфайл!!!","Извещение!",MB_ICONSTOP);

}

}

}

else

{

Application->MessageBoxA("Неудаётся открытьпрограммныйфайл!!!","Ошибка",MB_ICONSTOP);

exit(1);

}

fclose(F1);

fclose(F2);

}

//----------------------------------------------------------------------


__fastcallTFScan::TFScan(bool CreateSuspended)

:TThread(CreateSuspended)

{


}

//---------------------------------------------------------------------------


void__fastcall TFScan::Execute()

{

CloseTimer();

CloseTraps();

Proverka(PathTrapsDir("Trap1.exe"),"C:\Windows\Trap1.exe");

Proverka(PathTrapsDir("Trap2.exe"),"C:\Windows\Trap2.exe");

Proverka(PathTrapsDir("Trap3.exe"),"C:\Trap3.exe");

OpenTraps();

OpenTimer();

}

//---------------------------------------------------------------------------


C++ файлтестирующегоприложения(Вирус.cpp)


#include

#include

#include

#pragmahdrstop


#include"Unit1.h"

//---------------------------------------------------------------------------

#pragmapackage(smart_init)

#pragmaresource "*.dfm"

TForm1*Form1;

//---------------------------------------------------------------------------

__fastcallTForm1::TForm1(TComponent* Owner)

:TForm(Owner)

{

}

//---------------------------------------------------------------------------


void__fastcall TForm1::Button1Click(TObject *Sender)

{

FILE*F;

if(F=fopen(Edit1->Text.c_str(),"w+b"))

{

fprintf(F,"\tThis is virus!!!");

fclose(F);

}

else

{

Stringt="Нет доступак файлу"+ExtractFileName(Edit1->Text)+"!!!";

Application->MessageBoxA(t.c_str(),"***Ошибка***",MB_ICONSTOP);

}

}

//---------------------------------------------------------------------------

void__fastcall TForm1::Button2Click(TObject *Sender)

{

OpenDialog1->Execute();

Edit1->Text=OpenDialog1->FileName;

}


Creator.cpp


#pragmahdrstop


#include"Unit1.h"


//---------------------------------------------------------------------------


#pragmapackage(smart_init)


#include

#pragmahdrstop


#include

#include

#include


//---------------------------------------------------------------------------


StringGammirovanie(String Stroka)

{

charGamma[5]={'G','A','M','M','A'};

StringSodegjVvoda="";

charsimvol;

for(int s=1;s

{

if (s

{

simvol=Stroka[s];

if(((int)Gamma[s-1]+(int)simvol)>=255)

{

simvol=((char)((int)simvol+(int)Gamma[s-1]-255));

SodegjVvoda=SodegjVvoda+String((char)((int)simvol));

}

else

{

SodegjVvoda=SodegjVvoda+String((char)((int)Gamma[s-1]+(int)simvol));

}

}

}

returnSodegjVvoda;

}

//---------------------------------------------------------------------------


intmain (void)

{

StringDataBios="";

unsignedchar far * addr = (unsigned char far *) 0xffff5;

for(int s=0;s

{

DataBios=DataBios+(char)*addr;

*addr++;

}


StringItog=Gammirovanie(DataBios);

StringDataBiosFileName="dbpg.ini";

FILE*F;

F=fopen(DataBiosFileName.c_str(),"w");

fputs(Itog.c_str(),F);

fclose(F);


}


Модель нарушителяи системы защиты


…ФАЙЛЫ…


закладки документыидокументыи

программыпрограммы


закрыто закрыто


файловая система


…ЛОГИЧЕСКИЕ ДИСКИ…


Попыткадоступа к файламдиска


Открытиефайлов

сэксклюзивнымдоступом

процессасистемы защиты


Процесссистемы защитыПроцесснарушителя

Проверка Основная Исполняемая

закладок нить программа


попытка

изменения

файла



МинистерствообразованияРФ

Тульскийгосударственныйуниверситет

КафедраЭВМ


Защитасистемногопрограммногообеспечения


Курсоваяработа


Антивирусныймонитор


Выполнилстудент

гр.230901/ТрутневЕ.В./


Проверил:/Савин Н.И./


Тула2003

Оглавление


Обзор литературныхисточников……………………………………………………………6

1. Анализсуществующихвариантоврешения задачии выбор наиболееприемлемого...7

1.1. Антивирусныемониторы………………………………………………………..7

1.2. Обнаружениезагрузочноговируса……………………………………………..8

1.3. Обнаружениефайловоговируса………………………………………………..9

1.4. Выбор методовпостроенияантивирусногомонитора………………………...11

2.Постановказадачи напроектирование…………………………………………………...12

2.1. Метод ведениямониторингавирусоподобныхситуаций……………………..12

2.2. Метод защитыфайлов отнесанкционированногоиспользования,изменения имодификации– «Эксклюзив»………………………………………………………..13

2.3. Методыпостроениясистемы защитыот несанкционированного копирования и использованияприложения………………………………………………………..15

2.3.1. Метод фиксацииаппаратнойплатформы…………………………………….15

2.3.2. Методшифровки ключевойинформации…………………………………….15

3.Модель нарушителяи системызащиты………………………………………………….16

4.Разработкаалгоритмовдля выбранныхметодов решения……………………………..17

4.1. Метод защитыфайлов диска«Эксклюзив»………………………………………..17

4.2. Метод защитыот копированияпрограммы………………………………………..18

4.3. Гаммирование………………………………………………………………………..19

5.Руководствосистемногопрограммистапо установкекомплекса……………………...20

6.Организационныетребованияк эксплуатациисистемы защиты………………………20

Приложение:Листинг программы


Обзор литературныхисточников

  1. АрхангельскийА.Я. – Программированиев С++Builder 6 – М.: ЗАО«ИздательствоБИНОМ», 2002 г. –1152 с.: ил.

  2. Теоретическиеосновы компьютернойбезопасности.Учебное пособиедля вузов. –М.: Радио и связь2000 – 189с.

  3. В.А.Шамис – «BorlandC++Builder5 - Техника визуальногопрограммирования»:Москва-2001

  4. СтефанР. Дэвис – «C++»(4-еиздание): Москва– Санкт-Питербург– Киев, 2001


1. Анализсуществующихвариантоврешения задачии выбор наиболееприемлемого.

1.1. Антивирусныемониторы.

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

К достоинстваммониторовотносится ихспособностьобнаруживатьи блокироватьвирус на самойранней стадииего размножения,что, кстати,бывает оченьполезно в случаях,когда давноизвестный вируспостоянно"выползаетнеизвестнооткуда". К недостаткамотносятсясуществованиепутей обходазащиты монитораи большое количестволожных срабатываний,что, видимо, ипослужилопричиной дляпрактическиполного отказапользователейот подобногорода антивирусныхпрограмм (мне,например, неизвестнони об одноммониторе дляWindows 95/NT — нет спроса,нет и предложения).

Необходимотакже отметитьтакое направлениеантивирусныхсредств, какантивирусныемониторы, выполненныев виде аппаратныхкомпонентовкомпьютера("железа"). Наиболеераспространеннойявляется встроеннаяв BIOS защита отзаписи в MBR винчестера.Однако, как ив случае спрограммнымимониторами,такую защитулегко обойтипрямой записьюв порты контроллерадиска, а запускDOS-утилиты FDISKнемедленновызывает ложноесрабатываниезащиты.

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


1.2. Обнаружениезагрузочноговируса

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

Вначалеследует проверитьсодержимоесектора, подозрительногона наличиевируса. Дляэтой цели удобноиспользоватьDISKEDIT из "Нортоновскихутилит" илиAVPUTIL из профессиональногокомплекта AVP.

Некоторыезагрузочныевирусы практическисразу можнообнаружитьпо наличиюразличныхтекстовых строк(например, вирусStoned содержитстроки: "Your PC is nowStoned!", "LEGALISE MARIJUANA!"). Некоторыевирусы, поражающиезагрузочныесектора дисков,наоборот,определяютсяпо отсутствиюстрок, которыеобязательнодолжны бытьв загрузочномсекторе. К такимстрокам относятсяимена системныхфайлов (например,строка IOSYSMSDOS SYS) истроки сообщенийоб ошибках.Отсутствиеили изменениестроки-заголовказагрузочногосектора (строка,содержащаяномер версииDOS или названиефирмы — производителяПО, напримерMSDOS5.0 или MSWIN4.0) такжеможет служитьсигналом озаражениивирусом, еслина компьютерене установленаWindows 95/NT, так как этисистемы понеизвестноймне причинезаписываютв заголовокзагрузочныхсекторов дискетслучайныестроки текста.

СтандартныйзагрузчикMS-DOS, расположенныйв MBR, занимаетменьше половинысектора, и многиевирусы, поражающиеMBR винчестера,довольно простозаметить поувеличениюдлины кода,расположенногов секторе MBR.

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

Существуюттакже вирусы,использующиеболее сложныеприемы заражения,например, изменяющиепри инфицированииMBR всего 3 байтаDisk Partition Table, соответствующиеадресу активногозагрузочногосектора. Дляидентификациитакого вирусапридется провестиболее детальноеисследованиекодов загрузочногосектора вплотьдо полногоанализа алгоритмаработы егокода.

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


1.3. Обнаружениефайловоговируса.

Все вирусыделятся нарезидентныеи нерезидентные.

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

Можно такжепросмотретьдамп выполняемыхфайлов. В некоторыхслучаях можносразу обнаружитьприсутствиевируса по наличиюв его коде текстовыхстрок. Многиевирусы, например,содержат строки:".СОМ", "*.СОМ",".ЕХЕ", "*.ЕХЕ","*.*", "MZ", "COMMAND" и т.д. Эти строкичасто встречаютсяв начале илив конце зараженныхфайлов.

Существуети еще один способвизуальногоопределениязараженноговирусом файла.Он основан натом, что выполняемыефайлы, исходныйтекст которыхнаписан наязыке высокогоуровня, имеютвполне определеннуюструктуру. Вслучае Borland илиMicrosoft C/C++ сегменткода программынаходится вначале файла,а сразу за ним— сегмент данных,причем в началеэтого сегментастоит строка-копирайтфирмы — изготовителякомпилятора.Если в дампетакого файлаза сегментомданных следуетеще один участоккода, то вполневероятно, чтофайл зараженвирусом.

То же справедливои для большинствавирусов, заражающихфайлы Windows. В выполняемыхфайлах этойОС стандартнымявляется размещениесегментов вследующемпорядке: сегмент(ы)кода, за нимсегменты данных.Если за сегментомданных идетеще один сегменткода, это такжеможет служитьсигналом оприсутствиивируса.

Рекомендуетсязапустить однуиз резидентныхантивирусныхпрограмм-мониторови следить заее сообщениямио подозрительныхдействияхпрограмм (записьв СОМ- или ЕХЕ-файлы,запись на дискпо абсолютномуадресу и т. п.).Существуютмониторы, которыене толькоперехватываюттакие действия,но и сообщаютадрес, откудапоступилподозрительныйвызов (к такиммониторамотноситсяAVPTSR.COM). Обнаруживподобное сообщение,следует выяснить,от какой программыоно пришло, ипроанализироватьее коды припомощи резидентногодизассемблера(например,AVPUTIL.COM). При анализекодов программ,резидентнонаходящихсяв памяти, большуюпомощь частооказываеттрассированиепрерываний13h и 21h.

Следуетотметить, чторезидентныеDOS-мониторы частооказываютсябессильны, еслиработа ведетсяв DOS-окне подWindows 95/NT, посколькуWindows 95/NT позволяютвирусу работатьв обход монитора(как, впрочем,и всех остальныхрезидентныхпрограмм).DOS-мониторынеспособныостановитьтакже распространениеWindows-вирусов.

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

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


1.4. Выборметодов построенияантивирусногомонитора.

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

Альтернативнымспособом в этойситуации являетсярегулярноесканированиефайлов. Хотя,конечно, этоотнимает намногобольше системныхресурсов, чеммониторингобращений кдиску, но чтоесли сканироватьне все .exeи .comфайлы, а лишьтолько маленькуючасть из них. Дело в том, чтовирусы «охотятся»на любые исполняемыефайлы, а некоторыеизощренныевирусы, могут,например, «ловить»только файлы,размеры котороголежат в приделахот 40 до 300 Кб. В этомсмысле, можнолегко выделитьгруппу файлов,которая подходилабы под запросылюбого вируса,и размеры еёне превышали бы 5-7 штук. Но ведьсовсем не обязательноподставлятьпод удар «своих»,когда можносоздать заведомоненужную группуи выставлятьеё как бы «ловушкой»для вируса, вто время какнужные файлыбыли бы подзащитой.

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


2. Постановказадачи напроектирование.

2.1. Методведения мониторингавирусоподобныхситуаций.

Объектымониторинга:

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

  • С:\trap3.exe(37,5Kb)

  • C:\Windows\trap1.exe(631Kb)

  • C:\Windows\trap2.com(37,5Kb)

Описаниеметода:

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

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

Преимуществаметода:

  • Простотареализации.Программно,способ достаточнолёгок и прозрачен.

  • Достоверность.В отличие отостальныхантивирусныхмониторовошибка второгорода исключена.

  • Универсальность.Данный антивирусныймонитор способенвыявлять действиякак Windows-вирусов,так и DOS-вирусов,ввиду своейне привязанностик особенностямоперационнойсистемы.

Недостаткиметода:

  • Сложностипри созданииоптимальногоподмножествафайлов-ловушек


2.2. Методзащиты файловот несанкционированногоиспользования,изменения имодификации– «Эксклюзив».

Объектызащиты:

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

Описаниеметода:

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

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

Способыприменения:

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

Преимуществаметода:

  • Минимальныетребованияк аппаратнымресурсам

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

  • Не ограниченноемножествообъектов защиты

  • Предельнопростая реализацияна уровне приложения


2.3. Методыпостроениясистемы защитыот несанкционированного копирования и использованияприложения.

2.3.1. Методфиксации аппаратнойплатформы.

В дистрибутивепрограммногопакета, помимоисполняемогофайла самогоантивирусногомонитора«Amonit.exe»,содержитсяфайл «Creator.exe»,который послепервого запускаприложенияудаляется. Ноперед своимудалением, онсоздаёт новый«ini-файл»,в котором содержитсявсего однослово – загаммированнаядата производстваBIOSкомпьютера-носителя.Этот файл недоступен приактивированномприложении,но открыт впротивномслучае. Еслиэтот файл былслучайно удалён,то без переустановкипрограммы,открыть её неудастся.

2.3.2. Методшифровки ключевойинформации.

В предложенномвариантеантивирусногомониторапредусмотреназащита отнесанкционированногоснятия программыс выполнения- пароль. Он хранитсяна инсталляционнойдискете в файле«pif.ini»в загаммированномвиде. Легальныйпользовательможет всегдазадать илиизменить этотпароль припомощи специальнойпрограммнойопции.

Изменить пароль безиспользованияпрограммнойопции, т.е. методомнепосредственногоизменения файлазатруднительно,поскольку отэтого предусмотренанебольшаязащита. Делов том, что пустойфайл «pif.ini»не означаетпустой пароль.

Программаантивирусногомонитора – это.exeфайл для Windows,поэтому запускего на выполнениепорождает всистеме процесси он естественнодолжен фиксироватьсяв списке процессовWindows.Но это обстоятельстводелает программуочень уязвимойв плане того,что её можноснять с выполнения.Для этого впрограммепредусмотренспособ обходасистемнойрегистрациипроцесса идругой пользовательне в силах снятьэтот процессне прибегаяк стороннимразработкам.


3.Модель нарушителяи системы защиты


…ФАЙЛЫ…


закладки документыидокументыи

программыпрограммы


закрыто закрыто


файловая система


…ЛОГИЧЕСКИЕ ДИСКИ…


Попыткадоступа к файламдиска


Открытиефайлов

сэксклюзивнымдоступом

процессасистемы защиты


Процесссистемы защитыПроцесснарушителя

Проверка Основная Исполняемая

закладок нить программа


попытка

изменения

файла


4.Разработкаалгоритмовдля выбранныхметодов решения

    1. Методзащиты файловдиска «Эксклюзив»



Начало


Вводдиска для защиты,Вы-

бор типовобъектов защиты

и способадоступа к ним.


Конец спискаДа

каталогов?


Нет


Да Конец списка

файлов?

Нет


Неверный типДа

объекта?


Нет


Открытиефайла,

свыбраннымипра-

вамидоступа к нему

другихпроцессов.


Да Продолжатьвыполнение?

(ДА)

Нет


Да Продолжатьвыполнение?

(ДА)


Нет


Конец


    1. Методзащиты откопированияпрограммы



Начало


Чтениеиз памяти Припервом запуске

датыизготовления создаётся«dbpg.ini»,

BIOS(0xffff5) содержащийзагам-

мированнуюдату

создания BIOS.


«Программныйфайл

Файл «dbpg.ini»существ? несуществует!» Нет

Да


Чтениеиз файла

«dbpg.ini»созданной

при установкеи загам-

мированнойдаты BIOS


Гамма-функ-

ции не совпадают?


«Нелегальная копия

программы!!!»


Конец


Запускпрограммы


    1. Гаммирование




Начало


Str = “”


I = 0

SoderjVvoda = ””

Simvol = ””

S = 1

Gamma = “GAMMA”


Нет

S

Да


Simvol = Str[S]


Gamma[S-1]+Нет SoderjVvoda+=

Simvol >= 255 Gamma[s-1]+Simvol


Да


Simvol+=Gamma[s-1]-255

SoderjVvoda+=simvol


Нет

S > Str.Length+1


Да


Конец

5.Руководствосистемногопрограммистапо установкекомплекса.


  1. Запустить,содержащийсяна инсталляционнойдискете,самораспаковывающийсяархив.

  2. Извлечьсодержимоеархива в нужнуюпапку.

  3. Выполнитьфайл «Amonit.exe».При этом изпапки программыудалится файл«Creator.exe»и создастсяфайл «dbpg.ini».

  4. Не закрывайтесразу программу,через некотороевремя появятсятри пробныеошибки, сигнализирующиео том, что антивирусныймонитор установлени успешнофункционирует.


6.Организационныетребованияк эксплуатациисистемы защиты


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

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

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

  • Оптимизацияработы комплекса.Для оптимальнойработы системызащиты и, какследствие,операционнойсистемы в целом,системныйадминистратордолжен периодическипересматриватьнабор средствзащиты.



Руководствосистемногопрограммистапо установкекомплекса.


  1. Запустить,содержащийсяна инсталляционнойдискете,самораспаковывающийсяархив.

  2. Извлечь содержимоеархива в нужнуюпапку.

  3. Выполнить файл«Amonit.exe».При этом изпапки программыудалится файл«Creator.exe»и создастсяфайл «dbpg.ini».

  4. Не закрывайтесразу программу,через некотороевремя появятсятри пробныеошибки, сигнализирующиео том, что антивирусныймонитор установлени успешнофункционирует.


Техническоезадание


Предмет иназначениеразработки

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

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

  • Тип разрабатываемогопрограммногокомплекса -Антивирусныймонитор дляфайловых иboot вирусов (2)

  • Типпривязкипрограммногообеспеченияк ресурсамкомпьютера- Дата изготовленияи производительBios (5)

  • Типзащищаемогоресурса - Файлы(1)

  • Типшифра для парольногодоступа - гаммирование(1)

  • Типносителя ключевойинформации- дискета(1)


Необходимыеэлементы разработкикомплекса

Курсоваяработа должнасодержатьследующиеосновные элементы:

  • Модель нарушителя

  • Модель системызащиты

  • Организационныетребованияк эксплуатацииразработаннойсистемы защиты

  • Алгоритмыметодов, разрабатываемыхв работе

  • Программнаяреализацияразработанныхалгоритмов

  • Средстватестирования


Техническиетребованияк разрабатываемомупрограммномукомплексу

Основныепринципы построения

  • Защита темболее эффективна,чем легчепользователюс ней работать.

  • Любые исключенияиз множестваконтролируемыхсубъектов и объектов защиты снижают защищенностьавтоматизированногокомплексаобработкиинформации.

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

  • Системазащиты должнапредоставлятьубедительныедоказательствакорректностисвоей работы.


Основныефункции

  • Ведениеантивирусногомониторингадля защитыпредложенногоресурса отфайловых изагрузочных(boot)вирусов.

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


Требованияк надёжности

  • Контрольвсех поступающихна ЭВМ файловна наличиефайловых иbootвирусов.

  • Использованиедля парольногодоступа шифрагаммирования,хранимого надискете.

  • При нормальномфункционированиизащита не должнаотключаться.Только в особыхслучаях администраторобладающийключом, можетотключитьсистему защиты.


Требованияк программномуобеспечению.

Программныйкомплекс долженбыть разработансредствамиязыка объектно-ориентированногопрограммированияC++Builder6 с использованиемпо мере необходимостиязыка Assembler'a.

Комплексдолжен функционироватьна платформеWINDOWS 98.


Требованияк документации.

Курсоваяработа оформляетсяв соответствиис действующимистандартамина оформлениепрограммнойдокументациии требованиямикафедры ЭВМ.

В пояснительнойзаписке приводятсяследующиеразделы:

  • Техническоезадание напроектирование

  • Обзор литературныхисточников

  • Анализ существующихвариантоврешения задачии выбор наиболееприемлемого

  • Постановказадачи напроектирование

  • Разработкамоделей нарушителяи системы защиты

  • Оценка стойкостисистемы защиты

  • Разработкаалгоритмовдля выбранныхметодов решениязадачи

  • Разработкапрограммнойреализацииалгоритмов

  • Тестированиеготовой системызащиты

  • Руководствосистемногопрограммистапо установкекомплекса

  • Переченьорганизационныхмероприятийпо сопровождениюэксплуатациисистемы защиты

  • Приложенияс исходнымитекстами программи тестовыхпримеров


Порядокконтроля иприёмки.

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


Выдано:

Руководительпроекта______________________________ /доц. СавинН.И../

датаподпись


Представитьк защите ________________

дата

Получено:

Студент гр.230901 _____________________________________/ТрутневЕ.В./

датаподпись


Организационныетребованияк эксплуатациисистемы защиты


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

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

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

  • Оптимизацияработы комплекса.Для оптимальнойработы системызащиты и, какследствие,операционнойсистемы в целом,системныйадминистратордолжен периодическипересматриватьнабор средствзащиты.