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

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

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

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

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

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

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

;фактически, на второй символ; далее ; предписывается следующая
инструкция
hang: ;когда сообщение об ошибке показано,
; программа входит
dec si ;в бесконечную петлю
;AL = 0. Lodsb увеличивает SI, и далее вновь уменьшается => бесконечная
петля!
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
display_error: ;это структура изображения ошибки
lodsb ;строка [si] на ai
cmp al,0 ;0 отмечает конец строки
je hang ; прыжок, если равны
mov bx,7 ;цвет: белый
mov ah.OEh ;функция OEh видеоизображения
int 10h ;пишем символ из ai, перемещаем курсор
loc_7:
jmp short display_error ;и пишем другой символ!
ali_good: ;тут мы узнаем, что нашли
;активную таблицу разделов
mov [bp+25h] ,ах ;ах все еще О
xchg si,ах ;si = О
mov ai, [bp+4] ; загружаем тип системы в at
;здесь проводятся странные проверки, которые выясняют тип системы:
mov ah,6 cmp al.OEh
jeloc_10 ;тип первой системы
mov ah.OBh cmp ai.OCh
je loc_9 ;тип второй системы
cmp al.ah jne Ioc_12 inc ax
;тип третьей системы
ГЛАВА 7. Многоцелевые вирусы
1ос_9:
mov byte ptr [bp+25h],6
jnz loc_12 ;прыжок, если не ноль
loc_10:
mov bx,55AAh ;проверка инсталляции расширений IBM/MS
Далее идет недокументированное прерывание int 13, которое возвращает:
установленный CF, если ошибка очищает CF, если О К, плюс BX-0AA55h.
;АН = главная версия расширений (01 h = 1 .х, 20h = 2.0/EDD-1.0, 21 h =
;2.1/EDD-1.1)
;al = внутреннее использование
;сх = API субнабор для поддержки bitmap
;dh = версия расширения (v2.0+ ??? - не присутствует в 1 .х)
push ах сохраняем ах
mov ah,41 h
int 13h ; недокументированная проверка инсталляции
pop ах ; восстанавливаем ах
jc 1ос_11 ;прыжок, если ошибка => расширения не ; поддерживаются
cmp bx,0AA55h сравнение
jne loc_11 ;прыжок, если не равны => не инсталлирован
test cl, 1 ;проверка, поддерживаются ли функции ;доступа к диску
jz 1ос_11
mov ah.al
;если мы здесь, то расширения в
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
mov [bp+24h] ,dl ;dl содержат номер диска!
mov word ptr ds:61 Ah,1 EEBh ;это отмечается здесь... ??
loc_11:
mov [bp+4],ah .переписываем тип системы
loc_12:
mov di.OAh ;di = OAh
Теперь система начинает загружать загрузочную запись в OOOOtSP (7C00h):
1ос_13:
mov ах,201 h .готовимся читать с диска
mov bx.sp ;в es:sp
xor сх.сх ; об нуля ем регистр
cmp di,5 ;di > 5 ?
jgloc_14 ;прыжок, если >
mov сх. [bp+25h] ;иначе устанавливаем в сх
; цилиндр и сектор
1ос_14:
add сх, [Ьр+2] ;и увеличиваем сектор
int 13h ;теперь читаем сектор 1 в es:bx
;al=1, сИ=цилиндр, с1=сектор, dh=ronoBKa (0)
1ос_15:
jc 1ос_17 ;прькаем, если установлен перенос=>какая-то ошибка
mov si,746h указывает на Mssing operating system'=нет ОС
cmp word ptr ds:7DFEh,0AA55h проверка наличия сигнатуры
;раздела
je loc_21 ; прыжок, если равно => ОК
;загрузочная запись зафужена! прыгаем к ней sub di,5 .иначе
уменьшаем di
ГЛАВА 7. Многоцелевые вирусы
jg 1ос_13 пытаемся снова => попытка найти правильный сектор
1ос_16: test si,si;
jnz display_error ;прыжок к процедуре ошибок, если не ноль
mov si,727h ; указываем на 'Error loading operating .system' => ошибка
;при загрузке ОС
jmp short 1ос_7 ;переходим к процедуре ошибки
cbw конвертируем байт в слово
xchg сх.ах ; обмен push dx ; сохраняем dx
cwd конвертируем слово в двойное слово
add ax,[bp+8] добавляем это д войное слово, которое содержит adc
dx,[bp+OAh] .номер фиэмесмого секторе для начала таблицы ;разделов => мы
имеем его в dx:ax
call sub_1 .продолжаем
pop dx восстанавливаем dx
jmp short loc_ 15 ;если мы здесь, то где-то ошибка
1ос_17: ;мы приходим сюда в случае ошибки при чтении
dec di .декрементируем число попыток
jz 1ос_16 ; прыжок к ошибкам, если ноль
хог ах,ах ; теперь рестарт диска
int 13h ;рестарт диска, аИвозврат статуса
jmp short loc_13
.пытаемся снова
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
add [bx+si] ,al ;это какой-то хлам...
add byte ptr [di+56h], 15h ;бесполезный, на мой взгляд
sub_1: push si xor si,si push si push si push dx push ax push es push bx
push cx
movsi,10h ;si = 10h=16
push si '.сохраняем значение
mov si.sp ;si = указатель стека
push ax ;вталкиваем Dword в DX.AX
push dx
Стек выглядит примерно так:
SI,0,0,DX,AX,ES,BX,CX,10h,AX,DX
Еще одна недокументированная функция расширения IBM/MS INT 13 ->EXTENDED
READ (расширенное чтение):
;ah = 42h
;dl = номер диска
;ds:si => пакет дискового адреса
; сохраняем si ; обнуляем регистр сохраняем si .снова второй раз ;и все
остальное
ГЛАВА 7. Многоцелевые вирусы
1Ил. 16. Формат пакета дискового адреса
Офсет Размер Описание
00h Байт 10h (размер пакета)
Olh Байт Зарезервировано (0)
02h Слово Число блоков для пересылки
04h Двойное
слово Буфер пересылки
08h Учетве- Абсолютное число 6локов(для не- LBA-
ренное устройств рассчитывается по формуле:
слово (Cylinder*NumHeads + SelectedHead) * SectorPerTrack +
SelectedSector - 1
mov ax,4200h ;функция расширенного чтения mov dl,[bp+24h] ;dl = номер
диска int 13h;
pop dx ; восстанавливаем это
pop ax
lea sp,[si+1 Oh] ;загружаем эффективный адрес jc loc_20 ;прыгаем, если
Предыдущая << 1 .. 75 76 77 78 79 80 < 81 > 82 83 84 85 86 87 .. 123 >> Следующая