How 2 fuck VirStop Boot Sector Checking -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- Written by Dandler -ÄÄÄÄÄÄÄ- Translated by b0z0/iKx -ÄÄÄÄÄÄÄÄ- Introduction: ÄÄÄÄÄÄÄÄÄÄÄÄ- VirStop is a TSR antivirus, distributed in the F-Prot package that is used by a lot of people to prevent infection by unknown viruses. Once loaded it performs two tasks: - makes sure that the executed files aren't infected by a virus - makes sure that diskettes haven't got a virus in the boot sector Today we are going to examine the second VirStop feature to understand how it works and how we can fool it in our future boot sector viruses. How VirStop Boot Sector Checking works: ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- The boot sector analyzer uses a heuristic scan based on searching for some little strings frequently found in boot sector viruses. If one of the search strings is found, VirStop will immediately display a warning message to the user. But there are some backdoors, probably made to prevent VirStop from giving a warning on a clean boot sector. These can be used to fuck the scan. Strings: ÄÄÄÄÄÄÄ- As we said previously, the search strings mustn't be found in the boot sector, unless you want the floppy to be formatted by all the persons using VirStop (and there are a lot) or thrown directly in the paperbasket (I can assure you that this is a very common method of virus prevention). If you are going to write an encrypted virus you need only check that the VirStop search strings aren't in the clear part. Now we are going to give you all the search strings that VirStop checks in the boot sectors from offset 003h to offset 1FFh to see if the floppy is infected: xx = every byte xxxx = every word regx = every register ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Watch out for this in the Int 13h entry. 3D0102 CMP AX,0201 7403 JZ LOC1 E9xxxx JMP xxxx LOC1: ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. CD13 INT 13 E98001 JMP $+183h ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. 2E CS: 313C XOR [SI],DI 03xx ADD regx,regx 46 INC SI 81 DB 81 ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. 8B45D3 MOV AX,[DI-2D] B10A MOV CL,0A D3C8 ROR AX,CL 8EC0 MOV ES,AX ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. 8B84xxxx MOV AX,[SI+xxxx] D3E0 SHL AX,CL ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. BC007C MOV SP,7C00 16 PUSH SS 07 POP ES E8xxxx CALL xxxx 36 SS: ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Pay attention on write/read operations just before a jump out of the segment CD13 INT 13 CB RETF ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Don't use these simple tricks when you want to decrement the word at 0:413h 8ED8 MOV DS,AX FF8Fxxxx DEC WORD PTR [BX+xxxx] ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Like we just said, these tricks are too simple 8B07 MOV AX,[BX] 48 DEC AX 8907 MOV [BX],AX FB STI B106 MOV CL,06 ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. 8BE6 MOV SP,SI 8ED7 MOV SS,DI FB STI 8EC7 MOV ES,DI ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. AA STOSB 57 PUSH DI 81E7FF00 AND DI,00FF 81FFxxxx CMP DI,xxxx ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;The method is quite good, but to shrink the memory you must think of ;something else. FF0C DEC WORD PTR [SI] AD LODSW 5E POP SI ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is really too simple. Hook the Int 13h with a different method A34C00 MOV [004C],AX 8C064Exx MOV [xx4E],ES ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. 8ED8 MOV DS,AX 8EC0 MOV ES,AX 50 PUSH AX 50 PUSH AX 50 PUSH AX FB STI ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. 48 DEC AX 89C4 MOV SP,AX LOC1: 30E4 XOR AH,AH CD13 INT 13 72FA JB LOC1 ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Also this method can't be used anymore. BE1304 MOV SI,0413 8EDA MOV DS,DX 8B04 MOV AX,[SI] ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. 26 ES: 8A05 MOV AL,[DI] 8A05 MOV AL,[DI] AA STOSB 8AC4 MOV AL,AH ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Probably is a search string typical for a virus, but it may be used ;casually in your future productions. So pay attention! 8C0E4E00 MOV [004E],CS 803Exxxxxx CMP BYTE PTR [xxxx],xx ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Sorry, but also this method can't be used. 8905 MOV [DI],AX B106 MOV CL,06 D3E0 SHL AX,CL 04xx ADD AL,xx ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Int 12h? We are not cavemen! 8-) CD12 INT 12 B106 MOV CL,06 D3E0 SHL AX,CL 8EC0 MOV ES,AX ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Also a child would code better. ;-) 891E4C00 MOV [004C],BX 8C064E00 MOV [004E],ES ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is a search string typical for a virus. F9 STC E2AA LOOP $-54 xx xx 0405 ADD AL,5 8A DB 8A xx xx ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Simple, just too simple. A11304 MOV AX,[0413] B106 MOV CL,06 D3E0 SHL AX,CL ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Xor FF can't be used? So use a Not, that is also shorter. 8-) 8A27 MOV AH,[BX] 80F4FF XOR AH,FF 8827 MOV [BX],AH ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;This is more elaborate, but is too simple. BB1304 MOV BX,0413 8B07 MOV AX,[BX] 48 DEC AX ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;The problem is always the allocation of the K of memory. FF0C DEC WORD PTR [SI] AD LODSW B106 MOV CL,06 ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;I asked you to use a different method to hook the Int 13h! 8CC0 MOV AX,ES A34E00 MOV [004E],AX ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Boh... It's far *too* simple now... 8-) FF0E1304 DEC WORD PTR [0413] ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Pay attention when searching for the date. B404 MOV AH,04 CD1A INT 1A ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;A hint: *never* use '413'. Is too suspicious, you will always be caught. A11304 MOV AX,[0413] BB4141 MOV BX,xxxx ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;It was a good idea to use a byte instead of the entire word. It *was* a ;good idea. 8-) C6061304xx MOV BYTE PTR [0413],xx ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;And here is another '413' A11304 MOV AX,[0413] 2Dxxxx SUB AX,xxxx ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;Another again... A11304 MOV AX,[0413] 48 DEC AX ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;My god! Stop it! 8-) 832E1304xx SUB WORD PTR [0413],+xx ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- ;We are lucky, this is the last! 8-) A31304 MOV [0413],AX ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- Backdoors: ÄÄÄÄÄÄÄÄÄ- In VirStop there are also 2 very simple backdoors: you must only put one of these strings in your virus at its own offset: Offset String 002F CD10 0026 593F The two strings are located in the serial number and in the volume label, two zones generally not used by the body of the virus. When VirStop finds one of these strings it will stop immediately to scan the boot sector and you'll be free to use any string that you want in your virus. That's all! Happy coding to all from Dandler and b0z0!