home *** CD-ROM | disk | FTP | other *** search
/ TopWare Tools / TOOLS.iso / tools / top1576 / gepackt.exe / USERGUID.DOC < prev   
Encoding:
Text File  |  1993-05-25  |  81.5 KB  |  2,157 lines

  1.  
  2. Welcome to ANTIVIRAL TOOLKIT PRO
  3.            ─────────────────────
  4.  
  5. Welcome to Antiviral ToolKit Pro. This package can be used as conventional
  6. and/or professional (Pro) antiviral system.
  7.  
  8.  
  9.  Table of Contents
  10.  ────────────────────────────────────────────────────────────────────
  11.  
  12.  1.     Installation and getting started with -V
  13.  1.1    Using -V to detect and cure viruses
  14.  1.2    It seems that I catch infection. What can I do?
  15.  2.     Antiviral scanner/remover -V
  16.  2.1    Description and features
  17.  2.1.1. Main features
  18.  2.1.2. Main features of the Pro version
  19.  2.1.3. Main database features
  20.  2.2    -V command line options
  21.  2.3.   Interface and Menu commands
  22.  2.3.1. Scan commands  (Alt-S)
  23.  2.3.2. View commands (Alt+V)
  24.  2.3.3. Edit commands (ALt+E)   (Pro version)
  25.  2.3.4. Tools commands (Alt+T)
  26.  2.4.   Antiviral DataBase      (Pro version)
  27.  2.4.1. FILE record             (Pro version)
  28.  2.4.2. JMP record              (Pro version)
  29.  2.4.3. MEMORY record           (Pro version)
  30.  2.4.4. SECTOR record           (Pro version)
  31.  2.4.5. The Link of the Special Procedures  (Pro version)
  32.  2.5.   Help System
  33.  2.6.   Scan messages
  34.  3.     Antiviral resident monitor -D
  35.  3.1.   -D command line options
  36.  3.2.   -D messages
  37.  3.2.1. Virus detection
  38.  3.2.2. Changing and renaming of COM- and EXE-files
  39.  3.2.3. Memory and buffers check
  40.  3.2.4. Writing to disk at absolute address and formating disk
  41.  3.2.5. 'Dangerous' DOS functions call
  42.  3.2.6. The register window
  43.  3.3.   Memory map
  44.  4.     Antiviral utilities  -U.COM
  45.  4.1.   Using antiviral utilities  -U
  46.  4.2.   Menu "Utilities"  -U
  47.  4.2.1. The memory map  -U
  48.  4.2.2. The interrupt vectors  -U
  49.  4.2.3. Tracer  -U
  50.  4.2.4. Interceptor  -U
  51.  4.3.   Menu "Object"  -U
  52.  4.3.1. The hexadecimal memory/file/sector dump  -U
  53.  4.3.2. The disassembler  -U
  54.  4.4.   Menu "Setup"  -U
  55.  4.4.1. Get Info Status
  56.  
  57.  
  58.  
  59.  ────────────────────────────────────────────────────────────────────
  60.  1. Installation and getting started with -V
  61.  ────────────────────────────────────────────────────────────────────
  62.  
  63. The installation procedure is very simple. If you have the floppy disk with
  64. the package you should copy all the files from it to newly created
  65. subdirectory of your hard drive (for example "C:\-V") or use toolkit from
  66. the floppy. If you have packed file (which is downloaded from BBS for
  67. example) you should unpack it to the same subdirectory. After copying or
  68. unpacking the packet is ready to use.
  69.  
  70. This product is professional antiviral toolkit. It contains four main
  71. executable files:
  72.  
  73.  - antiviral scanner/remover -V.EXE;
  74.  - antiviral scanner/remover/database editor -VPRO.EXE;
  75.  - antiviral monitor -D.COM;
  76.  - antiviral utilities -U.COM.
  77.  
  78. If you are ordinary USER it's better to run antiviral scanner -V.EXE only.
  79. By running -V.EXE you can test your disk(s) for the viruses presence. The
  80. -V.EXE is integrated environment scanner. The control for -V.EXE is based
  81. on standard pop-up menus and dialog boxes. By pressing F1 key or by using
  82. Help menu you will get all the information needed.
  83.  
  84. If you are SYSTEM PROGRAMMER you can use the professional features of this
  85. package - the database editor, antiviral monitor and utilities which are
  86. used for detecting and analysis of new not known viruses.
  87.  
  88.  
  89.  1.1  Using -V to detect and cure viruses
  90.  ────────────────────────────────────────────────────────────────────
  91.  
  92. While running -V.EXE loads the antiviral database(s) at the first time and
  93. then test the system memory for the memory resident virus presence. Then
  94. the Test Dialog Box appears on the screen. Press ENTER key to test all your
  95. hard disks for the viruses or point the path of the files to test.
  96.  
  97. If you want to change the run-time options you should press Alt-S hot key
  98. for calling Setup Dialog Box.
  99.  
  100. For next testing you should press F9 key or select Scan|Test menu. For cure
  101. the infected files you should press Ctrl-F9 or select Scan|Cure menu.
  102.  
  103. To exit -V.EXE press the standard hot key Alt-X or select Scan|Exit menu.
  104.  
  105.  
  106.  1.2  It seems that I catch infection. What can I do?
  107.  ────────────────────────────────────────────────────────────────────
  108.  
  109. The first step is running -V.EXE for testing all the programs files
  110. (executable/batch/SYS/overlay) and sectors of your disks including
  111. floppies. If the infected files/sectors are found, run the Cure process.
  112.  
  113. If the viruses are not found it's better to scan the disks another time
  114. with enabled Display Warnings option in Setup Box. If -V.EXE displays a lot
  115. of the same warning messages you should call the system programmer or
  116. connect us or to upload one of these files to our BBS to analyze.
  117.  
  118. For more information see topic "Computer viruses detection and removal
  119. methods" of the -V.EXE Help system.
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  ────────────────────────────────────────────────────────────────────
  126.  2. Antiviral scanner/remover -V
  127.  ────────────────────────────────────────────────────────────────────
  128.  
  129. The -V.EXE antiviral tests and recovers files and disk Boot sectors
  130. infected by the viruses. You can read the list of the known viruses in
  131. APPENDIX A.
  132.  
  133.  
  134.  2.1 Description and features
  135.  ────────────────────────────────────────────────────────────────────
  136.  
  137. The -V.EXE antiviral checks:
  138.  - the system memory;
  139.  - files are pointed by user;
  140.  - the hard disk sectors containing Master Boot Record,
  141.  - the disk sectors containing Boot-sector;
  142.  - File Allocation Table;
  143.  
  144. Apart from this, a test for detecting viruses unknown to the program is
  145. carrying out; this allows to identify in due time about 90% of boot
  146. viruses and 50% of file viruses, not included in the antiviral program
  147. data base. The -V.EXE antiviral checks whether its own file has been
  148. modified, and if it is the case, reports about it.
  149.  
  150.  
  151.  2.1.1. Main features
  152.  ────────────────────────────────────────────────────────────────────
  153.  
  154. The main features are:
  155.  
  156. - the removing the viruses from the files and sectors. It's better to
  157. restore the infected files from the backup copies but if it's impossible
  158. the -V.EXE antiviral restores the infected objects in their original form
  159. (if it's possible) or in a form closest to the original one.
  160.  
  161. - the two modes of detection: the main mode and the slow mode. The main
  162. mode is a standard working mode and it's enough in most of cases. By using
  163. main mode the antiviral analyzes the file header and the addresses where
  164. the program flying is passing from the header. In some cases the viruses
  165. hit the files incorrect: they write themselves into the file and do not
  166. change the file header. In these cases the slow mode is using. The -V.EXE
  167. antiviral in the slow mode scans all the contents of the files.
  168.  
  169. - the test and disinfection of the system memory. It's recommended to boot
  170. from the virus-clean system floppy before testing the files and sectors
  171. for viruses. It's needed for the guaranteed absence the viruses in the
  172. memory because the memory resident virus can prevent for the file
  173. recovering and ever to infect the files are scanning. There are the memory
  174. resident viruses which waits for the antiviral program execution and when
  175. this antiviral is started these viruses damaged to disk sectors (see the
  176. viruses "Caz").
  177.  
  178. - the files and system sectors can be tested for the changes in their
  179. bodies by using control sum (CRC) algorithm. If on next testing the
  180. antiviral -V.EXE finds the differences between the old and new control
  181. sums then -V.EXE displays the message about the detected changes in the
  182. file/sector.
  183.  
  184. - the powerful Help-system that contains the full information about the
  185. viruses and the methods about the removing the viruses. It's possible to
  186. call demo-effects while reading the virus descriptions.
  187.  
  188. - the support of the mouse, screen format 43/50 lines for EGA/VGA
  189. adapters. The antiviral allows to change and save current options.
  190.  
  191.  
  192.  2.1.2. Main features of the Pro version
  193.  ────────────────────────────────────────────────────────────────────
  194.  
  195. The antiviral scanner/remover -V.EXE version Pro contains the antiviral
  196. database editor. By using this editor it's possible to append the
  197. antiviral records to the database. In these records the control for the
  198. virus searching and removing is describing. By using these records user
  199. can detect and remove the new unknown virus by one's own.
  200.  
  201. The antiviral database contains the 4 types of the records:
  202.  
  203.  JMP    - the calculation of the Entry Point into the file
  204.           (file viruses only);
  205.  FILE   - the methods of the detection/removing the file viruses;
  206.  SECTOR - the methods of the detection/removing the sector viruses;
  207.  MEMORY - the methods of the detection/removing the TSR viruses;
  208.  
  209. The database fields are appending in the half-automatically mode: it's
  210. enough to point where to search the virus, how to remove it, to point the
  211. infected file or the file containing the infected sector and the
  212. information about this virus will be inserted into the new database
  213. record.
  214.  
  215.  
  216.  2.1.3. Main database features
  217.  ────────────────────────────────────────────────────────────────────
  218.  
  219. The main database features are:
  220.  
  221. - using the virus control sums but not the virus mask. The checksums of
  222. the parts of the virus code are placing into the records but not the part
  223. of the code for comparing. This feature will decrease the size of the
  224. database and cause fast scanning;
  225.  
  226. - the several standard methods of the virus detection and removing. More
  227. than 10 standard methods of the virus removing causes the easy appending
  228. of the information about the new viruses into the database;
  229.  
  230. - dynamical linker of the special subroutines. This feature is using while
  231. detection and removing the viruses that use the encryption, nonstandard
  232. methods of file/sector/memory infection. In these cases it's enough to
  233. write own C or Assembler program that decrypts/remove the viruses, compile
  234. this program to OBJ-file and insert this OBJ-file into the database
  235. record. This special subroutine will be linked with main EXE-module and
  236. will be calling while processing the database record;
  237.  
  238. - the calls to external functions. The special subroutines that are
  239. appended to database can access external names (constants, functions,
  240. arrays and structures). The external names are dividing to standard (i.e.
  241. defined into the main EXE-module) and special (i.e. defined by user in one
  242. of the database records). So the viruses from one virus family that use
  243. one decryption manner can be decrypted by one special subroutine that
  244. called from the several records with different arguments. In this case
  245. it's needed to write one decryption subroutine, compile it, append it into
  246. the one of the database records and then it's enough to call this name
  247. from the database record.
  248.  
  249.  
  250.  
  251.  2.2 -V command line options
  252.  ────────────────────────────────────────────────────────────────────
  253.  
  254.  On calling from DOS -V.EXE supports the following format:
  255.  
  256.  -V [OPTIONS ...] [file or disk NAME]
  257.  
  258.  OPTIONS:
  259.  /T  To test files and sectors for presence of a virus (by default). In
  260.      this mode, searching for viruses and virus-like blocks in files and
  261.      disk boot sectors is carrying out. A virus in a file could be
  262.      detected only when the file has been really infected by the virus.
  263.  
  264.  /-  To recovering files and boot sectors infected by a virus. Infected
  265.      files and sectors are searching and recovering in this mode. Files
  266.      and sectors are recovering in their original form (if possible), or
  267.      in a form closest to the original one. The boot-sectors or MBR the
  268.      standard MS-DOS 5.0 are writing if it's impossible to restore the
  269.      original ones.
  270.  
  271.  /W[A] [filename]
  272.      To save in the protocol file (in -V.MSG by default) messages reported
  273.      in the scan window. /WA - to add messages to the already existing
  274.      file, otherwise the file will be deleted. Filename - the name of the
  275.      protocol file messages will be written into.
  276.  
  277.  /D    - Daily test (runs -V ones every day). For use in batch mode.
  278.  /M    - To skip memory test.
  279.  /P    - Not to test hard disk MBR.
  280.  /B    - Not to test disk Boot sector.
  281.  /F    - To test disks FATs.
  282.  /O    - Not to cure read-only files.
  283.  /S    - To turn off sound signal.
  284.  /Y    - To skip the dialogues. For using in batch mode.
  285.  /Q    - To exit to DOS after testing or cure, otherwise the main
  286.          antiviral menu will be invoked. For using in batch mode.
  287.  /?    - To show the command-line help.
  288.  
  289.  NAME: Names of files and disks to be tested and recovered. It is possible
  290.        to use in the filenames wildcard symbols '?' and '*'. When only the
  291.        name of a disk has been specified, for example 'A:', then all the
  292.        files with name extensions .COM, .EXE, .SYS, and .OV? of all the
  293.        directories of the specified disk will be tested or cured. If
  294.        "A:*.COM" is specified, all the .COM-files of all the directories
  295.        of disk A: will be tested or cured; if A:\DOS\*.COM is specified -
  296.        then all the files on disk A: of the directory \DOS will be cured
  297.        or tested. If "*:*.*" is specified then all the files of all the
  298.        disks (from the C: drive) and directories will be tested.
  299.  
  300.  
  301. For example, on typing the instruction
  302.  
  303.  -V /T /W C:*.* D:\MY_PROG\*.EXE D:*.COM /Y /Q
  304.  
  305. all the files on disk C: will be tested, then all .EXE-files of disk D: of
  306. directory \MY_PROG, and thereafter all .COM files on disk D:. The work
  307. register will be written into the file -V.MSG. Once the test is performed
  308. return to DOS occurs.
  309.  
  310.  
  311.  
  312.  
  313.  2.3. Interface and Menu commands
  314.  ────────────────────────────────────────────────────────────────────
  315.  
  316. This program have standard Turbo-Vision user interface. Press F10 to
  317. activate menu system. Use right-left up-down and enter keys to select item.
  318. These submenu available with menu:
  319.  
  320.     Scan  (Alt+S)
  321.     View  (Alt+V)
  322.     Edit  (ALt+E)  (Pro version)
  323.     Tools (Alt+T)
  324.  
  325.  
  326.  
  327.  
  328.  2.3.1. Scan commands  (Alt-S)
  329.  ────────────────────────────────────────────────────────────────────
  330.  
  331. With the Scan menu, you can test or cure your files.
  332.  
  333.  Scan│Test (F9)
  334.  ────────────────────────────────────────────────────────────────────
  335. With the Test command, you can test pointed objects for the virus
  336. presence. Start dialog appears before test or cure scanning:
  337.  
  338.  ╔═[■]═════════════ Test ══════════════════╗
  339.  ║                                         ║
  340.  ║   Mask _c:____________________  ▐▌     ║
  341.  ║                                         ║
  342.  ║                                         ║
  343.  ║        OK   ▄   Setup  ▄   Cancel ▄     ║
  344.  ║      ▀▀▀▀▀▀▀▀   ▀▀▀▀▀▀▀▀   ▀▀▀▀▀▀▀▀     ║
  345.  ╚═════════════════════════════════════════╝
  346.  
  347. In the Mask field you should type one or more path strings that are used
  348. while scanning. The Mask field can include wildcard ('?' and '*'
  349. characters), the subdirectories names, the logical drive names. The MBR
  350. and Boot sectors are tested if that object is set as 'checked' in Setup
  351. Dialog. The subdirectories are testing if these objects are set as
  352. 'checked' in Setup Dialog also.
  353.  
  354.  For example:
  355.  
  356.  C:\COMMAND.COM - scan file C:\COMMAND.COM
  357.  C:\*.COM       - scan all COM-files
  358.  C:*.*          - scan all files from drive C:
  359.  C: D: E:*.COM  - scan all files with default extensions from C: and D:
  360.                   then scan all COM-files from E:
  361.  *:             - scan all files with default extensions from
  362.                   logical disks (C:, D:, ...)
  363.  
  364. After object pointing press OK. Some messages will appears in the
  365. information windows.
  366.  
  367.  
  368.  Scan│Cure (Ctrl+F9)
  369.  ────────────────────────────────────────────────────────────────────
  370. With the Cure command, you can test pointed objects on virus presents and
  371. cure ones.
  372.  
  373. Request Dialog appears, if virus detected while curing, and set Request
  374. for cure in Setup:
  375.  
  376.  ╔═[■]═════════════ Cure Request ═════════════════╗
  377.  ║                                                ║
  378.  ║  File:   E:\VIRUS\v.com                        ║
  379.  ║                                                ║
  380.  ║  Virus:  Yankee-2C                             ║
  381.  ║                                                ║
  382.  ║      Cure    ▄     Delete   ▄      Skip    ▄   ║
  383.  ║    ▀▀▀▀▀▀▀▀▀▀▀    ▀▀▀▀▀▀▀▀▀▀▀    ▀▀▀▀▀▀▀▀▀▀▀   ║
  384.  ║    Cure All  ▄    Delete All▄     Cancel   ▄   ║
  385.  ║    ▀▀▀▀▀▀▀▀▀▀▀    ▀▀▀▀▀▀▀▀▀▀▀    ▀▀▀▀▀▀▀▀▀▀▀   ║
  386.  ╚════════════════════════════════════════════════╝
  387.  
  388. Commands are:
  389.  Cure        - cure this file
  390.  Cure All    - cure all files without request
  391.  Delete      - delete infected file
  392.  Delete All  - delete all infected files
  393.  Skip        - skip curing this file
  394.  Cancel      - cancel scanning
  395.  
  396.  
  397.  Scan│RAMCure
  398.  ────────────────────────────────────────────────────────────────────
  399. With the RAMCure command you can cure the memory parts of the viruses.
  400. This operation can be performed automatically at the start of the program.
  401.  
  402.  Scan│Cure & make CRC
  403.  ────────────────────────────────────────────────────────────────────
  404. With the Cure & make CRC command you can remove the viruses and create the
  405. CRC table at the same time. The CRC check is in use if the Use CRC option
  406. of the Setup is set on. It allows to check modification of the file/sector
  407. and to accelerate scanning about 2 times when CRC table was made.
  408.  
  409.  Scan│Setup
  410.  ────────────────────────────────────────────────────────────────────
  411. Setup command brings Setup Dialog, and you can tune different options if
  412. needed.
  413.  
  414.  ╔═[■]══════════════════ Scan Setup ══════════════════════╗
  415.  ║                                                        ║
  416.  ║        Mask _c:_______________________  ▐▌            ║
  417.  ║                                                        ║
  418.  ║   Default extensions      Options                      ║
  419.  ║    () Programs            [X] Scan Subdirectories     ║
  420.  ║    ( ) All files           [ ] Warnings                ║
  421.  ║    ( ) User defined:       [X] Cure Readonly           ║
  422.  ║        _exe,com_____       [X] Request for cure        ║
  423.  ║                            [ ] Use CRC                 ║
  424.  ║   Objects                  [ ] Slow search             ║
  425.  ║    [X] MBR                 [X] Beep                    ║
  426.  ║    [X] Boot                [X] Auto test dialog        ║
  427.  ║    [ ] FAT                                             ║
  428.  ║    [X] Files              Memory options               ║
  429.  ║    [X] Memory              [X] Check Interrupts        ║
  430.  ║                            [ ] Check Buffers           ║
  431.  ║                                                        ║
  432.  ║             OK   ▄       Save  ▄      Cancel ▄         ║
  433.  ║           ▀▀▀▀▀▀▀▀      ▀▀▀▀▀▀▀▀      ▀▀▀▀▀▀▀▀         ║
  434.  ╚════════════════════════════════════════════════════════╝
  435.  
  436.  Mask
  437. In this field you should type one or more path strings that are used for
  438. scan procedure. The Mask field can include wildcard characters '?' and
  439. '*', the subdirectories names, the logical drive names.
  440.  
  441.  Default extension
  442. The files that have these extensions would be tested by default (when the
  443. file extensions not pointed directly in the Mask field). The default
  444. extensions are: *.bat, *.com, *.exe, *.ov?, *.sys.
  445.  
  446.  Object
  447. The list of the objects for scanning: MBR (Master Boot Record), Boot (boot
  448. sector), FAT (File Allocation Table), Memory (RAM) and Files.
  449.  
  450.  Options:
  451.  - scan subdirectories
  452.  - display scan warnings (default off)
  453.  - cure files, that have Read Only attribute
  454.  - display request before cure
  455.  - use CRC table to detect object modification
  456.  - slow search: scan all file's body instead entry point (default off)
  457.  - beep: sound control
  458.  - call Test directly after program loading
  459.  
  460.  Save
  461. Save the setup settings into the configuration file -V.INI.
  462.  
  463.  
  464.  Scan│Save Report
  465.  ────────────────────────────────────────────────────────────────────
  466. Save Report command brings Report Dialog. You can save scan information in
  467. the text file or print it.
  468.  
  469.  ╔═[■]════════════════ Report ════════════════════╗
  470.  ║                                                ║
  471.  ║  To  ( ) Printer          [X] Statistics       ║
  472.  ║      () File             [X] Scan info        ║
  473.  ║      E:\APP\-V.msg        [ ] Check up info    ║
  474.  ║                                                ║
  475.  ║               OK   ▄       Cancel ▄            ║
  476.  ║             ▀▀▀▀▀▀▀▀       ▀▀▀▀▀▀▀▀            ║
  477.  ╚════════════════════════════════════════════════╝
  478.  
  479. Switch 'To' is used for direct report to printer or file
  480.  
  481. Switches:
  482.  [X] Statistics     - include statistic information in report
  483.  [X] Scan info      - include scan information in report
  484.  [ ] Check up info  - include information about uninfected objects in report
  485.  
  486.  
  487.  Scan│Dos Shell
  488.  ────────────────────────────────────────────────────────────────────
  489. With the DOS Shell command, you can leave the program temporarily to
  490. perform a DOS command or run another program. To return to this program,
  491. type EXIT at the DOS prompt.
  492.  
  493.  
  494.  Scan│Exit       (Alt+X)
  495.  ────────────────────────────────────────────────────────────────────
  496. The Exit command terminates the program -V.EXE. The program terminates
  497. automatically after scanning if command line includes the /Q option.
  498.  
  499.  
  500.  
  501.  
  502.  2.3.2. View commands (Alt+V)
  503.  ────────────────────────────────────────────────────────────────────
  504.  
  505. The View menu contains commands to close, move and perform other
  506. window-management commands.
  507.  
  508. The most of the windows in this program support all the standard window
  509. elements including scroll bars, the close box and the zoom icons.
  510.  
  511.  
  512.  
  513.  View│Scan Window     (F7)
  514.  ────────────────────────────────────────────────────────────────────
  515. Choose Scan Window to open the window which is used for the output of the
  516. main scan information and the messages. This window opens automatically
  517. when you start to check the files/sectors/memory.
  518.  
  519.  View│Check Up Window     (Alt+F7)
  520.  ────────────────────────────────────────────────────────────────────
  521. Choose Check Up Window to open the window which is used for the output
  522. "OK" information. This window opens automatically when you start check the
  523. files/sectors/memory.
  524.  
  525.  View│Statistics
  526.  ────────────────────────────────────────────────────────────────────
  527. Choose Statistics to view scan statistic information. This info appears
  528. after scanning.
  529.  
  530.  View│Clear Messages
  531.  ────────────────────────────────────────────────────────────────────
  532. Choose Clear Messages to clear all the messages in both of the Scan and
  533. Check Up windows.
  534.  
  535.  View│25/50 Lines  (Alt+F9)
  536.  ────────────────────────────────────────────────────────────────────
  537. Choose 25/50 Lines to change mode of the screen.
  538.  
  539.  View│Zoom     (F5)
  540.  ────────────────────────────────────────────────────────────────────
  541. Choose Zoom to resize the active window to the maximum size. If the window
  542. is already zoomed, you can choose this command to restore it to its
  543. previous size.
  544.  
  545. You can also double-click anywhere on the window's title bar (except where
  546. an icon appears) to zoom or unzoom the window.
  547.  
  548.  View│Next      (F6)
  549.  ────────────────────────────────────────────────────────────────────
  550. Choose Next to cycle forwards through the windows on the desktop.
  551.  
  552.  View│Close      (Alt+F3)
  553.  ────────────────────────────────────────────────────────────────────
  554. Choose Close to close the active window. You can also click the Close box
  555. in the upper right corner to close a window.
  556.  
  557.  View│Resize      (Ctrl+F5)
  558.  ────────────────────────────────────────────────────────────────────
  559. Choose Resize to resize and move the active window. Use UP,DN,LT,RT to
  560. move, SHIFT-(UP,DN,LT,RT) to resize window. Press ENTER when done.
  561.  
  562.  
  563.  
  564.  
  565.  2.3.3. Edit commands (ALt+E)   (Pro version)
  566.  ────────────────────────────────────────────────────────────────────
  567.  
  568. Submenu Edit used for manipulating with virus bases.
  569.  
  570.  
  571.  Edit│Open Base (F3)     (Pro version)
  572.  ────────────────────────────────────────────────────────────────────
  573. The Open Base command displays the Open Base dialog box. With this dialog
  574. box you can select the base to edit with Base Editor. With Base Editor you
  575. can edit base.
  576.  
  577. Keys:
  578.         Up,Dn,PgUp,PgDn - moving through records
  579.         Ins             - new record
  580.         Del             - delete record
  581.         Ctrl+Ins        - get record into clipboard
  582.         Ctrl+Del        - cut record into clipboard
  583.         Shift+Ins       - paste record from clipboard
  584.  
  585. Select record and press ENTER. Form Dialog appears. With Form Dialog you
  586. can modify different fields in record. Use TAB to move through fields.
  587.  
  588.  Edit│Close Base         (Pro version)
  589.  ────────────────────────────────────────────────────────────────────
  590. The Close Base command used for save and close the base.
  591.  
  592.  Edit│Save Base (F2)     (Pro version)
  593.  ────────────────────────────────────────────────────────────────────
  594. The Save Base command used for save the base.
  595.  
  596.  Edit│Save All (Ctrl+F2) (Pro version)
  597.  ────────────────────────────────────────────────────────────────────
  598. The Save All command used for save all opened bases.
  599.  
  600.  Edit│Cut  (Shift+Del)   (Pro version)
  601.  ────────────────────────────────────────────────────────────────────
  602. The Cut command used for cut record into clipboard. You can use Paste
  603. command to paste record from clipboard.
  604.  
  605.  Edit│Copy (Ctrl+Ins)    (Pro version)
  606.  ────────────────────────────────────────────────────────────────────
  607. The Copy command used for copy record into clipboard. You can use Paste
  608. command to paste record from clipboard.
  609.  
  610.  Edit│Paste (Shift+Ins)  (Pro version)
  611.  ────────────────────────────────────────────────────────────────────
  612. The Paste command used for paste record from clipboard. You can use Copy
  613. command to copy record into clipboard and Cut command to cut record into
  614. clipboard.
  615.  
  616.  Edit│Active Bases (F4)  (Pro version)
  617.  ────────────────────────────────────────────────────────────────────
  618. The Active Bases command brings Set dialog box. With Set Dialog you can
  619. edit set of base active during scan.
  620.  
  621. Keys:
  622.         Up,Dn,PgUp,PgDn - moving through line
  623.         Ins             - new line
  624.         Del             - delete line
  625.  
  626.  
  627.  
  628.  
  629.  2.3.4. Tools commands (Alt+T)
  630.  ────────────────────────────────────────────────────────────────────
  631.  
  632. The Tools menu contains commands to run utilities, to backup and restore
  633. system area.
  634.  
  635.  
  636.  Tools│Backup system area
  637.  ────────────────────────────────────────────────────────────────────
  638. Choose Backup system area to make reserve copy of the system area of the
  639. computer ( CMOS info, MBR (HD 0), Boot sector (Active partition)).
  640.  
  641. This copy makes file -V.SBK (Drive A:).(Rescue disk)
  642.  
  643. To restore system area in case of infection by unknown virus choose
  644. Restore system area command.
  645.  
  646.  
  647.  Tools│Restore system area
  648.  ────────────────────────────────────────────────────────────────────
  649. Choose Restore system area to restore the system area of the computer (
  650. CMOS info, MBR (HD 0), Boot sector (Active partition)) from reserve copy
  651. in case of infection by unknown virus.
  652.  
  653. Reserve copy must be previously made with Backup system area command.
  654.  
  655. This copy makes file -V.SBK (Drive A:).(Rescue disk)
  656.  
  657.  
  658.  Tools│Utilities
  659.  ────────────────────────────────────────────────────────────────────
  660. This command used for launching Antiviral utilities for analyze system
  661. area of the computer.
  662.  
  663.  
  664.  
  665.  
  666.  2.4. Antiviral DataBase      (Pro version)
  667.  ────────────────────────────────────────────────────────────────────
  668.  
  669. Antiviral DataBase (DB) is the file which contains the records of the
  670. several different types. The main types of records are: MEMORY, SECTOR,
  671. JMP, FILE. The object codes and the comment are the additional types of
  672. the records.
  673.  
  674. The control sums are using for virus detection instead the conventional
  675. signatures. The using of DB is based on the several standard methods of
  676. the detection and the cure. There is the possibility of attaching the
  677. object code files into the records by using the function Link. It needs if
  678. the virus uses nonstandard methods of the infection or if it is
  679. self-encrypted.
  680.  
  681. The MEMORY records contain the information for the search procedure and
  682. the deactivating for the memory resident viruses. The SECTOR records
  683. contain information for the searching and removing the viruses from the
  684. sectors.  The FILE records contain information for the searching and
  685. removing the viruses from the files. Records of type JMP is used for the
  686. virus entry point calculation. For EXE files JMP record calculates the
  687. start address of module, for SYS files it calculates the STRATEGY &
  688. INTERRUPT subroutines addresses, for COM files it analyzes the code of the
  689. beginning of the file.  Windows EXE-files are tested at two addresses - at
  690. the entry address of DOS-part of the module and at the address of the
  691. Windows main entry point.
  692.  
  693. Two control sums are used in the SECTOR and FILE records: rough (on small
  694. length code) and final (on large length code). The MEMORY record contains
  695. one sum only.
  696.  
  697. Antiviral -V.EXE puts the code of the file or the sector into internal
  698. logical pages (blocks of memory). Next pages used: HEADER, PAGE_A, PAGE_B,
  699. PAGE_C.  Page HEADER contains the tested sector (400h bytes) or 400h bytes
  700. of the code of the beginning of the file. Pages PAGE_A and PAGE_B are
  701. filled while file is processing. Algorithm of filling of these pages
  702. described in JMP records.
  703.  
  704. Page PAGE_C used by the special (decrypt or cure) subroutines. There is
  705. another one virtual page, named FILE. It isn't a block of memory. Elements
  706. of page FILE has signed offsets. Null address of page FILE equals to file
  707. entry point.
  708.  
  709. For appending the information about new virus into DB it needs: to select
  710. the type of new record, to type name of virus, to fill other fields of
  711. form, to point search and remove methods and to use SUM command of the
  712. form for calculation of the control sums. If you describe virus that
  713. haven't the code which is useful for calculating the sums ("polymorphic")
  714. then it's needed to set the length of the first control sum to zero and
  715. link the object code of the decryptor by LINK command of the form. In this
  716. case you should calculate the second control sum in PAGE_C.
  717.  
  718. Attention! All the digits in all the fields are hexadecimal.
  719.  
  720.  
  721.  
  722.  
  723.  2.4.1. FILE record             (Pro version)
  724.  ────────────────────────────────────────────────────────────────────
  725.  
  726.  Fields
  727.  ======
  728.  Type           the type of the record (COM or/and EXE or/and SYS or/and WIN)
  729.  Name           the virus name
  730.  Page_1         the page for the control sum 1
  731.  Offset_1       the offset for the control sum 1
  732.  Len_1          the length for the control sum 1
  733.  Sum_1          the control sum 1
  734.  
  735.  Page_2         the page for the control sum 2
  736.  Offset_2       the offset for the control sum 2
  737.  Len_2          the length for the control sum 2
  738.  Sum_2          the control sum 2
  739.  
  740.  Cure_Method    the remove method
  741.  Cure_Page      the page for the cure method
  742.  Cure_Data_1    the cure data
  743.  Cure_Data_2    the cure data
  744.  Cure_Data_3    the cure data
  745.  Cure_Data_4    the cure data
  746.  Cure_Cut       the number of the bytes to cut file
  747.  Tail           the tail length
  748.  
  749.  Commands
  750.  ========
  751.  Link      calls dialog for attach the object code to the record
  752.  Sum       calls dialog for calculate the control sums
  753.  
  754.  
  755.  The record processing algorithm
  756.  ===============================
  757. The file is dispatched by the JMP records (the calculation of the EP,
  758. EP_Next values, filling the HEADER, PAGE_A, PAGE_B pages) before calling
  759. the virus check loop.
  760.  
  761. The check loop processes all the file records. For each file record the
  762. first control sum is calculated (on page pointed by the field Page_1 from
  763. Offset_1 on Len_1 bytes). This sum is compared with the value from the
  764. field Sum_1. If these values are equal then the second control sum is
  765. calculated (on page pointed by field Page_2 from Offset_2 on Len_2 bytes).
  766. The decode procedure is calling before the second control sum calculation
  767. if that procedure presents in linked module.
  768.  
  769. If the second control sum is equal to the Sum_2 field then -V.EXE removes
  770. the viruses according to the method pointed in the field Cure_Method.  The
  771. fields Cure_Page, Cure_Data_1, Cure_Data_2, Cure_Data_3, Cure_Data_4,
  772. Cure_Cut are used for removing the virus. The field Tail (the length from
  773. entry point to end of file) used as the control value. The field Cure_Page
  774. used for pointing the page from which the data for cure is getting with
  775. the offsets Cure_Data_x. If Cure_Page=FILE then the data for cure is
  776. getting from the tested file with the offsets EP+Cure_Data_x. The
  777. Cure_Data_x fields are signed.
  778.  
  779.  
  780.  The Cure Methods
  781.  ================
  782.  
  783.  MOVE and LEHIGH
  784.  ---------------
  785. These methods repair the first bytes of the file. It used against the
  786. viruses that append themselves to end of the file and correct the file
  787. beginning.
  788.  
  789.  Repairing:
  790.  
  791. Cure_Data_2 bytes are copying to beginning of the file with offset
  792. Cure_Data_3 from page, pointed by Cure_Page with offset Cure_Data_1. If
  793. the file is the COMMAND.COM file then it fill file with 0 from the
  794. Entry_Point minus Cure_Cut offset to the end of the file, else it sets the
  795. file length to the Entry_Point minus Cure_Cut offset. The Cure_Data_4
  796. field is not using.
  797.  
  798.  
  799.  JERUSALEM
  800.  ---------
  801. It used against the viruses witch write themselves into the file beginning
  802. and shift the file body.
  803.  
  804.  Repairing:
  805.  
  806. The file is moved to the beginning on Cure_Data_1 bytes. The file length
  807. is decreased by Cure_Data_1 + Cure_Cut bytes. The Cure_Page, Cure_Data_2,
  808. Cure_Data_3, Cure_Data_4 fields are not using.
  809.  
  810.  
  811.  START
  812.  -----
  813. It used against viruses witch write themselves into the file beginning and
  814. move the original beginning to the end of the file.
  815.  
  816.  Repairing:
  817.  
  818. The file length is decreased by Cure_Cut bytes, then the part of the code
  819. is moved from the end of file to the beginning. If the file length is less
  820. than Cure_Data_1*2, then it moves File_Length minus Cure_Data_1 bytes
  821. (File_Length after decreasing by Cure_Cut bytes), else is moves
  822. Cure_Data_1 bytes and the file length is decreased by Cure_Data_1 bytes.
  823. The Cure_Page, Cure_Data_2, Cure_Data_3, Cure_Data_4 fields are not using.
  824.  
  825.  
  826.  EXE_CISS, EXE_CISS_10, EXE_CIS, EXE_CIS_10, EXE_CI, EXE_CI_10
  827.  -------------------------------------------------------------
  828. EXE-file header repair methods
  829.  
  830.  EXE_CISS - repair the values of all the header register fields (CS,IP,SS,SP)
  831.  EXE_CIS  - repair the values of CS, IP and SS header register fields
  832.  EXE_CI   - repair the values of CS and IP header register fields
  833.  
  834. EXE_CISS_10, EXE_CIS_10, EXE_CI_10 methods are equal to listed above with
  835. one exception: the CS and SS header register fields are decreased by 10h
  836. before restoring.
  837.  
  838. The values of the header register fields for all the Pages except FILE:
  839.  
  840.  CS - word ptr Cure_Page[Cure_Data_1]
  841.  IP - word ptr Cure_Page[Cure_Data_2]
  842.  SS - word ptr Cure_Page[Cure_Data_3]
  843.  SP - word ptr Cure_Page[Cure_Data_4]
  844.  
  845. Cure_Data_x are unsigned.
  846.  
  847. The values for the header register fields if Cure_Page=FILE:
  848.  
  849.  CS - word ptr File[EP+Cure_Data_1]
  850.  IP - word ptr File[EP+Cure_Data_2]
  851.  SS - word ptr File[EP+Cure_Data_3]
  852.  SP - word ptr File[EP+Cure_Data_4]
  853.  
  854. Cure_Data_x are signed.
  855.  
  856. The file length is decreased by EP minus Cure_Cut bytes. The EXE-module
  857. size fields of EXE-header are corrected too.
  858.  
  859.  
  860.  SYS_SI and SYS_I
  861.  ----------------
  862. SYS-file header repair methods
  863.  
  864.  SYS_SI  - repair the value of the Strategy and Interrupt header fields
  865.  SYS_I   - repair the value of the Interrupt header field
  866.  
  867. The values for the header fields:
  868.  
  869.  Strategy   - word ptr Cure_Page[Cure_Data_1]
  870.  Interrupt  - word ptr Cure_Page[Cure_Data_2]
  871.  
  872.  
  873.  DELETE
  874.  ------
  875. It deletes the infected file.
  876.  
  877.  
  878.  SPECIAL
  879.  -------
  880. For the complex methods if the virus uses the encryption or the stealth
  881. algorithm the standard methods are not allowed. In this situation you
  882. should write the special procedure to cure the virus, then compile it and
  883. attach the object code to the record by Link command.
  884.  
  885.  
  886.  Example
  887.  =======
  888.  
  889. The COM-file is infecting by the virus "Tiny".
  890.  
  891. On infection this virus appends to file 4 bytes of beginning of the file,
  892. then it appends 140 bytes of the virus body, then it modifies the first
  893. four bytes of the file (jmp to the virus body):
  894.  
  895.  4D             DEC  PB
  896.  E9 xx xx       JMP  NEAR Loc_Virus
  897.  
  898. It needs to register new JMP record, because the code of the virus jump is
  899. not standard:
  900.  
  901. JMP record:
  902.  
  903.  Name           Tiny
  904.  Len_1          02
  905.  Sum_1          xxxxxxxx  <<< sum is calculated with Sum command by example
  906.  Offset_2       00
  907.  Len_2          00
  908.  Sum_2          00
  909.  Jmp_Method     OFFSET
  910.  Jmp_Data       02
  911.  
  912. Then you should register new FILE record:
  913.  
  914.  Type           COM
  915.  Name           Tiny
  916.  Page_1         PAGE_A
  917.  Offset_1       00
  918.  Len_1          08
  919.  Sum_1          xxxxxxxx  <<< sum is calculated with Sum command by example
  920.  Page_2         PAGE_A
  921.  Offset_2       00
  922.  Len_2          40
  923.  Sum_2          xxxxxxxx  <<< sum is calculated with Sum command by example
  924.  Cure_Method    MOVE
  925.  Cure_Page      FILE
  926.  Cure_Data_1   -04
  927.  Cure_Data_2    04
  928.  Cure_Data_3    00
  929.  Cure_Data_4    00
  930.  
  931.  Cure_Cut       -04
  932.  Tail            8C
  933.  
  934.  
  935.  
  936.  
  937.  2.4.2. JMP record              (Pro version)
  938.  ────────────────────────────────────────────────────────────────────
  939.  
  940.  Fields
  941.  ======
  942.  Name           the name of the record (information field)
  943.  Len_1          the length for the control sum 1
  944.  Sum_1          the control sum 1
  945.  Offset_2       the offset for the control sum 2
  946.  Len_2          the length for the control sum 2
  947.  Sum_2          the control sum 2
  948.  
  949.  Jmp_Method     the method of jump
  950.  Jmp_Data       the data for jump method
  951.  
  952.  
  953.  Commands
  954.  ========
  955.  Link      calls dialog for attach the object code to the record
  956.  Sum       calls dialog for calculate the control sums
  957.  
  958.  
  959.  The record processing algorithm
  960.  ===============================
  961. The file is dispatched by the JMP records (the calculation of the EP,
  962. EP_Next values, filling the HEADER, PAGE_A, PAGE_B pages) before calling
  963. the virus check loop.
  964.  
  965. After the file opening the 400h bytes from the file beginning are red into
  966. the pages Header and Page_A. The contents of other pages are set to zero.
  967. After that -V.EXE run the JMP loop for detecting the file entry point
  968. (EP).  The first control sum on Len_1 bytes of the page Header is
  969. calculated for each JMP record. This value is compared with the value of
  970. the field Sum_1.  If these values are equal then the second control sum in
  971. the page Header from Offset_2 on Len_2 bytes is calculated. If the second
  972. control sum is equal to the value of the Sum_2 field then the value of EP
  973. is calculated according to the method which is pointed by the field
  974. Jmp_Method with data from the field Jmp_Data. The 400h bytes of the code
  975. from the file at the offset EP are red into the page Page_A.
  976.  
  977. This procedure repeats one time for filling EP_Next and Page_B by using
  978. the page Page_A instead of the page Header.
  979.  
  980.  
  981.  The EP Calculation Methods
  982.  ==========================
  983.  
  984.  OFFSET
  985.  ------
  986. It used to dispatch the commands like:
  987.  
  988.  xxxx:0100  E9 xx xx     JMP  NEAR Loc_Virus
  989.  .... ....
  990.  
  991.  xxxx:0100  E8 xx xx     CALL NEAR Loc_Virus
  992.  .... ....
  993.  
  994. or the instruction combinations like:
  995.  
  996.  xxxx:0100  90           NOP
  997.  xxxx:0101  E9 xx xx     JMP  NEAR Loc_Virus
  998.  .... ....
  999.  
  1000. The EP value is calculated as address of command, where control is passed
  1001. to by instruction JMP NEAR or CALL NEAR.
  1002.  
  1003.  EP = word ptr Header[Jmp_Data] + Jmp_Data + 2.
  1004.  
  1005.  
  1006.  ADDRESS
  1007.  -------
  1008. It used to dispatch the commands of the COM-files like:
  1009.  
  1010.  xxxx:0100  68 xx xx     PUSH OFFSET Vir_Loc
  1011.  xxxx:0103  C3           RET
  1012.  .... ....
  1013.  
  1014.  xxxx:0100  B8 xx xx     MOV  AX, OFFSET Vir_Loc
  1015.  xxxx:0103  FF D0        CALL AX
  1016.  .... ....
  1017.  
  1018. The EP value is calculated as the address of command, where control passed
  1019. to by the RET/JMP/CALL instruction.
  1020.  
  1021.  EP = word ptr Header[Jmp_Data] - 0100h.
  1022.  
  1023.  
  1024.  DATA
  1025.  ----
  1026. It used to dispatch commands of the COM-files like:
  1027.  
  1028.  xxxx:0100  FF 26 04 01  JMP  WORD PTR [0104]
  1029.  xxxx:0104  xx xx        DW   Vir_Offset
  1030.  .... ....
  1031.  
  1032.  EP = word ptr File [Jmp_Data] - 0x100.
  1033.  
  1034.  
  1035.  SPECIAL
  1036.  -------
  1037. For complex commands the standard methods are not allowed. In that
  1038. situation you should write the special procedure to calculate EP, then
  1039. compile it and attach the object code to the record by the Link command.
  1040. The dispatch of the EXE-file header and the short jumps instruction use
  1041. SPECIAL methods.
  1042.  
  1043.  
  1044.  Example
  1045.  =======
  1046.  
  1047. The code of the infected file beginning:
  1048.  
  1049.  0000 90          NOP
  1050.  0001 90          NOP
  1051.  0002 E9 xx xx    JMP   Virus
  1052.  
  1053. The fields filling:
  1054.  
  1055.  Name            nop_nop_jmp
  1056.  Len_1           0003
  1057.  Sum_1           xxxxxxxx  <<< sum is calculated with Sum command by example
  1058.  Offset_2        0000
  1059.  Len_2           0003
  1060.  Sum_2           xxxxxxxx  <<< sum is calculated with Sum command by example
  1061.  Jmp_Method      OFFSET
  1062.  Jmp_Data        0003
  1063.  
  1064.  
  1065.  
  1066.  2.4.3. MEMORY record           (Pro version)
  1067.  ────────────────────────────────────────────────────────────────────
  1068.  
  1069.  Fields
  1070.  ======
  1071.  Name           the virus name
  1072.  Method         the search method
  1073.  Segment        the value of the segment Segm (method ADDRESS)
  1074.  Offset_1       the offset value for search
  1075.  Control_Byte   the control byte
  1076.  Len_1          the length for the control sum 1
  1077.  Sum_1          the control sum 1
  1078.  
  1079.  Offset_2       the offset of the replace code
  1080.  Len_2          the length of the replace data ( <5 )
  1081.  Replace_Bytes  the bytes for replacing
  1082.  
  1083.  
  1084.  Commands
  1085.  ========
  1086.  Link      calls dialog for attach the object code to the record
  1087.  Sum       calls dialog for calculate the control sums
  1088.  
  1089.  
  1090.  The record processing algorithm
  1091.  ===============================
  1092. -V.EXE scans the set of the addresses Segm:Offs according to the Method
  1093. field. For each of the addresses it compares the byte of the system memory
  1094. at the address Segm:Offs + Offset_1 with the value of the Contol_Byte
  1095. field. If these value are equal then it calculates the control sum at the
  1096. address Segm:Offs + Offset_1 on the Len_1 bytes. If the control sum is
  1097. equal to the Sum field then -V.EXE displays the message and replaces the
  1098. Len_2 bytes from Segm:Offs+Offset_2 by the sequence of the bytes from the
  1099. Replace_Bytes field.
  1100.  
  1101.  
  1102.  The Search Methods
  1103.  ==================
  1104.  
  1105.  ADDRESS
  1106.  -------
  1107. The search at one fixed address. Segm and Offs are pointed by the field.
  1108. The value of Offs is equal to the zero.
  1109.  
  1110.  
  1111.  CUT
  1112.  ---
  1113. The search in the memory that is 'cut' from DOS. The Segm value is changed
  1114. from the end of the Z block of DOS memory blocks till A000h by increasing
  1115. by the one. The value of Offs is equal to the zero.
  1116.  
  1117.  
  1118.  MCB
  1119.  ---
  1120. The search in the DOS memory blocks. The Segm value is changed in the
  1121. segment addresses of all the MCB blocks. The value of Offs is equal to the
  1122. zero. Attention! The Segm value is equals to the address of memory block
  1123. body, not to the address of the memory CONTROL block (MCB).
  1124.  
  1125.  
  1126.  TRACE
  1127.  -----
  1128. The tracing the interrupts 21h and 13h. The values of Segm:Offs are
  1129. changed in the list of the address where of all the over-segment jumps.
  1130.  
  1131.  
  1132.  SCAN
  1133.  ----
  1134. The scanning of the memory. The Segm value is changed from 0000h till
  1135. segment address of -V.EXE by increasing by one. The value of Offs is equal
  1136. to the zero.
  1137.  
  1138.  
  1139.  FULL_SCAN
  1140.  ---------
  1141. The full scan of the memory. The Segm value is changed from 0000h till
  1142. A000h by increasing by one. The value of Offs is equal to the zero.
  1143.  
  1144.  
  1145.  SPECIAL
  1146.  -------
  1147. The special search and removing procedure is called if this method is
  1148. pointing. You should write the special procedure, compile it and attach
  1149. the object code to the record by the Link command if you point this
  1150. method.
  1151.  
  1152.  
  1153.  Example
  1154.  =======
  1155.  
  1156. The code in infected system memory:
  1157.  
  1158.  1234:0123 80 FC 3D    CMP   AH,3Dh
  1159.  1234:0126 74 xx       JE    Infect_File
  1160.  1234:0128 E9 xx xx    JMP   Continue
  1161.  1234:012B . . . .     . . . . .
  1162.  
  1163.  The first deactivation method:  TRACE
  1164.  -------------------------------------
  1165.  
  1166. The fields filling:
  1167.  
  1168.  Method          TRACE
  1169.  Segment         0000
  1170.  Offset_1        0000
  1171.  Control_Byte    80
  1172.  Len_1           8
  1173.  Sum             xxxxxxxx  <<< sum is calculated by the Sum command
  1174.  Offset_2        3
  1175.  Len_2           2
  1176.  Replace_Bytes   90 90
  1177.  
  1178. The code in the memory after curing:
  1179.  
  1180.  1234:0123 80 FC 3D     CMP   AH,3Dh
  1181.  1234:0126 90           NOP
  1182.  1234:0127 90           NOP
  1183.  1234:0128 E9 xx xx     JMP   Continue
  1184.  1234:012B . . . .      . . . . .
  1185.  
  1186.  
  1187.  The second deactivation method:  MCB
  1188.  ------------------------------------
  1189.  
  1190. The fields filling:
  1191.  
  1192.  Method          MCB
  1193.  Segment         0000
  1194.  Offset_1        0123
  1195.  Control_Byte    80
  1196.  Len_1           8
  1197.  Sum             xxxxxxxx  <<< sum is calculated by the Sum command
  1198.  Offset_2        0126
  1199.  Len_2           2
  1200.  Replace_Bytes   90 90
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  2.4.4. SECTOR record           (Pro version)
  1206.  ────────────────────────────────────────────────────────────────────
  1207.  
  1208.  Fields
  1209.  ======
  1210.  Type           the type of the record (BOOT and/or MBR)
  1211.  Name           the virus name
  1212.  Offset_1       the offset for the control sum 1
  1213.  Len_1          the length for the control sum 1
  1214.  Sum_1          the control sum 1
  1215.  
  1216.  Page_2         the page for the control sum 2
  1217.  Offset_2       the offset for the control sum 2
  1218.  Len_2          the length for the control sum 2
  1219.  Sum_2          the control sum 2
  1220.  
  1221.  Cure_Method    the remove method
  1222.  Cure_Page      the page for the cure method
  1223.  
  1224.  Cure_Addr_A    the cure data
  1225.  Cure_Addr_B    the cure data
  1226.  Cure_Offset    the cure data
  1227.  
  1228.  Commands
  1229.  ========
  1230.  Link      calls dialog for attach the object code to the record
  1231.  Sum       calls dialog for calculate the control sums
  1232.  
  1233.  
  1234.  The record processing algorithm
  1235.  ===============================
  1236. On the scanning the tested sector is red into the page Header (400h
  1237. bytes).  The contents of other pages is set to zero before running the
  1238. detection loop. The first control sum is calculated in the page Header
  1239. from Offset_1 on Len_1 bytes. If the first control sum is equal to the
  1240. Sum_1 value then the second control sum is calculated in page which is
  1241. pointed by Page_2 field from Offset_2 on Len_2 bytes. The decode procedure
  1242. is called before calculating the second control sum, if this procedure
  1243. presents in linked module. If the second control sum is equal to the Sum_2
  1244. field then -V.EXE removes the virus according to method which is pointed
  1245. in the field Cure_Method. The Cure_Addr_A, Cure_Addr_B, Cure_Offset fields
  1246. are used for removing the virus.
  1247.  
  1248. The address of the sector (Boot or MBR) can be pointed by two methods: the
  1249. physical address (head,track§or -- two arguments) or the logical
  1250. address (the number of the sector of the logical disk -- one argument).
  1251. These methods use different interrupts.
  1252.  
  1253.  Addressing      Sector address                 Interrupt
  1254.  ---------       -------------                  ---------
  1255.  logical        logical sector - CX             int 25h/26h
  1256.  physical       track and sector - CX           int 13h
  1257.                 head  - DH
  1258.  
  1259.  
  1260.  The Cure Methods
  1261.  ================
  1262.  
  1263.  ADDRESS
  1264.  -------
  1265. The absolute addressing is used. The original MBR or Boot sector is
  1266. copying from the disk sector at the absolute address Cure_Addr_A/Cure_Addr_B
  1267. (track§or/head or CX/DH in the int 13h format). The fields Cure_Page
  1268. and Cure_Offset are not using.
  1269.  
  1270.  
  1271.  ABSOLUTE
  1272.  --------
  1273. The absolute addressing is used. The original MBR or Boot sector is
  1274. copying from the disk sector at the absolute address CX/DH in the int 13h
  1275. format, where CX and DH values are got from the page Cure_Page:
  1276.  
  1277.  CX = word ptr Cure_Page [Cure_Addr_A] + Cure_Offset
  1278.  DH = byte ptr Cure_Page [Cure_Addr_B]
  1279.  
  1280.  
  1281.  LOGICAL
  1282.  -------
  1283. It is the same as the ABSOLUTE method except the addressing method.  The
  1284. logical addressing is used:
  1285.  
  1286.  CX = word ptr Cure_Page [Cure_Addr_A] + Cure_Offset
  1287.  
  1288. The Cure_Addr_B field is not used.
  1289.  
  1290.  
  1291.  DELETE
  1292.  ------
  1293. The standard MBR or Boot sector is placed into the disk sector.
  1294.  
  1295. ATTENTION! This method can be dangerous if the disk has been formatted
  1296. with not standard utilities.
  1297.  
  1298.  
  1299.  SPECIAL
  1300.  -------
  1301. For the complex methods when the virus uses the encryption or the stealth
  1302. algorithm the standard methods are not allowed. In this situation you
  1303. should write the special procedure to cure virus, then compile it and
  1304. attach the object code into the record by the Link command.
  1305.  
  1306.  
  1307.  Example:
  1308.  ========
  1309.  
  1310. The Boot sector has been infected by the "Stone" virus. That virus saves
  1311. the original Boot sector in the absolute sector at the address 3/1
  1312. (sector/head).
  1313.  
  1314. Fields filling:
  1315.  
  1316.  Type          BOOT
  1317.  Name          Stone
  1318.  Offset_1      00
  1319.  Len_1         08
  1320.  Sum_1         xxxxxxxx   <<< sum is calculated with Sum command by example
  1321.  Program_Flag  NO
  1322.  
  1323.  Page_2        HEADER
  1324.  Offset_2      15
  1325.  Len_2         80
  1326.  Sum_2         xxxxxxxx   <<< sum is calculated with Sum command by example
  1327.  
  1328.  Cure_Method   ADDRESS
  1329.  Cure_Page     FILE
  1330.  
  1331.  Cure_Addr_A   03
  1332.  Cure_Addr_B   01
  1333.  Cure_Offset   00
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  2.4.5. The Link of the Special Procedures  (Pro version)
  1339.  ────────────────────────────────────────────────────────────────────
  1340.  
  1341. The special procedures that are attached to the records in the antiviral
  1342. database. They are used for detection and removing the difficult viruses
  1343. that use nonstandard infection methods or the self-encryption algorithms.
  1344. The special procedures may be written on C, assembler and other languages
  1345. that support C standard of the calling subroutines. Turbo or Borland C
  1346. compilers are recommended.
  1347.  
  1348. You can attach the special procedures to the records of the antiviral
  1349. database after compiling it to the object module. The attached code would
  1350. be reading from database and linked with the main program -V.EXE during
  1351. loading the database. On scanning the main program would use these
  1352. procedures as well as the own internal subroutines. We recommend the SMALL
  1353. model for compiling the source modules if there is no static data into,
  1354. and the HUGE model if the static data presents. The using of TINY model is
  1355. disabled. For example, the compiling FILENAME.C to FILENAME.OBJ with
  1356. Borland C carry out with the command:
  1357.  
  1358.  bcc -mh -c -K filename.c
  1359.  
  1360.  
  1361.  The standard names of the procedures
  1362.  ────────────────────────────────────
  1363. One or two procedures with standard names (like 'main' in C) must be
  1364. present in the linked module. There are three standard names:
  1365.  
  1366.  decode()  {procedure body} // the decryption procedure
  1367.  cure()    {procedure body} // the removing procedure
  1368.  jmp()     {procedure body} // the procedure for detecting the entry point
  1369.  
  1370. The names 'decode' and 'cure' can be used together or separately in FILE
  1371. and SECTOR records. In TSR records can be used 'cure' procedure only. In
  1372. JMP records can be used 'jmp' procedure only.
  1373.  
  1374.  
  1375.  
  1376.  The using of the external names
  1377.  ───────────────────────────────
  1378. The special procedures can use the external procedures and data. Before
  1379. access to this names it's needed to describe those names as external.  The
  1380. names which are defined in main program can be accessed from any special
  1381. procedure.
  1382.  
  1383. The access to the external names that are defined in other linked module
  1384. is available if the record with the definition is placed BEFORE the record
  1385. with the call to the external name.
  1386.  
  1387.  Correct example:
  1388.  
  1389.  Record Cascade-1701: define Decode_Cascade(...) {...}
  1390.                       call   Decode_Cascade(...)
  1391.  
  1392.  Record Cascade-1704: call   Decode_Cascade(...)
  1393.  
  1394.  
  1395.  Incorrect example:
  1396.  
  1397.  Record Cascade-1701: call   Decode_Cascade(...)
  1398.  
  1399.  Record Cascade-1704: define Decode_Cascade(...) {...}
  1400.                       call   Decode_Cascade(...)
  1401.  
  1402.  
  1403. Names of external constant, data and functions (defined in DLINK.H) you
  1404. can find in APPENDIX D.
  1405.  
  1406.  
  1407.  
  1408.  
  1409.  2.5. Help System
  1410.  ────────────────────────────────────────────────────────────────────
  1411.  
  1412. Context sensitive Help is available any time except scanning by pressing F1.
  1413.  
  1414.  Effects demonstration
  1415.  ═════════════════════
  1416. Some of the viruses call the sound or video effects. These effects are
  1417. extracted from the virus bodies and included into the effect demonstration
  1418. database. It needs to press Alt-D in the Help windows for call the
  1419. demonstration, if this demonstration presents. To exit from demonstration
  1420. it needs to press ESC.
  1421.  
  1422. List of help topics with demo effects attached placed in APPENDIX C.
  1423.  
  1424. Some of viruses or the families of viruses call several effects. In this
  1425. case it needs to press SPACE key to see or hear next demonstration. It
  1426. needs to press the SPACE key for accelerate the moving some of the
  1427. demonstration, for example, for demonstration of the letters falling by
  1428. "Cascade" viruses.
  1429.  
  1430. Attention! Some of the viruses cause not dangerous changes of the system
  1431. parameters while executing effects, for example, the timer value, the
  1432. value of some ports, etc. This can cause the incorrect executing of the
  1433. next effects.
  1434.  
  1435. The demonstration of some video effects can be executed correct under
  1436. certain conditions, for example, on VGA or HERCULES monitor only. The
  1437. executing of this demonstration on the wrong type of adapter can cause the
  1438. hang-up of the computer. Recommended VGA adapter for executing the video
  1439. demonstrations.
  1440.  
  1441.  
  1442.  
  1443.  2.6. Scan messages
  1444.  ────────────────────────────────────────────────────────────────────
  1445.  
  1446.  : virus NAME detected.
  1447. Virus NAME is detected in this file/sector. For remove that virus you must
  1448. run scan in CURE mode. Cure (Ctrl+F9).
  1449.  
  1450.  : virus NAME cured.
  1451. Virus NAME is removed from this file/sector, TSR part is removed from the
  1452. memory.
  1453.  
  1454. It is not necessary to reboot the computer after the session with - V.EXE
  1455. if presence of a virus in RAM was reported, but recommended for security.
  1456.  
  1457.  : virus NAME cure failed.
  1458. This file/sector is infected with the virus incorrectly and curing can
  1459. destroy this file/sector. This message appears if the file/sector is
  1460. placed on write protect disk also.
  1461.  
  1462.  : virus NAME cure skipped.
  1463. The curing of the file/sector is skipped by user.
  1464.  
  1465.  : virus NAME cure cancelled.
  1466. The curing of the file/sector is cancelled by user.
  1467.  
  1468.  : file killed
  1469. This file destroyed by the virus.
  1470.  
  1471.  : virus ? warning.
  1472. The combination of the instructions that could possibly belong to a new
  1473. unknown virus has been found. These messages can be pointed to not
  1474. infected files/sectors/memory often. These messages are not confirm that
  1475. this object is really infected by the virus. It's need be careful if:
  1476.  
  1477. - the popular files are listed as 'warning': the DOS utilities, the files
  1478. from the well-known environment like a Norton Commander, XTree etc.
  1479.  
  1480. - the files which not been listed as 'warning' yesterday, but are listed
  1481. today.
  1482.  
  1483. - if a lot of the files listed with similar "tail" - the length from entry
  1484. point to the file till the file end.
  1485.  
  1486. The 'warning' messages are disabled by default. See Setup.
  1487.  
  1488.  
  1489.  : virus NAME warning. (TAIL)
  1490. The combination of instructions that could possibly belong to the known
  1491. virus 'NAME' has been found. These messages are pointing to files/sectors
  1492. those are infected by new modification of the old virus often.
  1493.  
  1494.  : EXE file but COM extension.
  1495. The format of the file and the file name extension are different.
  1496.  
  1497.  : pseudobad cluster NUMBER
  1498. The normal cluster marked as corrupted has been found on disk. These
  1499. messages are displaying when the drive infected by the Boot-virus or the
  1500. drive has the bad sectors.
  1501.  
  1502.  : I/O error.
  1503. The disk is write protected or the file is read-only and the switch 'Cure
  1504. read only' is disabled in the Setup.
  1505.  
  1506.  : no free memory.
  1507. The low of memory. The testing is impossible. It's needed about 512K of
  1508. free memory for 'Antiviral Toolkit Pro' (you can use DOS utility MEM for
  1509. checking the free memory size).
  1510.  
  1511.  : trace warning at xxxx:xxxx
  1512. Interrupt 13h or/and 21h handler(s) contains "virus-like" instruction.
  1513. This message is a first signal of virus infection often. In some cases
  1514. this message displayed when the some uninfected programs are present in
  1515. the memory, for example the popular utility RELEASE.
  1516.  
  1517. If the 'trace warning' displayed it is need to find out the program that
  1518. causes this message. It's needed to analyze the memory map at the address
  1519. where the message pointed. Next method is to comment by the REM
  1520. instruction different commands in the files AUTOEXEC.BAT and CONFIG.SYS,
  1521. while the message appears.
  1522.  
  1523. Attention! Some of the resident viruses stop the tracing. They reset or
  1524. hang-up the computer while tracing. It is need be careful because if the
  1525. computer hangs up while tracing it can indicate that the memory resident
  1526. virus presents in the RAM.
  1527.  
  1528.  : Buffers warning: Config.sys:N1, really:N2
  1529. This is a message displayed during analysis of the number of system
  1530. buffers. You should be careful if the number of system buffers and the
  1531. number of buffers of CONFIG.SYS file are different because the virus can
  1532. hit the DOS system areas.
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538.  
  1539.  ────────────────────────────────────────────────────────────────────
  1540.  3. Antiviral resident monitor -D
  1541.  ────────────────────────────────────────────────────────────────────
  1542.  
  1543.  
  1544. The monitor -D.COM is a memory resident 'lie detector' allowing to detect
  1545. all suspicious actions of the computer. Using -D.COM it is possible to
  1546. stop spreading of a computer virus on the earliest stage.  Apart from this
  1547. the monitor may be helpful when you work with programs suspicious for
  1548. presence of a virus or a "trojan horse" and develop memory resident
  1549. programs. The detector lets to monitor the computer memory allocation
  1550. (window "Memory map" in the main menu of the monitor), and, by this way
  1551. allow to detect memory-resident viruses in due time. Using the menu of the
  1552. monitor it is possible to choose which possible suspicious situations the
  1553. monitor should respond to.
  1554.  
  1555. The main -D functions are:
  1556.  
  1557.  - detection of the infected files and disk sectors;
  1558.  - control for the changing and renaming of executable
  1559.    programs (.COM- and .EXE-files);
  1560.  - control for the writing to disk at absolute address and disk
  1561.    formatting;
  1562.  - control for the appearance of resident programs;
  1563.  - control for some dangerous DOS functions.
  1564.  
  1565. Apart from this -D.COM controls RAM allocation and status of some DOS
  1566. system areas.
  1567.  
  1568. On "suspicious" behavior of the computer, -D.COM displays a warning
  1569. message (a window containing detailed information appears on the screen)
  1570. and waits for the command allowing or prohibiting intended action.
  1571. Complete list of the displayed messages is giving bellow.
  1572.  
  1573. The main menu is calling by pressing both keys Alt and '-' at the same
  1574. time, to quit it press ESC key. On calling the menu two windows appear on
  1575. the screen: mode setting window and memory map window.
  1576.  
  1577.  ╔═════════════════╦══════════════════╤═════════════════╤═══════════╗
  1578.  ║Access to files √║  Total: 640 K    │ ROM BIOS: 640 K │DOS: 640 K ║
  1579.  ║Memory check    √╠════╤════╤═══════╤╧═══════════╤═════╧═══════════╣
  1580.  ║Format sector   √║MCB │PSP │ Size  │   Owner    │ Hooked vectors  ║
  1581.  ║Write to sector √╟────┼────┼───────┼────────────┼─────────────────╢
  1582.  ║Dangerous calls √║0A49│0A49│  2,368│COMMAND.COM │2E               ║
  1583.  ║Virus check     √║0ADE│0000│     64│   free     │                 ║
  1584.  ║Registers       √║0AE3│0A49│    256│COMMAND.COM │                 ║
  1585.  ║Remove -D        ║0AF4│0B00│    176│RTSR.COM    │                 ║
  1586.  ╚═════════════════╣0B00│0B00│  1,536│RTSR.COM    │                 ║
  1587.  ░░░░░░░░░░░░░░░░░░║0B61│0B6D│    176│PRN2FILE.EXE│                 ║
  1588.  ░░░░░░░░░░░░░░░░░░║0B6D│0B6D│ 75,104│PRN2FILE.EXE│08 17 28 ED F0 F6║
  1589.  ░░░░░░░░░░░░░░░░░░║    │    │       │            │FF               ║
  1590.  ░░░░░░░░░░░░░░░░░░║1DC4│1DD0│    176│-D.COM      │                 ║
  1591.  ░░░░░░░░░░░░░░░░░░║1DD0│1DD0│ 57,888│-D.COM      │09 13 1B 20 21 22║
  1592.  ░░░░░░░░░░░░░░░░░░║    │    │       │            │2A 2F 40 EE      ║
  1593.  ░░░░░░░░░░░░░░░░░░║2BF3│2BFE│    160│NC.EXE      │                 ║
  1594.  ░░░░░░░░░░░░░░░░░░║2BFE│2BFE│ 12,896│NC.EXE      │                 ║
  1595.  ░░░░░░░░░░░░░░░░░░║2F25│2F31│    176│NCMAIN.EXE  │                 ║
  1596.  ░░░░░░░░░░░░░░░░░░║2F31│2F31│179,744│NCMAIN.EXE  │24 30            ║
  1597.  ░░░░░░░░░░░░░░░░░░║5B13│0000│282,304│   free     │FE               ║
  1598.  ░░░░░░░░░░░░░░░░░░║A000│  - │ 98,304│EGA memory  │                 ║
  1599.  ░░░░░░░░░░░░░░░░░░║B800│  - │ 32,768│CGA memory  │                 ║
  1600.  ░░░░░░░░░░░░░░░░░░╚════╧════╧═══════╧════════════╧═════════════════╝
  1601.  
  1602. The mode setting window displays information about detection modes
  1603. corresponding to suspicious operations, and is used for their resetting
  1604. (ENTER or RETURN keys).
  1605.  
  1606. To switch off or switch on the modes you could rerun -D.COM. The monitor
  1607. finds in the computer memory its copy loaded earlier and passes to it the
  1608. arguments specified in the command line:
  1609.  
  1610.  
  1611.  
  1612.  3.1. -D command line options
  1613.  ────────────────────────────────────────────────────────────────────
  1614. The format of calling -D.COM from DOS prompt or BAT-file is:
  1615.  
  1616.  C:>-D [arguments list]
  1617.  
  1618. Possible arguments:
  1619.  -A - disable control for the accessing to executable files
  1620.  -M - disable memory checking
  1621.  -F - disable control for formatting
  1622.  -W - disable control for absolute disk writing
  1623.  -R - disable registers window
  1624.  -D - disable control for the dangerous calls
  1625.  -V - disable virus detection
  1626.  
  1627. If the arguments list is empty then all the modes are switched on. For
  1628. example, on initializing the monitor by the string
  1629.  
  1630.  C:>-D -A -F -R
  1631.  
  1632. all modes will be activated except the control for the executable files and 
  1633. control for the disk formatting. The register window is closed.
  1634.  
  1635.  C:>-D -V
  1636.  
  1637. It the '-V' argument presents then the antiviral database is not loading
  1638. into the memory and the monitor occupies low part of memory, but activate
  1639. this feature later you can only by reload of the -D.
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  3.2. -D messages
  1645.  ────────────────────────────────────────────────────────────────────
  1646.  
  1647.  "Suspicious" situations and the -D monitor messages list
  1648.  ════════════════════════════════════════════════════════
  1649. Monitor -D displays the warning message and waits for the command allowing
  1650. or cancel the access to this file or sector when the virus detected into
  1651. the file or disk sector. On "suspicious" behavior of the computer, -D.COM
  1652. displays a warning message (a window containing detailed information
  1653. appears on the screen) and waits for the command allowing or prohibiting
  1654. intended action. Complete list of the messages is giving below.
  1655.  
  1656.  ┌────────────────────────────┐
  1657.  │ PROGRAM_NAME               │
  1658.  │ warning message            │
  1659.  │                            │
  1660.  │ [ OK ] [ Cancel ] [ Free ] │
  1661.  └────────────────────────────┘
  1662. After receiving one of the messages listed below it is necessary either to
  1663. allow (OK) or disallow (Cancel) the operation that the message has been
  1664. referred to. It's possible to disable the control for this function
  1665. (Free). On receiving the permission, the computer will continue execution
  1666. of the operation. On forbidding the operation -D.COM display error message
  1667. (e.g., "file not found", "disk is write protected", etc.) and return to
  1668. the program witch has called the "suspicious" operation. If the calling
  1669. program does not check the execution of the operation, then the result of
  1670. its further work is not predicted.
  1671.  
  1672. Some operations are executed repeatedly (for example while performing disk
  1673. formatting or optimization). In that case it is convenient to turn off,
  1674. for the time being, the corresponding mode, the messages concerning the
  1675. switched off operation would not be displayed (for example on disk
  1676. formatting it is expedient to switch off the formatting test mode). To
  1677. switching off the mode one should call the main menu, answer 'Free' for
  1678. the monitor request or restart the monitor.
  1679.  
  1680.  
  1681.  3.2.1. Virus detection
  1682.  ────────────────────────────────────────────────────────────────────
  1683. The monitor controls the accessing to executable files and disk sectors
  1684. and checks these objects for the known viruses. If the virus found the
  1685. virus then the monitor displays one of the messages:
  1686.  
  1687.  ┌──────────────────────────────┐  ┌──────────────────────────────┐
  1688.  │ Disk X:                      │  │ File FILE_NAME               │
  1689.  │ infected by virus VIRUS_NAME │  │ infected by virus VIRUS_NAME │
  1690.  └──────────────────────────────┘  └──────────────────────────────┘
  1691.  
  1692. Attention! The antiviral database records that contain the calls to
  1693. special subroutines (the LINK field of the database editor contains the
  1694. text "decode proc") are skipping by the monitor. All the viruses that use
  1695. the decryption are not detected by the monitor.
  1696.  
  1697.  
  1698.  3.2.2. Changing and renaming of COM- and EXE-files
  1699.  ────────────────────────────────────────────────────────────────────
  1700. These messages will appear during operations that result in changes of COM
  1701. or EXE files (change of the name, opening for writing, creation of a
  1702. file). Such actions are taken by practically all viruses (except
  1703. boot-viruses) on an attempt to infect files.
  1704.  
  1705.  ┌───────────────────────────────┐
  1706.  │ PROGRAM_NAME                  │
  1707.  │ opening for writing FILE_NAME │
  1708.  └───────────────────────────────┘
  1709.  ┌────────────────────┐
  1710.  │ PROGRAM_NAME       │
  1711.  │ creating FILE_NAME │
  1712.  └────────────────────┘
  1713.  ┌────────────────────┐
  1714.  │ PROGRAM_NAME       │
  1715.  │ renaming FILE_NAME │
  1716.  └────────────────────┘
  1717.  
  1718.  
  1719.  3.2.3. Memory and buffers check
  1720.  ────────────────────────────────────────────────────────────────────
  1721. Many viruses leave in the computer memory their resident part, some of
  1722. them use for this purpose DOS interrupts. In this case the message that a
  1723. program attempts to go memory-resident will be displayed.
  1724.  
  1725.  ┌─────────────────────────────┐
  1726.  │ PROGRAM_NAME stays resident │
  1727.  └─────────────────────────────┘
  1728.  
  1729. Some of viruses install their resident part into the system buffers by
  1730. excluding some of the buffers from the buffer list. The monitor checks
  1731. this and display the message:
  1732.  
  1733.  ┌────────────────────────────────────────┐
  1734.  │ Number of DOS buffers decreased on xxx │
  1735.  └────────────────────────────────────────┘
  1736.  
  1737. Majority of viruses installs their resident part in the memory area
  1738. allocated for programs, decreasing by this the size of free memory. The
  1739. monitor hooks such situations and displays the message:
  1740.  
  1741.  ┌────────────────────────────────┐
  1742.  │ Free memory decreased on xxx K │
  1743.  └────────────────────────────────┘
  1744.  
  1745. When the mode "Memory check" is switched on, the monitor restores the
  1746. interrupt vector table after each program is terminated. This blocks
  1747. majority of memory-resident viruses from spreading, and some viruses will
  1748. be simply destructed.
  1749.  
  1750.  
  1751.  3.2.4. Writing to disk at absolute address and formating disk
  1752.  ────────────────────────────────────────────────────────────────────
  1753.  
  1754.  ┌─────────────────────────────┐
  1755.  │ PROGRAM_NAME                │
  1756.  │ writing (int xx) on disk X: │
  1757.  └─────────────────────────────┘
  1758.  ┌─────────────────────────────┐
  1759.  │ PROGRAM_NAME                │
  1760.  │ formatting (int xx) disk X: │
  1761.  └─────────────────────────────┘
  1762.  
  1763. These messages inform that the routine "program_name" tries to write on
  1764. disk one or several sectors using absolute sector addressing on disk, or
  1765. to format one or several disk sectors. These functions practically are not
  1766. using by ordinary programs (except of utilities of disk formatting,
  1767. optimization, and restoring), but are used by some viruses.  The use of
  1768. the 13h, 40h, 26h interrupts is one of the most effective ways of
  1769. corrupting information on a disk, particularly - Disk Partition Table and
  1770. File Allocation Table.
  1771.  
  1772. Attention! In the message about writing onto disk or formatting disk
  1773. sectors with 13h and 40h interrupts being used, the number of physical
  1774. disk ('A:' first, 'B:'- second and so on) that is indicated. If the hard
  1775. disk is divided into several logical disks then in the message the number
  1776. of PHYSICAL disk is indicated: 'C:', if the first hard disk is being
  1777. addressed, 'D:' - in case the second hard disk is being addressed. To find
  1778. out what logical disk is being written to, it is necessary to analyze Disk
  1779. Partition Tables on all logical disks.
  1780.  
  1781.  
  1782.  3.2.5. 'Dangerous' DOS functions call
  1783.  ────────────────────────────────────────────────────────────────────
  1784.  ┌────────────────┐
  1785.  │ PROGRAM_NAME   │
  1786.  │ dangerous call │
  1787.  └────────────────┘
  1788.  
  1789. Messages of this kind warn that there is dangerous call to DOS that is not
  1790. typical for application programs. Dangerous DOS functions are often used
  1791. by viruses to spread in the system.
  1792.  
  1793.  
  1794.  3.2.6. The register window
  1795.  ────────────────────────────────────────────────────────────────────
  1796. As 'registers' mode is switched on, monitor messages will be accompany by
  1797. the list of all registers states.
  1798.  
  1799.  ┌────────────────────────────┬───────────────────────────────────┐
  1800.  │ PROGRAM_NAME               │ CS:IP=xxxx:xxxx  AX=xxxx  CX=xxxx │
  1801.  │ dangerous call             │ SS:SP=xxxx:xxxx  BX=xxxx  DX=xxxx │
  1802.  │                            │ DS:SI=xxxx:xxxx      BP=xxxx      │
  1803.  │ [ OK ] [ Cancel ] [ Free ] │ ES:DI=xxxx:xxxx      Flags=xxxx   │
  1804.  └────────────────────────────┴───────────────────────────────────┘
  1805.  
  1806.  
  1807.  3.3. Memory map
  1808.  ────────────────────────────────────────────────────────────────────
  1809.  Memory map contains five columns:
  1810.  
  1811.  the first  - segment address of MCB (Memory Control Block);
  1812.  the second - PSP (Program Segment Prefix) segment address,
  1813.  the third  - block size in paragraphs (16 bytes) or kilobytes;
  1814.  the fourth - the name of a program occupying the memory block, or the
  1815.               character '?' if there is no name.
  1816.  fifth      - interrupt vectors being used.
  1817.  
  1818.  Also are specified:
  1819.  
  1820.  free memory size        ──────────────────────────────┐
  1821.  RAM size, indicated by BIOS    ────────────────────┐  │
  1822.  RAM size           ─────────────────────────────┐  │  │
  1823.                                                  │  │  │
  1824.  Discrepancy between total memory size ("Total") │  │  │
  1825.  and the size indicated by ROM BIOS or DOS       │  │  │
  1826.  signals there is a virus in the system often.   │  │  │
  1827.  One should bear in mind, that in some cases     │  │  │
  1828.  this discrepancy is quite legal.                │  │  │
  1829.                         ┌────────────────────────┘  │  └──┐
  1830.                         │                ┌──────────┘     │
  1831.  ╔═════════════════╦════│══════════╤═════│════════════╤═══│═════════╗
  1832.  ║Access to files √║  Total: 640 K │  ROM BIOS: 640 K │DOS: 637 K ? ║
  1833.  ║Memory check    √╠════╤════╤═════╧═╤════════════╤═══╧═════════════╣
  1834.  ║Format sector   √║MCB │PSP │ Size  │   Owner    │ Hooked vectors  ║
  1835.  ║Write to sector √╟────┼────┼───────┼────────────┼─────────────────╢
  1836.  ║Dangerous calls √║0A49│0A49│  2,368│COMMAND.COM │2E               ║
  1837.  ║Virus check     √║0ADE│0000│     64│   free     │                 ║
  1838.  ║Registers       √║0AE3│0A49│    256│COMMAND.COM │                 ║
  1839.  ║Remove -D        ║0AF4│0B00│    176│RTSR.COM    │                 ║
  1840.  ╚═════════════════╣0B00│0B00│  1,536│RTSR.COM    │                 ║
  1841.  ░░░░░░░░░░░░░░░░░░║0B61│0B6D│    176│PRN2FILE.EXE│                 ║
  1842.  ░░░░░░░░░░░░░░░░░░║0B6D│0B6D│ 75,104│PRN2FILE.EXE│08 17 28 ED F0 F6║
  1843.  ░░░░░░░░░░░░░░░░░░║    │    │       │            │FF               ║
  1844.  ░░░░░░░░░░░░░░░░░░║1DC4│1DD0│    176│-D.COM      │                 ║
  1845.  ░░░░░░░░░░░░░░░░░░║1DD0│1DD0│ 57,888│-D.COM      │09 13 1B 20 22 23║
  1846.  ░░░░░░░░░░░░░░░░░░║    │    │       │            │2F 40 EE         ║
  1847.  ░░░░░░░░░░░░░░░░░░║2BF3│2BFE│    160│NC.EXE      │                 ║
  1848.  ░░░░░░░░░░░░░░░░░░║2BFE│2BFE│ 12,896│NC.EXE      │                 ║
  1849.  ░░░░░░░░░░░░░░░░░░║2F25│2F31│    176│NCMAIN.EXE  │                 ║
  1850.  ░░░░░░░░░░░░░░░░░░║2F31│2F31│179,744│NCMAIN.EXE  │24 30 31         ║
  1851.  ░░░░░░░░░░░░░░░░░░║5B13│0000│279,296│   free     │FE               ║
  1852.  ░░░░░░░░░░░░░░░░░░║9F44│  - │  3,008│    ?       │1C 21 ────┐      ║
  1853.  ░░░░░░░░░░░░░░░░░░║A000│  - │ 98,304│EGA memory  │          │      ║
  1854.  ░░░░░░░░░░░░░░░░░░╚════╧════╧═══════╧════════════╧══════════│══════╝
  1855.                                                              │
  1856.                                   File virus "Yankee" ───────┘
  1857.  
  1858.  
  1859.  
  1860.  
  1861.  
  1862.  
  1863.  
  1864.  
  1865.  
  1866.  ────────────────────────────────────────────────────────────────────
  1867.  4. Antiviral utilities  -U.COM
  1868.  ────────────────────────────────────────────────────────────────────
  1869.  
  1870. Antiviral utilities comprise
  1871.  
  1872.  - dump, disassembler and editor of the system memory,
  1873.    files and disk sectors;
  1874.  - the system memory map;
  1875.  - list of interrupt vectors states;
  1876.  - interrupt tracer and interceptor.
  1877.  
  1878. The utilities are intended to analyze the computer state if it is infected
  1879. by a virus that is unknown to the program -V.EXE. The viruses are very
  1880. useful for checking "purity" of the RAM.  -U.COM is invoked either from
  1881. the command line in non-resident mode or by pressing hot key on the
  1882. memory-resident mode. The resident part of -U.COM is calling by pressing
  1883. Alt-'+' or Alt-Ctrl-'+' at the same time.
  1884.  
  1885. For executing -U.COM in memory resident mode it's needed to set switch /P
  1886. in the command line:
  1887.  
  1888.  -U /P
  1889.  
  1890.  
  1891.  
  1892.  4.1. Using antiviral utilities  -U
  1893.  ────────────────────────────────────────────────────────────────────
  1894.  
  1895. The utilities are calling through the  menu 'Utilities' and by pressing
  1896. the keys:
  1897.  
  1898.  Alt-D   Hexadecimal dump of the current object
  1899.  Alt-A   Disassembler of the current object
  1900.  Alt-M   Memory map
  1901.  Alt-I   Interrupts vector map
  1902.  Alt-R   CPU window - all the CPU registers
  1903.  
  1904. The -U interface allows to change the position and the size of all windows
  1905. except the 'Register' window. The control keys are:
  1906.  
  1907.  F5:          Zoom current window
  1908.  Ctrl-F5:     Resize/move current window: LEFT, RIGHT, UP, DOWN - move,
  1909.               SHIFT-LEFT, SHIFT-RIGHT, SHIFT-UP, SHIFT-DOWN - resize
  1910.  Alt-F3:      Close current window
  1911.  Alt-U:       Exit to "Utilities" menu
  1912.  Alt-O:       Switch to menu "Object"
  1913.  Alt-S:       Switch to menu "Setup"
  1914.  Alt-X, F10:  Exit
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  4.2. Menu "Utilities"  -U
  1920.  ───────────────────────────────────────────────────────────────
  1921.  ┌──────────────────┐
  1922.  │ Memory map Alt-M │ Call to the memory map
  1923.  │ Interrupts Alt-I │ Call to the interrupt vector table map
  1924.  │ Dump       Alt-D │ Call to the dump of the current object
  1925.  │ Disassem   Alt-A │ Call to the disassembler of the current object
  1926.  │ Stay TSR         │ Stay memory resident, hot key Alt-'+'.
  1927.  │ Remove TSR       │ Remove the memory resident utilities from the memory
  1928.  │ Exit       Alt-X │ Exit to DOS or to the interrupted program
  1929.  └──────────────────┘
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  4.2.1. The memory map  -U
  1936.  ───────────────────────────────────────────────────────────────
  1937. The memory map consists of six columns that give the following
  1938. information:
  1939.  
  1940.  ADDRESS - segment address of memory control block (MCB)
  1941.  PSP     - segment address of program segment prefix (PSP)
  1942.  Size    - block size in paragraphs (16 bytes) or in kilobytes
  1943.  Name    - Block owner name (name of a program or system area),
  1944.            if the name is not specified then the character '?' is given
  1945.  Type    - memory block type (driver, program, program environment)
  1946.  Hooked vectors - list of interrupts hooked by the interrupt vector block.
  1947.  
  1948.  ╔══ Memory map ════════════════════════════════════════════════════╗
  1949.  ║ MCB │ PSP│ Size  │ Name       │  Type  │  Hooked Vectors         ║
  1950.  ║113A │2116│    128│RE.COM      │envir   │                         ║
  1951.  ║1143 │2286│    144│GRAB.COM    │envir   │                         ║
  1952.  ║114D │2467│    128│-U.COM      │envir   │                         ║
  1953.  ║1156 │0000│  1,920│   free     │        │                         ║
  1954.  ║11CF │11D8│    128│HELP.EXE    │envir   │                         ║
  1955.  ║11D8 │11D8│ 60,032│HELP.EXE    │program │08 13 25 26 28 2F        ║
  1956.  ║2081 │0000│  2,368│   free     │        │                         ║
  1957.  ║2116 │2116│  3,488│RE.COM      │program │16 21 27                 ║
  1958.  ╚══════════════════════════════════════════════════════════════════╝
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  4.2.2. The interrupt vectors  -U
  1965.  ───────────────────────────────────────────────────────────────
  1966. This window displays information about interrupt vectors states: number of
  1967. the interrupt, the vector value in the format "segment:offset", and the
  1968. name of a program or a memory system area the interrupt vector points to.
  1969. For interrupts used most often, their functions (purpose) are shown. To
  1970. move within the window use keys UP, DOWN, HOME, END, PGUP, PGDN.
  1971.  
  1972.  ╔══ Interrupts ════════════════════════════════════════════════════════╗
  1973.  ║   Int 0D  05D5:009F│TDHDEBUG     │IRQ5 - Fixed disk or LPT1          ║
  1974.  ║   Int 0E  05D5:00B7│TDHDEBUG     │IRQ6 - Diskette                    ║
  1975.  ║   Int 0F  0070:06F4│IO.SYS       │IRQ7 - Printer                     ║
  1976.  ║   Int 10  0969:01D1│SP.COM       │Video services                     ║
  1977.  ║   Int 11  F000:F84D│ROM BIOS     │Equipment list                     ║
  1978.  ╚═┌──────────────────┐═════════════════════════════════════════════════╝
  1979.    │ Dump             │  Dump from the interrupt address
  1980.    │ Disassembler     │  Disassembler from the interrupt address
  1981.    │ Tracer           │  Trace this interrupt
  1982.    │ Interceptor      │  Intercept this interrupt
  1983.    │ New Value        │  Change the value of the Interrupt Vector
  1984.    └──────────────────┘
  1985.  
  1986.  
  1987.  
  1988.  
  1989.  4.2.3. Tracer  -U
  1990.  ───────────────────────────────────────────────────────────────
  1991. Attention! The use of this function might result in unpredictable behavior
  1992. of the computer! Be careful!
  1993.  
  1994. The tracer goes along the path (handler) of the specified interrupt and
  1995. provides the tracing assembler listing. The listing comprises names of
  1996. programs hooked the specified interrupt, addresses, hexadecimal dump and
  1997. mnemonics of assembler instructions executed during the tracing process.
  1998. The tracer is useful for detection of an unknown virus and is able to help
  1999. to analyze it.
  2000.  
  2001. Selection of the interrupt to be traced and initial states of the
  2002. registers is made in the registers menu:
  2003.  
  2004.  ╔══ CPU ════╗
  2005.  ║ AX 0000   ║
  2006.  ║ BX A02D   ║
  2007.  ║ CX 0001   ║
  2008.  ║ DX 04D0   ║
  2009.  ║ BP B638   ║
  2010.  ║ SP B62E   ║
  2011.  ║ SI 0091   ║
  2012.  ║ DI 7100   ║
  2013.  ║ DS 2467   ║
  2014.  ║ ES 2467   ║
  2015.  ║ SS 2467   ║
  2016.  ║ CS 2467   ║
  2017.  ║ IP 7D00   ║
  2018.  ║ FL 7246   ║
  2019.  ╚═══════════╝
  2020.  
  2021. This window is showed also after executing of selected Interrupt.
  2022.  
  2023.  
  2024.  
  2025.  
  2026.  4.2.4. Interceptor  -U
  2027.  ───────────────────────────────────────────────────────────────
  2028. Attention! The use of this function might result in unpredictable behavior
  2029. of the computer! Be careful!
  2030.  
  2031. The interceptor installs into the chain of the selected interrupt and
  2032. reports every call of this interrupt. Upon interception a window with the
  2033. number of hooked interrupt and current states of all registers are
  2034. displayed and the string which pointed by the selected registers (DS:DX by
  2035. default).
  2036.  
  2037.  █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
  2038.  █    INT 21    [-U.COM      ] █
  2039.  █─────────────────────────────█
  2040.  █ Dos service                 █
  2041.  █═════════════════════════════█
  2042.  █  AX 3D02  DI E88A  DS 0B6D  █
  2043.  █  BX 033A  SI 0037  ES 0B6D  █
  2044.  █  CX 0000  BP 0B6D           █
  2045.  █  DX 8F45  SP 098C  SS 934E  █
  2046.  █─────────────────────────────█
  2047.  █ Flags 0F02  CS:IP 0B6D:50A3 █
  2048.  █═════════════════════════════█
  2049.  █ DS:DX [C:\-U.INI          ] █
  2050.  █ Back BA9876543210 [Trace ]  █
  2051.  █ [  OK  ] [Cancel] [ Free ]  █
  2052.  █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
  2053.  
  2054. The interceptor stores the last 12 interrupt calls and information about
  2055. them can be displayed by using the "Back" button.
  2056.  
  2057. The control buttons are:
  2058.  
  2059.  OK     - continue interrupt
  2060.  
  2061.  Cancel - set Carry flag and break the interrupt call
  2062.  
  2063.  Free   - release the interrupt calls
  2064.  
  2065.  Trace  - calls the INT 3 (Debug Breakpoint). This feature used by memory
  2066.           resident debuggers which hook INT 3. In other case this button is
  2067.           the same as the "OK" button.
  2068.  
  2069. The number of the intercepted interrupt pointing in the "Interrupts"
  2070. window by pressing the ENTER key on the selected interrupt and the
  2071. "Interceptor" line of the pop-up menu is displayed. The intercepted
  2072. interrupt marked by the sign. The resetting the interceptor executed by
  2073. the same way or by the "Free" button of the "Interceptor" window.
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  4.3. Menu "Object"  -U
  2080.  ───────────────────────────────────────────────────────────────
  2081.  ┌─────────────────┐
  2082.  │ Memory          │ The system memory
  2083.  │ Logical Sector  │ The logical drive sector
  2084.  │ Absolute Sector │ The physical disk
  2085.  │ File            │ The file
  2086.  └─────────────────┘
  2087.  
  2088. This menu selects the object to analyze.
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  4.3.1. The hexadecimal memory/file/sector dump  -U
  2094.  ───────────────────────────────────────────────────────────────
  2095. The memory dump window displays information in hexadecimal form about the
  2096. file/sector/RAM contents. To select the required section use the keys UP,
  2097. DOWN, PGUP, PGDN, HOME, END, or indicate the starting address of the
  2098. section by the keys LEFT, RIGHT, '0'-'9', 'A'-'F'.
  2099.  
  2100. Key F4 - edit the information displayed.
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  4.3.2. The disassembler  -U
  2106.  ───────────────────────────────────────────────────────────────
  2107. Disassembler allows to scan the text of programs loaded into the memory,
  2108. and is convenient for debugging and analysis of memory resident programs
  2109. (for example, memory-resident viruses). Selection of a memory area to be
  2110. disassembled is performed either by pressing the keys LEFT, RIGHT, PGUP,
  2111. PGDN within the segment, or by indicating the section address using the
  2112. keys LEFT, RIGHT, '0'-'9', 'A'-'F'.
  2113.  
  2114. Key F4 - edit the information displayed.
  2115.  
  2116.  
  2117.  
  2118.  
  2119.  4.4. Menu "Setup"  -U
  2120.  ───────────────────────────────────────────────────────────────
  2121.                            ┌─────────────────┐
  2122.    25/(43|50) lines screen │ EGA/VGA  Alt-F9 │
  2123.    Address correction      │ Addr link       │
  2124.    Save Settings           │ Save desktop    │
  2125.    Show status  -U         │ Get Info Status │
  2126.    Information about -U    │ About           │
  2127.                            └─────────────────┘
  2128.  
  2129.  EGA/VGA:      Switch to video mode  25 lines <-> 43/50 lines.
  2130.  
  2131.  Addr Link:    Set/reset the correction of the addresses
  2132.                of the different windows.
  2133.  
  2134.  Save desktop: Write the current settings into the file -U.INI.
  2135.  
  2136.  
  2137.  
  2138.  
  2139.  4.4.1. Get Info Status
  2140.  ───────────────────────────────────────────────────────────────
  2141. The Status of the -U program can be one of three:
  2142.  
  2143. "-U is not TSR" - it means that -U.COM works in the non-resident mode and
  2144. all the functions of the -U are available, i.e. reading/writing to/from
  2145. files and sectors, saving the DeskTop e.t.c.
  2146.  
  2147. "-U is TSR on Int09h" - the call TSR part of -U directly by the hardware
  2148. keyboard interrupt. It is possible at any time by pressing Alt-"+"
  2149. combination. It causes immediately calls to -U, but on this mode all the
  2150. reading/saving files/sectors functions are disabled.
  2151.  
  2152. "-U is TSR on Int28h" - the call TSR part of -U by using interrupt 28h
  2153. (Dos Safe Interrupt). It means that the resident portion of -U called on
  2154. not-dangerous moment and all the functions of reading/saving are
  2155. available.
  2156.  
  2157.