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

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

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

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

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

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

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

DOS_LOAD SEGMENT AT 0070Н ASSUME CS:DOS_LOAD
ORGO
LOAD: ;старт 1-й программы операционной системы program
DOS_LOAD ENDS
MAIN SEGMENT BYTE
ASSUME CS:MAIN,DS:MAIN,SS:NOTHING
Это загрузчик для загрузочного сектора. Он пишет загрузочный сектор в
диск А: в правильное место, затем устанавливает основные параметры диска.
Загрузчик начинает выполняться, когда эта программа выполняется из DOS
как СОМ-файл.
252
ГЛАВА 6. Инфицирование загрузочного сектора
ORG 100Н LOADER:
mov ах,201Н ;загружаем существующий загрузочный сектор
mov bx.OFFSET DISK BUF ;в этот буфер
mov сх, 1 ;диск 0, трек 0, головка 0, сектор 1
mov dx,0
int 13Н
mew 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,4C00H ;выход в DOS
Int 21H
Эта область резервируется для загрузки загрузочного сектора с диска,
который будет модифицирован загрузчиком, как и первый сектор корневой
директории, когда проверяется наличие системных файлов и загружается
первый системный файл.
Локация является фиксированной, потому что эта область свободна во время
выполнения загрузочного сектора.
ORG 0500Н DISKJ3UR DB ? -.Начало буфера
253
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Здесь начало кода загрузочного сектора. Этот кусок мы вынимаем из
компилированного COM-файла и вставляем его в первый сектор дискеты.
ORG 7С00Н
BOOTSBC: JMP SHORTBOOT ; прыжок к началу загрузочного кода NOP доеде
оставляем здесь 3 байта
DOSJD: DB 'Am Eagle' ;имя загрузочного сектора (8 байтов)
SEC_SJZE DW 200Н ;размер сектора (в байтах)
SECS_PER_CUJST: DB 2 ;число секторов в кластере FATSTART: DW 1 ;сгаргуем
сектор 1-ой FAT FATCOUNT: DB 2 ;число FAT на д иске
ROOT_ENTRIES: CW ТОН ;числозапиоей корневой директории SECCOUNT: DW 2D0H
;попноечисло секторов на диске DISKJD: DB OFDH ; код типа д иска
SECS_PB4_FAT: DW 2 ^исло секторов на FAT SEC$_F'ER_TRK: DW 9 '.количество
секторов на трек HEADS: DW 2 ;число головок на д иске
HIDDEN JSECS: CW 0 .кохмчествосжрьпък секторов на диске
Здесь находится исполнительный код начала загрузочного сектора.
BOOT:
С прерывания отключены
XOR АХ,АХ ;готовимся к установке сегментов
MOV ES.AX устанавливаем DS=ES=SS=0
MOV DS.AX
MOV SS.AX ;стартуем стек (c) 0000:7000
MOV SP,OFFSET BOOTSEC
STI -.включаем прерывания
254
ГЛАВА 6. Инфицирование загрузочного сектора
Здесь мы осматриваем первый файл на диске и проверяем, является ли он
первым системным файлом MS-DOS (IO.SYS).
LOOKSYS:
MOV AL.BYTE PTR [FAT_COUNT] ;получаем число FAT на диск XOR АН, АН
MUL WORD PTR [SECS_PER_FAT];умножаем на число секторов ;на FAT
ADD АХ,WORD PTR [HIDDEN_SECS] ;добавляем скрытые секторы ADD АХ,WORD PTR
[FATSTART] добавляем стартовый сектор PUSH АХ ; начало корневой
директории в ах
MOV ВР,АХ сохраняем значение здесь
MOV АХ.20Н ;размер директорной записи
MUL WORD PTR [ROOT_ENTRIES] ;размер директории в ах 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 SYSFILEJ системного файла
REPZ CMPSB
JNZ $ ;не то же самое, машина повисла
;ОК, системный файл здесь, поэтому загружаем его
255
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
LOAD_SYSTEM:
MOV АХ,WORD PTR [DISK_BUF+1CH] ;получаем размер файла ; IO.SYS
XOR DX,DX
DIV WORD PTR [SEC_SIZE] ;делим на размер сектора
INC АХ ;ах=секторы для чтения
CMP АХ.39Н ;не зафужать слишком много!
JLE LOAD1 ;(< 7С00Н-700Н)
MOV АХ.39Н ;плюс место для стека!
LOAD1:
MOV DI.AX сохранить это число в ВР
PUSH ВР .сохранить начало IO.SYS
MOV ВХ.700Н ;буфер диска = 0000:0700
RDJOSYS:
MOV АХ,ВР ;получаем сектор для чтения
CALL CONVERT ;получаем btos трек/цил/сектор INT 13Н ;читаем сектор
JC $ {остановка при ошибке
INC ВР {инкрементируем секторы для чтения
ADD BX.WORD PTR [SEC_SIZE] {изменяем адрес буфера DEC DI
{декрементируем секторы для чтения
JNZ RDJOSYS ;если нужно, получаем другой {IO.SYS был прочитан, передаем
ему контроль
DO_BOOT:
MOV CH.BYTE PTR [DISKJD] {помещаем тип диска в ch
MOV DL.0 {номер диска в dl
POP ВХ {начало данных в Ьх
JMP FAR PTR LOAD {дальний прыжок к IO.SYS
256
ГЛАВА 6. Инфицирование загрузочного сектора
Последовательно конвертируем номер сектора, находящийся в ах, в инфо BIOS
о треке, головке и секторе. Сохраняем число трека в ch, головки в dh,
число сектора в ch, устанавливаем ах до 201Н. Так как это код только для
дискет, мы не заботимся о числах, превышающих 255.
CONVERT:
XOR DX.DX
DIV WORD PTR [SECS_PER_TRK] ;делим ax на сект/трек INC DL ;dl=HOMe
Предыдущая << 1 .. 60 61 62 63 64 65 < 66 > 67 68 69 70 71 72 .. 123 >> Следующая