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

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

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

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

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

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

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

первые 32-байтовые директорные записи на диске. Первые одиннадцать байтов
являются именем файла. Мы можем сравнить эти одиннадцать байтов с именем
файла, сохраненным в загрузочной записи. Код для этой операции выглядит
примерно так:
LOOK.SYS:
MOV AL.BYTE PTR [FAT_COUNT] ;получаем кол-во FAT на диске XOR АН,АН
MULWORD PTR [SECS_PER_FAT] умножаем на кол-во секторов на FAT ADO AX.WORD
PTR [HIDDEN_SECS] добавляем скрытые секторы ЛЕЮ АХ,WORD PTR [FATSTART]
добавляем стартовый сектор FAT PUSH АХ
MOV WORD PTR [DOSJD],AX ;корневая директория,
;сохраняем ее
MOV АХ.20Н ;размер директорной записи
MUL WORD PTR [ROOT_ENTRIES] .размер директории в ах
MOV BX,WORD PTR [SEC.SIZE] ; размер сектора
ADD АХ,ВХ добавляем один сектор
DEC АХ ;декрементируем на 1
DIV ВХ ;ах=номера секторов в корневой директории
ADD WORD PTR [DOS_ID],AX ;DOS_ID=Ha4ano данных
MOV BX,OFFSET DISK_BUF ;устанавливаем буфер чтения ;диска @ 0:0500
POP АХ последовательно конвертируем
CALL CONVERT ; номер сектора из данных bios
MOV AL, 1 ; готовимся читать 1 -й сектор диска
CALL READ_DISK ;читаемего
MOV DI.BX сравниваем первый файл
MOV СХ, 11 ;с требуемым именем файла
MOV SI,OFFSET SVSF1L?_1;первого системного файла для MS-DOS
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
REPZ CMPSB ERROR2:
JNZ ERROR2 ;не тот • ошибка, остановка
Как только загрузочный сектор получает подтверждение о наличии системных
файлов на диске, он пытается загрузить первый файл. Он полагает, что
первый файл расположен в самом начале области данных на диске - в одном
блоке. Поэтому для его загрузки загрузочный сектор рассчитывает, где
находится начало области данных: Первые данные сектора=
FRDS + [(32*ROOT_ENTRIES) + SEC_SIZE - 1]/SEC_SIZE
Затем загрузочный сектор определяет размер файла в секторах. Файловый
размер (в байтах) хранится в офсете 1СН от начала директорной записи в
0000:0500Н. Количество секторов для загрузки -
РАЗМЕР В СЕКТОРАХ = (SIZE_IN_BYTES/SEC_SIZE) + 1
Файл загружается в 0000:0700Н. Затем загрузочный сектор устанавливает в
своих регистрах некоторые параметры для этого системного файла и передает
ему контроль. После этого операционная система берет дело в свои "руки*,
и постепенно образ загрузочного сектора в памяти переписывается другими
программами.
Отметим, что размер файла не может превышать границу 7С00Н-0700Н. Если он
будет больше этих значений, то начнет выполняться в загрузочном секторе в
памяти.
А так как код сегмента продолжает выполняться при загрузке системного
файла, он окажется переписанным, и система "зависнет". Но если вы
посмотрите на размер IO.SYS в MS-DOS 6.2, то увидите, что он "весит"
свыше 40К!
Как же загрузочный сектор загружает его? Это один из грязных секретов DOS
6.Х. В данном случае загрузочный сектор загружает файл не полностью, а
только его часть, которая нужна для старта. Затем системный файл загрузит
остальную часть самостоятельно.
246
ГЛАВА 6. Инфицирование загрузочного сектора
Прерывание int 13Н
Так как загрузочный сектор загружается и выполняется раньше DOS, ни одна
из обычных служб DOS-прерываний не доступна для использования. Например,
вызов int 21h не даст нам доступа к файлу. Вместо этого мы должны
полагаться на службы, предоставляемые BIOS - службы, которые
устанавливаются стартовой подпрограммой ROM. Самой важной из них является
прерывание int 13h, которое дает программам доступ к дискам. Для полноты
информации я приведу вам список функций int 13h:
АН Функции
00h Сбросить/пере калибровать контроллер
01 h Получить статус последней операции
02h Читать секторы
03h Писать секторы
04h Верифицировать секторы
05h Форматировать трек
08h Получить параметры диска
09h Инициализировать таблицы параметров диска
OAh Читать длинные секторы
OBh Писать длинные секторы
OCh Искать цилиндр
ODh Альтернативная перезагрузка диска
OEh Читать буфер сектора
OFh Писать буфер сектора
10h Проверить, готов ли диск
11h Пере калибровка диска
12h Диагностика контроллера RAM
13h Диагностика диска
14h Внутренняя диагностика контроллера
15h Читать тип диска
16h Читать статус изменений на диске
247
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
17h Установить тип дискеты
Нас интересуют две службы прерывания 13h: служба чтения диска,
определяемая настройкой ah-2 при вызове 13h, и служба записи на диск,
определяемая настройкой ah-3.
Функция 02Н:
Входные данные: AH=02h
А1_=число секторов для чтения
СН=номер (0-п) трека (цилиндра) - младшие 8 битов
С1_=номер сектора (1 -п)
ОН=номер головки
DL=ahck (0=диск А..., 80Ь=первый жесткий диск,
81 Ь=второй жесткий диск)
ES:BX => буфер для хранения прочитанных данных Выходные данные:
CF устанавливается на ошибку, и код ошибки передается в АН CF очищается,
если операция прошла успешно А1_=число секторов для чтения
Функция ОЗН:
Входные данные: AH=03h А1_=число секторов для записи СН=номер (0-п) трека
(цилиндра) - младшие 8 битов CL=hombp сектора (1 -п)
DH=HOMep головки DL=ahck (0=диск А..., 80И=первый жесткий диск,
Предыдущая << 1 .. 58 59 60 61 62 63 < 64 > 65 66 67 68 69 70 .. 123 >> Следующая