Реферат по предмету "Разное"


"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса

"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса. Назад | Далее при изучении языка ассемблера и системы MS-DOS БЛАГОДАРНОСТЬ:============== Великая благодарность всем тем, кто, просмотрев рукопись, высказал цен-ные замечания и советы.ПРИЗЫВ:======= ХЭКЕРЫ, А ТАК ЖЕ ИМ СОЧУВСТВУЮЩИЕ! призываем Вас включиться в благое де-ло повышения уровня образования программирующей общественности! Опубликуйтетексты вашего virusware, уже ловимого антивирусными средствами; снабдите егоподробными коментариями, чтобы прочитавший обогатил свое знание языка ассем-блера и системы MS-DOS, взял на заметку наиболее остроумные приемы программи-рования и т.п.HACKERS & HACKERLIKE ONES! Our sinsere appeal to you: make yourcontribution in process of improving programmers' skill level! Publish thesources of your virusware which have neutralized by antivirusware & hence areno more your classified know how. Provide it with detail commentary forreader to get use of it. This way programming folk could improve theirknolidge of assembler & MS-DOS, enrich their skill by new wit know how & soon.ОГЛАВЛЕНИЕ:==========гл.1 (ЗДЕСЬ МЫ ПУДРИМ ВАМ МОЗГИ)гл.2 ЛИТЕРАТУРА И ИНСТРУМЕНТАРИЙгл.3 ПРЕРЫВАНИЯ, ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ, СОЗДАНИЕ РЕЗИДЕНТОВ (идеология)гл.4 СОЗДАНИЕ РЕЗИДЕНТНЫХ ПРОГРАММ (практическая реализация)гл.5 ЧУТЬ-ЧУТЬ о PSPгл.6 ПЕРВАЯ ПАКОСТЬ (создание ублюдочного резидентного вируса, грохающего за- ражаемую программу)гл.7 НЕКОТОРЫЙ ПРОГРЕСС (создание ублюдочного резидентного вируса, не гроха- ющего данные). ПЕРВОЕ ЗНАКОМСТВО СО СТЭЛС-ВИРУСАМИ (невидимками)гл.8 СОЗДАНИЕ ВЕСЬМА ПРОДВИНУТОГО (по сравнению с предыдущими) ВИРУСА, ПОДОБ-^ НО V2, ПРЯЧУЩЕМУСЯ В ЗАГОЛОВОК ЕХЕ-ФАЙЛА, НЕПОРТЯЩЕГО ДАННЫЕ И ЗАПУСКА- ЮЩЕГО ПОРАЖЕННЫЙ ФАЙЛ С ПЕРВОГО РАЗАгл.9 СОЗДАНИЕ "ДРАКОНА", ШПИОНЯЩЕГО ЗА ЗАПУСКОМ ПРОГРАММгл.10 СОЗДАНИЕ ВИРУСА, ИСПОЛНЯЮЩЕГО ФУНКЦИИ ЗАГРУЗЧИКА ЕХЕ-ФАЙЛОВгл.11 СОЗДАНИЕ ПРИМИТИВНЕЙШЕГО ВИРУСА-СПУТНИКА ДЛЯ ЕХЕ-ФАЙЛОВгл.12 СТАНДАРТНЫЙ СПОСОБ ЗАРАЖЕНИЯ ЕХЕ-ФАЙЛОВгл.13 СТАНДАРТНЫЙ СПОСОБ ЗАРАЖЕНИЯ СОМ-ФАЙЛОВгл.14 ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ FindFirst и FindNext ДЛЯ УВЕЛИЧЕНИЯ^ ПОРАЖАЮЩЕЙ СПОСОБНОСТИгл.15 В КОТОРОЙ ВЫ УЗНАЕТЕ О ПРОКЛЯТИИ MS-DOS -- БУТОВЫХ ВИРУСАХ (создание антивирусного фильтра и примитивного бутового вируса)^ АНОНС СЛЕДУЮЩЕЙ ВЕРСИИ====================== Этот текст, -- VirTech 1.0, -- что-то вроде ликбеза. В следующей версиипланируется рассказ (с подкреплением соответствующими примерами) о:- способах подавления трассировки; - вирусах, заражающих системные драйверы; - вирусах, заражающих файлы путем модификации FAT; - криптографии, полиморфных вирусах, в том числе обходящих эвристическиеанализаторы (такие, как "Doctor Web"); - сетевых червях; - модульной сборке вирусов в памяти; - вирусах, работающих в защищенном режиме процессоров 80286,80386 и по-этому неуязвимых для мониторов и ревизоров.^ СПИСОК ТЕРМИНОВ И СОКРАЩЕНИЙ============================"дракон" (слэнг амер. хэкеров) - программа, выполняющая действия, нефиксируемые пользователем PC; -- совсем не обязательно - "вирус". Это можетбыть что-либо системное, или - какое-либо hackerware. "жокей" (слэнг амер. хэкеров) - программист, решающий задачу, что назы-вается влоб, нетворчески. BIOS - (базовая система ввода/вывода) - грубо говоря, это такая микрос-хема, в которую навечно зашита куча стандартных подпрограмм, реализующихввод/вывод информации. Обращение к BIOS-у вызов какой-либо из этих под-программ. PC - персональный компьютер (вообще-то в тексте в большинстве случаевправильнее было бы сказать "процессор", но "PC" -- кажется более наглядно). ОЗУ - оперативная память п/п-ма - подпрограмма PSP - префикс программного сегмента HDD - жесткий диск ("винчестер") FDD - гибкий диск - дискета MBR - главный загрузочный сектор жесткого диска (Master Boot Record) BR - загрузочный сектор жесткого диска (Boot Record) V1 - первый из описанных ниже вирусов; V2,V3,... - соответственно...гл.1 (ЗДЕСЬ МЫ ПУДРИМ ВАМ МОЗГИ)/может быть это даже можно назвать предисловием/================================================^ А ЗАЧЕМ ЭТО НУЖНО ?---(реклама технической стороны метода)----Опыт педагогики неоспоримо свидетельствует, что изучить что-либо в крат-чайший срок и с максимальным качеством можно лишь при наличии сильной внут-ренней мотивации, говоря проще -- в случае если это действительно Вас прика-лывает. Изучать ассемблер по классической методике -- уж поверьте нам -- тосказеленая, а вот "вирусы", "драконы", резиденты и проч. -- нечто весьма при-кольное, подчастую нетривиальное. Здесь (при условии минимума осторожности) открывается воистину бескрай-нее поле деятельности; язык и основы низкоуровневой организации системыMS-DOS изучаются с потрясающей скоростью и практически без зубрежки.^ А ХОРОШО ЛИ ЭТО ?---(моральный аспект)----ДА -- В случае, если Вы не ставите своей целью кому-либо крупно насолить, зас-тавить мир содрогнуться и вообще не ищите славы Герострата (надеемся чтотак). Помните, что интеллект проявляется вовсе не в умении форматировать "вин-честер" и необратимо грохать данные. Шедевры вирусной технологии как правилосовершенно безвредны и даже не вызывают серьезного перерасхода ресурсов PC(оператив. память, быстродействие и проч.). Кроме того -- здесь реализуется масса новых технических решений, могущихбыть использованными и в др. областях (защита информации в PC, гибкое управ-ление ресурсами PC, низкоуровневая доводка программ, создание всевозможногоHackerWare и проч. и проч. и проч...). Выскажем подозрение, что "вирусология" (равно как и "контр-вирусология")невольно явилась кузницей высококвалифицированных кадров для многих областейкомпьютерного ремесла.^ А ЗАКОННО ЛИ ЭТО ?---(правовой аспект)----Полагаем, что да. На западе регулярно публикуются листинги свежих виру-сов, нередко снабжаемые исчерпывающими коментариями. В США любое оружие можно купить в магазине и это не является незаконным,отнюдь -- это способствует повышению уровня личной безопасности. Так же и с"вирусами" -- чем больше мы знать о них тем менее желанен будет запретныйплод для людей, склонных противопоставлять себя системе. Со своей стороны авторы выражают искреннюю надежду что Читатель сампрекрасно разбирается за что его действительно могут вздрючить (вспомните олегендарном студенте Моррисе), и за что не могут. Надеемся так же что Читатель наделен достаточной ответственностью и нестремится еще больше подорвать нашу гибнущую экономику.^ ЧУТЬ-ЧУТЬ ОБ ОБМАНУТЫХ НАДЕЖДАХ--------(ориентировка)--------- Когда авторы только начинали создание сего текста, они думали, что этобудет суперпростое, супердоступное, суперпонятное пособие по изучению ассем-блера и MS-DOS. Поэтому в качестве главного принципа построения был выбранвот какой: "не грех повторить материал разок, и еще разок, а может быть -- иеще разок". Продвинутый читатель, понявший все с первого раза может восклик-нуть: "ну что за занудство! жуют одно и то же! Да я это и раньше знал!" Ноэто пособие для тех, кто еще не все знает, а только собирается узнать. И естьриск, что не все все сразу поймут. Авторы ориентируются в изложении именно натакого читателя (похожий принцип реализуется в туризме: во время похода пер-вым идет самый слабый турист и весь отряд ровняется по нему. Никто не рискуетвыбиться из сил до объявления привала). Заранее просим прощение за стиль написания, может быть режущий Ваше эс-тетическое восприятие. И вот еще что: все представленные алгоритмы -- в первую очередь -- наг-лядное пособие. Модельные задачи. Все они работают (отлажены и испытаны). Ноглавный их принцип такой: "здесь эффективность принесена в жертву понятнос-ти". Настоящие же вирусы пишутся не совсем так. Там экономится каждый байткода. Цель -- минимальная длина при максимальном быстродействии. Иногда алго-ритм такой программы столь хитро закручен, что трудно разобраться в нем, дажеимея исходник. Вы, поняв основной принцип, можете написать такую программу иэто будет уже чисто творческий акт. И самое последнее: данное пособие вряд-ли может принести пользу, если Выне будете читать (или хотя-бы просматривать) основную литературу /1/,/2/,/4/.Данное пособие не рассчитано на дублирование базовых сведений.гл.2 ЛИТЕРАТУРА И ИНСТРУМЕНТАРИЙ=================================ЛИТЕРАТУРА========== Клевых книжек навалом; -- Look here:1. Питер Абель. Язык ассемблера для IBM PC и программирования. пер. сангл. Москва: "Высшая школа", 1992. >>2. Р.Джордэйн. Справочник программиста персональных компьютеров типа IBMPC, XT и AT. Москва, финансы и статистика, 1991.3. Использование Turbo Assembler при разработке программ. Киев: "Диалек-тика", 1994.4. П.Нортон. Персональный компьютер фирмы IBM и операционная системаMS-DOS. пер. с англ. Москва: "Радио и связь", 1992. прерываниям >>5. П.Нортон, Д.Соухэ. Язык ассемблера для IBM PC пер. с англ. Москва:"Компьютер", 1993.6. Е.Касперский. Компьютерные вирусы в MS-DOS. Москва: "ЭДЕЛЬ" -- "Рене-санс", 1992.7. Я.Белецкий. Энциклопедия языка СИ. Москва: "Мир", 1992. ценного о TASM-е >>{8}. Подшивки журнала "Монитор" с момента основания.9. А.Щербаков. Разрушающие программные воздействия. Москва: "Эдель"; Ки-ев : Фирма ВЕК, 1993.ИНСТРУМЕНТАРИЙ============== Клевых Tools -- до фигА и больше. Рекомендуем для начала не бить воробь-ев из пушек -- не злоупотреблять фирменными пакетами Turbo Debugger's и т.п. Может пригодиться:1. Работать лучше всего не в Norton Comander-e, а в Volkov Comander-eпоскольку последний позволяет выгонять резиденты из памяти без перезагрузкиPC). --------------------------¬ 2. tasm.exe турбоассемблер--T---пакет TASM !!! НЕОБХОДИМО!¦ 3. tlink.exe турболинкер----- --------------------------- 4. Thelp.exe + гипертексты -- восхитительный электронный справочник попрерываниям, структуре данных и т.д. 5. Diskedit.exe и ndd.exe (на системной дискете) -- если Вы случайногрохнете MBR или Boot-Record (на той-же системной дискете имейте выписанные сдиска MBR и Boot-Record). Или же заимейте rescue-дискету (см. Nortonutilities) 6. debug.com (из пакета MS-DOS) (тривиальщина); 7. hiew.exe -- (Hacker's view Version 4.17) экспресс ре дактор EXE- фай-лов; содержит ассемблер 8088 и дизассемблер 80386, позволяет кучу всего; 8. afd.com (Advanced Fullscreen Debug Version 1.00 (и выше)) чУднаяштучка, позволяет кучу всего; 9. Low.exe -- средство для просмотра области данных BIOS; 10. Code.exe -- выдает key- и scan- коды клавиш; 11. txtscr.com -- грабер текстового экрана в файл;гл.3 ПРЕРЫВАНИЯ, ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ, СОЗДАНИЕ РЕЗИДЕНТОВ (ИДЕОЛОГИЯ) (начнем)==============================================================================--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-¬¦ ПЕДПОЛАГАЕТСЯ, ЧТО ЧИТАТЕЛЬ УЖЕ ЗНАКОМ С МЕХАНИЗМОМ АДРЕССАЦИИ 8088,¦¦СТЕКОМ, ПОДПРОГРАММАМИ, КОМАНДАМИ ПЕРЕХОДОВ И ПЕРЕСЫЛОК. Если же -- нет, --¦¦он при желании может изучить этот необходимый минимум достаточно быстро. ¦L---------------------------------------------------------------------------- Прерывание (термин еще пока-что темный) -- зачем оно вообще нужно ? Дело в том, что прерывания возникают в случае, если PC необходимо немед-ленно среагировать на какую-либо исключительную ситуацию, изменить режим ра-боты или выполнить определенную специфическую операцию. Не будем пока давать многоэтажные классификации прерываний, скажем лишьчто: ПРЕРЫВАНИЕ -- это сигнал, генерируемый аппаратурой (аппаратное прерыва-ние) или Вашей программой (программное прерывание), в ответ на который PC вы-зывает определенную подпрограмму (п/п), а после завершения ее работы возвра-щает управление обратно Вам. Каждое прерывание характеризуется СВОИМ ОРИГИ-НАЛЬНЫМ НОМЕРОМ. (есть прерыв-я N0,N1,N2,N3 и т.д. -- всего их - 256 штук).Где находится п/п-ма, которой передается управление по сигналу-прерыванию?Либо в BIOS-е (ПЗУ), либо в системе (модули MS-DOS, которые после включенияPC загружаются в память и сидят там до самого момента выключения). Вызов ап-паратного прерывания скрыт от нашего глаза, тогда как вызов программного -- сточки зрения программиста -- это такая команда (опережая события назовем ее:INT ). Например: Вы нажали любую клавишу. Тут же PC сгенерил сигнал (прерыва-ние), в ответ на который активизировалась специальная п/п-ма, которая "рас-толковала" компьютеру какую именно клавишу Вы нажали. Это -- пример АППАРАТ-НОГО прерывания -- сигнала, генерируемого АППАРАТУРОЙ. Еще пример: Вы хотитенапечатать на принтере строку символов (или даже просто -- один символ). Приэтом Вы конечно можете написать специальную программу (очень сложную), кото-рая будет это делать. Она будет работать с портами принтера (брррр-рр-ррр!),производить тысячу и одну проверку и т.д. А можно поступить иначе. Ведь такаяпрограмма уже существует (в BIOS-е). Нужно лишь ее вызвать. А это делаетсяпри помощи специальной команды -- генерации ПРОГРАММНОГО прерывания. Выгля-деть вызов прерывания для печати 1 символа будет так: INT 17h (но перед этимВы еще должны будете определенным образом загрузить регистры AX и DX). Какпросто! Даже не верится. ГЛАВНАЯ ИДЕЯ (ЗА ЧТО МЫ СЕЙЧАС ВОЮЕМ): прерывания возникают в весьмаважные моменты работы PC. Существуют п/п-мы их обработки. Эти п/п-мы могутбыть заменены нами на наши собственные п/п-мы, которые делают в вышеупомяну-тые важные моменты то, что НАМ нужно! А это -- путь к полному контролю всехфункций PC. -- В наиболее ответственные моменты МЫ решаем как PC должен пос-тупить.А вот механизм реализации прерываний: 1.Возник сигнал прерывания номер такого-то (над его сущностью Вы пожа-луйста пока не размышляйте); 2.PC сообразил, что следует прервать на время выполнение текущей прог-раммы и передать управление соответствующей п/п-ме. 3.PC запоминает, куда нужно вернуть управление, когда эта п/п-ма завер-шится и передет управл-е п/п-ме. 4.П/п-ма выполнилась, завершилась и управл-е вернулось к основной прог-рамме, причем в то место, перед которым возник сигнал прерывания.Как правило п/п-ма, обрабатывающая сигнал прерывания, сидит где-то дале-ко от места пользовательской программы, где прерыв-е возникло. Следовательно,чтобы вызвать эту далекую п/п-му (CALL Far) необходимо знать ее сегментно-оф-фсетный адрес (2 слова). Как PC узнает этот адрес (тем боллее если мы дерзнем заменить стандар-тную п/п-му нашей собственной) ? Очень просто. Всего имеется 256 прерываний с разными номерами. Каждомуиз них соответствует определенная п/п-ма обработки. Каждая п/п-ма имеет свойадрес вызова (2 слова). И эти двухсловесные адреса хранятся в ОПРЕДЕЛЕННОЙобласти памяти в СТРОГОМ ПОРЯДКЕ (по возрастанию номера прерывания). Эта об-ласть памяти называется таблицей векторов прерываний (термин еще пока-чтотемный, и Вы о нем не думайте). Эта область памяти (оперативной памяти PC)начинается по адресу 0000:0000 (т.е. в самом начале) и занимает 1 Кб.^ "Вирусы", "Черви", "Драконы" и резиденты на службе прогресса. Назад | Далее Например: адрес п/п-ы прерывания N0 (реакция на ситуацию "деление на нуль") нахо-дится в таблице векторов прерываний по адресу 0000:0000--segment и0000:0002--offset адрес п/п-ы прерывания N5 (печать экрана) находится в таблице векторовпрерываний по адресу 0000:0014--segment и 0000:0016--offsetЕсли мы замыслим заменить исходную стандартную п/п-му нашей собственной,мы должны: 1. Засунуть куда-то эту нашу п/п-му (и чтобы она там действительно была!И была готова обработать соотв. прер-е). 2. Изменить в таблице векторов адрес исходной стандартной п/п-ы на адреснашей.Отметим, что пихать нашу п/п-му обработки прерыв-я в то-же место, гдесидела исходная (иногда это физически возможно) лучше не надо, хотябы потому,что исходная нам ЕЩЕ ОЧЕНЬ МОЖЕТ ПРИГОДИТЬСЯ.ПОДРОБНО опишем механизм того, как PC реализует обработку прерываний: 1. PC прячет в стек регистр флагов. 2. PC прячет в стек содержимое регистра CS. 3. PC прячет в стек значение IP для следующей команды. 4. PC делает JMP Far :[] (джамп @@??на п/п-у обработки прерывания). ПРИ ЭТОМ все операции 1-4 (PUSHF, PUSH CS, , JMP FAR ) содер-жатся неявно В ОДНОЙ КОМАНДЕ "INT" вызова прерывания (если прерыв-е реализу-ется программно). 5. Далее выполняется п/п-ма обработки прерывания. 6. П/п-ма обработки прерывания завершается специальной командой IRET,которая состоит из следующих действий: а) помещается из стека слово в регистр IP (и увелич. SP на 2) ---¬ б) помещается из стека слово в регистр CS (и увелич. SP на 2) +----¬ в) помещается из стека слово в регистр флагов (увелич. SP на 2)--- ¦ ¦ ¦ т.е. это- JMP Far обратно, в программу ¦ пользователя, на команду, следующую за той, ¦ которая осуществила вызвлв прерыв-я ¦ + восстановление флагов А что такое п/п-ма обработки прерывания? Очень часто - трудно сказать;считайте, что стандартная п/п-ма обработки прерывания (та - которую PC имеетизначально) -- своего рода -- черный ящик. И, как в любом черном ящике, здесьнам доступны, в лучшем случае, лишь ВХОД и ВЫХОД. Пусть, например, мы хотимнапечатать на экране PC один символ. Это легко можно сделать, дав прерываниеномер 10h. При этом будет вызвана п/п-ма печати символа, о структуре котороймы ничего не знаем. Как и большинство п/п-м, эта п/п-ма имеет входные и вы-ходные параметры, через которые мы загружаем в нее и получаем обратно инфор-мацию. ВХОДНЫЕ И ВЫХОДНЫЕ ПАРАМЕТРЫ П/П-МЫ ПОМЕЩАЮТСЯ В РЕГИСТРЫ ПРОЦЕССОРА. Например, -- мы страстно хотим напечатать на экране символ 'a'. Тогданам необходимо сделать следующие действия:MOV AH,0Eh ;это означает что п/п-ма должна ПЕЧАТАТЬ ОДИН СИМВОЛ------¬ ; ¦ MOV AL,61h ;п/п-ма должна печатать КОНКРЕТНЫЙ СИМВОЛ 'a'(его код=61h)¦ ;L---T----------------------------------------------------- ; L-загрузка входных параметров ; INT 10h ;приказ "печатай!" (генерация прерывания N 10h)а вот выходных параметров это прерывание (вернее сказать- данный способ его использования) не имеетА вот как выглядит при этом работа процессора:-----------------------------------------------------------¬ ¦ рис.1 ¦: L------------------------------------------------------------- НАША (ПОЛЬЗОВАТЕЛЬСКАЯ) ПРОГРММА ------¦--- П/П-ма ОБРАБОТКИ ПРЕРЫВАНИЙ --- ¦ ¦ ¦^ ДЕЙСТВИЯ ПРОЦЕССОРА МНЕМОКОДЫ ¦ МНЕМОКОДЫ ДЕЙСТВИЯ('на пальцах'): ¦ ПРОЦЕССОРА: =======>====¬ ¦ г===>=====¬AHALPUSHF---------------TT---> INT 10h L===>===-.........¦ .........PUSH CS ¦¦ г===============PUSH IP ¦¦ L==>=¬ ¦ ¦L=====JMP Far по адресу --+- ¦ ¦ ¦ L-POPF :[] ¦ ¦ L--T-- L---T- ¦ ¦ ¦ ¦ ¦ L-> путь выполнения @@?? ¦ ¦ ¦слово по- L--- слово поадресу 0:40 адресу 0:42Покажем, опираясь на описонный выше подробный механизм выполнения преры-ваний, как реализовать прер-е НЕ пользуясь классической командой INT. Печата-ем символ 'a' (см. пример 1):-----------------------------------------------------------¬ ¦ пример 1 ¦: L-----------------------------------------------------------TITLE Это - COM. программа N1 для демонстрации механизма вызова прерыванийASSUME CS:CodeSegment;---------------------------------------------------------------------------CodeSegment SEGMENT PARA ORG(100h)Start:MainProcedure PROC NEAR ; ; ; ;--запасаем в стеке информацию, необходимую для автоматического-¬ ; возврата из п/п-мы обработки прерыв-я ¦ ; ; ¦^ PUSHF ; ¦ PUSH CS ; ¦ MOV BX,OFFSET after_int ;---¬ ¦ PUSH BX ;---------+-засунуть в стек IP точки возврата¦ ; ; из п/п-ы обработки прерывания ¦ ;---------------------------------------------------------------- ; MOV AH,0Eh ;входные MOV AL,61h ; параметры прерыв-я 10h ; ; XOR DX,DX ; DX = 0 напрямую, как Вы знаете, засунуть MOV DS,DX ; DS = 0 константу в регистр DS невозможно ; ; JMP dword ptr DS:[40h] ;длин. джамп по адресу, котор. находится ; ; в ячейках 0000:0040h и 0000:0042hafter_int: ; RET ;закончить программу и вернуться в DOS ; ; ;MainProcedure ENDP ;CodeSegment ENDS END StartПояснение: команда JMP dword ptr DS:[40h] (длинный JMP) осуществляет пе-реход по адресу, который хранится по адресу DS:[40h]. Это -- адрес п/п-мы об-работчика прерывания 10h. При этом в стек нужно уронить регистр флагов, ре-гистры CS и IP. Т.о. для того, чтобы команда IRET, завершающая обработчикпрерывания 10h вернула управление нашей программе (на метку after_int), необ-ходимо сохранить в стеке определенную информацию (см. пример 1).-----------T------------------------------------------------------T------------ ¦ в случае, если кто-то не знаком с пакетом TASM, то: L------------------------------------------------------- А теперь -- создадим загрузочный модуль. Вы можете при помощи любого текстового редактора перетащить вышепред-ставленный текст исходника в текстовой файл с расширением .asm, например --proba.asm А после этого сделать сначала .OBJ файл:tasm.exe /l proba.asm LT- L---- будет создан файл листинга proba.lst (там Вам покажут ошибки - если они есть)а потом - и .COM файл:tlink.exe /t proba.obj LT- L--- будет создан .COM файлЕсли Вы не знакомы с пакетом TASM и это - Ваш первый опыт, то можете по-ка-что пропустить (особо не задумываясь) всякие диррективы, предшествующие ипоследующие за текстом основной программы (TITLE ...; ASSUME ...; CodeSegmentSEGMENT PARA; ORG(100h);MainProcedure ENDP; CodeSegment ENDS; END Start ).Поступайте с ними пока-что чисто механически. (На досуге можете почитать/1/,/2/,/7/) Итак, у нас есть готовый COM. модуль, который можно загрузить и выпол-нить. И он напечатает литеру 'a'. Замечательно!А вот тут пример того как решить ту же задачу не JMP Far-ом, а -- CALLFar-ом Разница в том, что в этом случае не нужно прятать в стек значения CS иIP для точки возврата из п/п-мы обработки прерывания (CALL Far оказался "ум-нее" - он делает это автоматически).-----------------------------------------------------------¬ ¦ пример 2 ¦: L-----------------------------------------------------------TITLE Это - COM. программа N2 для демонстрации механизма вызова прерыванийASSUME CS:CodeSegment;---------------------------------------------------------------------------CodeSegment SEGMENT PARA ORG(100h)Start:MainProcedure PROC NEAR ; ; ; XOR DX,DX ; DX = 0 MOV DS,DX ; DS = 0 ; PUSHF ;запасаем информацию, необходимую для автома- ; ;тического ыозврата из п/п-ы обработки прерыв-я ; MOV AH,0Eh ;входные MOV AL,61h ; параметры прерыв-я 10h ; ; CALL dword ptr DS:[40h] ;длинный вызов п/п-ы обработки прерыв-я 10h ; ;(по адресу 0:40h - адрес п/п-ы обработки) ; ;(два слова) ; RET ;закончить программу и вернуться в DOS ; ; ;MainProcedure ENDP ;CodeSegment ENDS END StartИ последнее, что мы сделаем в этой главе, - научимся давать вызов преры-вания, не пользуясь INT-ом и не обращаясь каждый раз к таблице векторов. За-чем ? Это иногда полезно. Дело в том, что 'вирусы' и 'драконы' очень частопользуются прерываниями и при этом должны оставаться необнаруживаемыми. А ес-ли прерывание дается командой INT, то охранные системы (всевозможные антиви-русные мониторы) тут же узнаЮт об этом и могут насторожиться. Если мы посто-янно пользуемся таблицей векторов, то где гарантия, что антивирусные мониторымежу делом не подложили в нее адрес СВОЕЙ п/п-мы, и, вместо того, чтобы полу-чить сервис п/п-мы-обработчика прерыв-я, мы попадаем в засаду. А если мы сох-раним в коде нашей программы адрес п/п-мы исходного обработчика прерыв-я (и втот момент будем абсолютно уверены, что имеем дело не с 'оборотнем') то вдальнейшем сможем смело делать JMP Far или CALL Far без опасения быть обнару-женными.Вот готовая программа: (коментарии см. ниже)-----------------------------------------------------------¬ ¦ пример 3 ¦: L-----------------------------------------------------------TITLE Это - COM. программа N3 для демонстрации механизма вызова прерыванийASSUME CS:CodeSegment;---------------------------------------------------------------------------CodeSegment SEGMENT PARA ORG(100h)Start:MainProcedure PROC NEAR ; ; ; JMP over_data ; перепрыгнем через данные ; ;saved_int10: DD 0 ; данные (хранилище для адреса INT 10h ; ; -- 2 слова) ;over_data: XOR DX,DX ; DX = 0 MOV DS,DX ; DS = 0 ; ;--сохраняем в хранилище адрес исходн. п/п-мы INT 10h (2 слова)-¬ ; ; ¦ MOV AX,DS:[10h*4] ;мы указываем лишь порядко-¦ MOV word ptr CS:[saved_int10 ],AX ;вый номер прерывания ¦ MOV AX,DS:[10h*4+2] ; ¦ MOV word ptr CS:[saved_int10+2],AX ; ¦ ;---------------------------------------------------------------- ; ;--запасаем в стеке информацию, необходимую для автоматического-¬ ; возврата из п/п-мы обработки прерыв-я ¦ ; ; ¦^ PUSHF ; ¦ PUSH CS ; ¦ MOV BX,OFFSET after_int ;---¬ засунуть в стек ¦ PUSH BX ;---+- IP точки возврата ¦ ;---------------------------------------------------------------- ; ; MOV AH,0Eh ;входные параметры MOV AL,61h ; прерыв-я 10h (печатать 'a') ; JMP dword ptr CS:[saved_int10] ;длин. джамп по адресу, котор. на- ; ; ходится теперь в хранилищеafter_int: ; ; saved_int10 ; RET ;закончить программу и вывалиться ; ; в DOS ; ;MainProcedure ENDP ;CodeSegment ENDS END StartЧто здесь нового? Совсем немного. Во-первых мы перетащили адресп/п-мы-обработчика прерывания 10h из таблицы векторов в тело нашей прогр-мы.Во-вторых мы теперь делаем JMP Far не на адрес в таблице векторов (dword ptr00:[40h]), а на адрес, сохраненный в теле нашей прогр-мы (dword ptrCS:[saved_int10]). Есть одна громоздкость -- данные (saved_int10: DD 0) дол-жны определяться перед их использованием (MOV word ptr CS:[saved_int10 ],AX)и, следовательно, мы должны в начале через них перепрыгнуть. Этот бардак свя-зан с особенностями TASM-овской компиляции.^ "Вирусы", "Черви", "Драконы" и резиденты на службе прогресса. Назад | Далее гл.4 СОЗДАНИЕ РЕЗИДЕНТНЫХ ПРОГРАММ (практическая реализация)============================================================ Итак, мы познакомились с механизмом работы прерываний и научились реали-зовывать вызов прерываний на уровне обычный JMP-ов и CALL-ов и даже не ис-пользовать при этом таблицу векторов. Чудесно! Теперь об создании резидентных программ (именно таковыми являются 'дра-коны' и 90% всех 'вирусов'). Что такое резидентная программа (в дальнейшем - просто - резидент) ? Это такая программа, которая находится в оперативной памяти постоянно(обычные, нерезидентные программы присутствуют в памяти лишь во время их не-посредственного исполнения; когда их выполнение заканчивается -- они "умира-ют" - память занятая ими - освобождается . Резидент же может обитать в ОЗУ,[кстати rezide - по англ. 'обитать'] не будучи в данный момент исполняем, нов то же время, - готовый к действию). Вот как распределяется память при выполнении обычных и резидент. прог-рамм (КРАЙНЕ упрощенно):-----------------------------------------------------------¬ ¦ рис.2 ¦: L-----------------------------------------------------------обычная программа:До загрузки чего-либо:---------T--------------T---------------------------------------- ¦таблица ¦ ¦ ¦векторов¦ область DOS ¦ свободная память . . . . . . . . . . ¦прерыв-й¦ ¦ L--------+--------------+---------------------------------------- 0:0 ----> старшие адресаЗагрузили и исполняем обычную программу: ¦ ----------------- ---------T--------------T--------V----------T-------------------- ¦таблица ¦ ¦ TETRIS.EXE ¦ ¦векторов¦ область DOS ¦(есть такая глупая ¦ свободная память . ¦прерыв-й¦ ¦ игрушка) ¦ L--------+--------------+-------------------+-------------------- 0:0После того, как прогр-а завершилась:---------T--------------T---------------------------------------- ¦таблица ¦ ¦ ¦векторов¦ область DOS ¦ свободная память . . . . . . . . . . ¦прерыв-й¦ ¦ (все вернулось на кругИ своя...) L--------+--------------+---------------------------------------- 0:0=========================================================================== Теперь - что касается резидентов:До загрузки чего-либо:---------T--------------T---------------------------------------- ¦таблица ¦ ¦ ¦векторов¦ область DOS ¦ свободная память . . . . . . . . . . ¦прерыв-й¦ ¦ L--------+--------------+---------------------------------------- 0:0Загрузили резидент:-------------¬ ¦ ----------------- ---------T--------------T--------V----------T-------------------- ¦таблица ¦ ¦ KEYR23.COM ¦ ¦векторов¦ область DOS ¦(драйвер рус. кла- ¦ свободная память . ¦прерыв-й¦ ¦ виатуры) ¦ L--------+--------------+-------------------+-------------------- 0:0 --------------------------- ¦ И так- -- до окончания работы на PC! Резидент будет сидеть в ОЗУ и бытьвсегда готов вам услужить. Если Вы теперь загрУзите tetris, он попадет воткуда:---------T--------------T-------------------T----------T--------- ¦таблица ¦ ¦ KEYR23.COM ¦ ¦ ¦векторов¦ область DOS ¦(драйвер рус. кла- ¦TETRIS.EXE¦свободная ¦прерыв-й¦ ¦ ¦ виатуры) ¦ ¦память... L--------+--------------+-¦-----------------+----------+--------- 0:0 Lстал резидентомТолько программы типа Volkov Comander могут безболезненно удалять рези-денты из памяти (и то лишь те, которые были загружены после них {удаляющих}). Сделать программу резидентной (постоянно присутствующей в памяти) --ЭЛЕМЕНТАРНО. Вот один из способов (в дальнейшем мы рассмотрим их все):(прокоментируем ниже) -----------------------------------------------------------¬ ¦ пример 4 ¦: L-----------------------------------------------------------TITLE Это - COM. программа N4 для демонстрации посадки резидентаASSUME CS:CodeSegment;---------------------------------------------------------------------------CodeSegment SEGMENT PARA ORG(100h)Start:MainProcedure PROC NEAR ; ; ; ; ; MOV AX,0E61h ; напечатать INT 10h ; символ 'a'resident_end: ; ; MOV DX,OFFSET resident_end ; DX ; ; рез-та+1 INT 27h ; вернуться в DOS ; ; оставив программу резидентной ; ; ;MainProcedure ENDP ;CodeSegment ENDS END StartЕсли Вы захотите откомпилировать и запустить вышеданный пример, то лучшеперед этим выйти из Norton Comander-а и запустить Volkov Comander (если у Васего еще нет -- настоятельно советуем приобрести !). Volkov Comander позволяетпо нажатию комбинации клавиш Alt/F5 показать карту памяти PC и Вы можете уда-лить любой резидент, загруженный после Volkov Comander-а.А теперь -- коментарии к примеру 4: Чтобы после выполнения программы выйти в DOS и одновременно оставитьпрогр-му резидентной всего-то лишь и нужно: ВМЕСТО КОМАНДЫ RET ДАТЬ ПРЕРЫВ-ЕINT 27h и при этом в регистр DX нужно поместить адрес последнего оператораостающегося резидентно куска+1. Адрес этот = смещению от PSP программы (еслине знаете ничего о PSP, то почитайте хотя бы /1/; или -- чуть подождите, мыкратко расскажем об этом позднее -- в гл.5). Прерывание INT 27h -- програм-мное прерыв-е. П/п-ма его обработки изменяет структуру ОЗУ так, что часть па-мяти теперь навечно закреплена за фрагментом Вашей программы. Итак, мы оставили в ОЗУ резидентный фрагмент, который печатает букву'a'. Вопрос -- когда же он будет выполняться? А вот -- никогда! Вернее --всего один раз - когда мы оставляли резидент в памяти. Но, тем не менее, оностанется в ОЗУ. Он больше никогда не получит управление. Это - настоящийпрограммный труп, который просто занимает место. Ради прикола запустите этупрограмму еще разок. И в ОЗУ останется еще один памятник глупости. Расботая вVolkov Comander-е, нажав Alt/F5, Вы можете в этом убедиться. Сколько бы разэта программа не запускалась - каждый раз она будет отхватывать все новые иновые кусочки памяти и оставлять в них код печати буквы 'a', который никогдабольше не будет выполнен. Но ведь резиденты пишутся не для этого! Они остаются в памяти ДЛЯ того,чтобы в ОПРЕДЕЛЕННЫЕ МОМЕНТЫ получать управление и выполнять определенныедействия. Когда и каким образом? ПРИ ПОМОЩИ МЕХАНИЗМА ПРЕРЫВАНИЙ! ПОДРОБНЕЕ: Что будет если программа заменит в таблице векторов прерываний адрес ис-ходной п/п-мы обработки прерывания на адрес своей собственной п/п-мы? В этомслучае, в момент, когда будет дано это прерыв-е, управление получит эта ейнаяп/п-ма. Возникнет некий самозванец, который будет обрабатывать прерывание посвоему. Например, -- вы нажали букву "А", а PC напечатал в на экране "О"; Выначали печатать документ на принтере, а одновременно его текст запишется вспециальный скрытый файл (пример шпионящего "дракона"); программа TETRIS.EXEзагружена на выполнение (прерывание 21h), а вирус "почуял" это и впридачу кзапуску программы "заразил" ее своей копией. Прерывания происходят постоянно, и если, окончив свою работу, прогр-ма,на адрес которой был заменен вектор прерывания, исчезнет из памяти - "умрет"и при этом не восстановит исходное значение вектора (адрес исходной п/п-мыобработки прерывания), то PC по-прежнему всякий раз, когда будет генеритьсяпрерывание, будет передавать управление в область, где раньше сидел самозван-ный обработчик, а теперь остался лишь мусор. И PC зависнет (в лучшем случае).Зависнет намертво. Следовательно, если мы решимся перехватить прерывание то существуюттолько две возможности: 1. Либо, если мы не будем сажать в память резидент, то, перед тем как"умрем", отреставрируем адрес исходного обработчика прерываний; 2. Либо мы не будем реставрировать адрес исходного обработчика прерыва-ний, и, сохранив прерогативу обработки прерывания за собою, оставим наш ори-гинальный обработчик резидентно в памяти; Нас интересует второй вариант, т.к. созданные нами программы будут кон-тролировать работу PC во время всей DOS-овской сессии, во время выполнениядругих программ, во время всех действий пользователя (который об этом и знатьне будет). ОЧЕНЬ ВАЖНОЕ ДОБАВЛЕНИЕ -- очень часто стандартная п/п-ма обработки пре- ----------------------- рывания все же ДОЛЖНА его обработать, независимоот того, обрабатывали ли мы его сами. Следовательно, после того, как Вы, пе-рехватиши вектор, в момент генерации прерывания сделали то что Вам нужно, Вывсе же должны отдать управление исходному обработчику. Это похоже на случай,когда некто с целью наварить баксов перехватывает выгодный подряд на строи-тельство моста, но сам, не будучи строителем, все же вынужден нанять про-фессионалов (выдать субподряд).РЕЗЮМИРУЕМ: вот что нам нужно сделать, чтобы создать активный резидент,реагирующий на появление определенного прерывания и не грохающий работу PC: 1. Сохранить в своем теле адрес истинного обработчика прерыв-я. 2. Заменить в таблице векторов адрес истинного обработчика прерыв-я наадрес собственной п/п-мы. 3. Завершить программу, оставив собственную п/п-му обработки прерыванияв памяти PC резидентно. 4. Сконструировать резидентную часть так, чтобы после обработки перехва-ченного прерывания позволить исходному обработчику тоже его обработать. Если представить все это наглядно, то получится, что наш резидент вкли-нивается в некую цепочку осуществляющую реагирование PC на некое прерывание. Вот какая была цепочк


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Болезни цивилизации
Реферат Форма, ее назначение и структура. Создание формы
Реферат Ответы на билеты по технологии образования педкласс 11 класс
Реферат Концептуализация тактильных ощущений в естественном языке (на примере прилагательного сухой)
Реферат Державне регулювання процедури банкрутства
Реферат Формирования и использования финансовых ресурсов предприятия ОАО Богословское рудоуправление
Реферат Файлообменник с веб-интерфейсом
Реферат Изучение местности по топографической карте
Реферат Ai And Expert Systems Essay Research Paper
Реферат Problems With Hmo
Реферат Форматирование данных
Реферат Влияние насекомых-опылителеи на структуру урожая гречихи в зависимости от способов посева
Реферат Курсовая: Основы стандартизации и функциональной взаимозаменяемости. Расчет размерных цепей
Реферат Аннотация рабочей программы наименование дисциплины Упаковочные материалы
Реферат Cloning Essay Research Paper As a human