Virus Labs & Distribution
VLAD #7 - Virstop Article


				  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!

- VLAD #7 INDEX -

ARTICLE.1_1      

Introduction
ARTICLE.1_2       Aims and Policies
ARTICLE.1_3       Greets
ARTICLE.1_4       Members/Joining
ARTICLE.1_5       Dist/Contact Info
ARTICLE.1_6       Hidden Area Info
ARTICLE.1_7       Coding the Mag

ARTICLE.2_1      

No Flags
ARTICLE.2_2       Goodbye Virus
ARTICLE.2_3       Boot Sector Tutorial
ARTICLE.2_4       STAOG Linux Virus
ARTICLE.2_5       Pow Boot Virus
ARTICLE.2_6       Wulf2
ARTICLE.2_7       Tbscan Internals

ARTICLE.3_1      

VLAD Viruses
ARTICLE.3_2       TVIR600
ARTICLE.3_3       Vecna Boot Virus
ARTICLE.3_4       Padania Virus
ARTICLE.3_5       HooDoo Virus
ARTICLE.3_6       Pandemonium Virus
ARTICLE.3_7       Black Lotus

ARTICLE.4_1      

Zip Virus
ARTICLE.4_2       Archive Infect
ARTICLE.4_3       Virstop Article
ARTICLE.4_4       Boza Makes Bontchev Barf Virus
ARTICLE.4_5       Killer Virus
ARTICLE.4_6       Muraroa End
ARTICLE.4_7       Mages Fury

About VLAD - Links - Contact Us - Main