home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / blockade.doc < prev    next >
Text File  |  1991-11-08  |  20KB  |  768 lines

  1.     
  2.     
  3.     
  4.     
  5.     
  6.     
  7.     
  8.     
  9.     
  10.     
  11.     
  12.     
  13.     
  14.                               BLOCKADE (TM)
  15.                     A self checker library for C programs
  16.     
  17.     
  18.     
  19.     
  20.     
  21.     
  22.                     Copyright (C) 1991 Indusoft Corp.
  23.     
  24.     
  25.     
  26.     
  27.     
  28.     
  29.     
  30.     
  31.                            Indusoft Corp.
  32.                            PO. Box 26747
  33.                        Greenville, SC 29616-1747
  34.     
  35.     
  36.     
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -1-
  59.  
  60.     
  61.     
  62.     
  63.     
  64.     
  65.          OVERVIEW
  66.     
  67.          Blockade is a function library for C programmers which allows
  68.          your C programs to protect themselves against unauthorized
  69.          changes. Virus protection IMMEDIATELY comes to mind as its main
  70.          use, but there are more.
  71.     
  72.          I wrote BLOCKADE so that programs I wrote could check
  73.          themselves. Have you had those times too?  Those unexplainable
  74.          times when a program runs but has some odd behavior that makes
  75.          you suspect corruption, virus related or not.
  76.     
  77.          This happened to me when I was checking out a disk caching
  78.          utility. Files I had compiled and linked often quit running
  79.          after copying them to another disk or subdirectory. The
  80.          combination of controller, BIOS, and cache software was
  81.          causing just a few bytes of a file to be altered anytime I
  82.          copied it (and of course without warning or notice).
  83.     
  84.          After several hours of searching, I found the problem and
  85.          looked for a way to make my programs self checking. The result
  86.          was BLOCKADE.
  87.     
  88.          BLOCKADE checks every byte of your EXE or COM to insure that
  89.          changes are detected. Its algorithm is designed to be effective
  90.          but fast enough allow use in your programs.
  91.     
  92.          We also use BLOCKADE in our products to protect against
  93.          unauthorized patches to our programs and to protect our
  94.          customers from running versions of the program damaged
  95.          unintentionally.
  96.     
  97.          Blockade is easy to use.  1 major function analyses your EXE
  98.          file and returns a status code indicating whether your file has
  99.          been altered.
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -2-
  118.  
  119.     
  120.     
  121.     
  122.     
  123.          NEAT FEATURES
  124.     
  125.          * Fast operation. A 40k EXE file can check itself in less
  126.            than 3 seconds on a 12 MHZ AT.
  127.     
  128.          * Ease of use.  A few #includes and only a handful
  129.            of additions are needed to use BLOCKADE. No changes to
  130.            your program's basic structure are necessary.
  131.     
  132.          * Expandable.  BLOCKADE can be modified to extend the
  133.            number and type checking methods you use.
  134.            The source code to BLOCKADE is available, allowing you to
  135.            create new checking methods unique to your application.
  136.     
  137.     
  138.          THEORY OF OPERATION
  139.     
  140.     
  141.          Blockade works via 2 pieces of code you add to your program.
  142.     
  143.          (1)  A special data structure "SIGNATUR.H", which is #include'd
  144.               in your program.  The structure reserves room for the
  145.               information BLOCKADE will need to analyze your program.
  146.     
  147.          (2)  The function blockade(), which checks your program for
  148.               alteration.
  149.     
  150.          After linking, a special program (BRAND.EXE) is run to find the
  151.          special string included by "SIGNATUR.H" in the data area of
  152.          your EXE file, calculate the checking information and overwrite
  153.          that area with the data blockade() needs to detect changes to
  154.          your file.  Once branded, your program can check itself for
  155.          changes each time it is run.
  156.     
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -3-
  177.  
  178.     
  179.     
  180.     
  181.     
  182.          I HAVE TO RUN BRAND.EXE  EACH TIME I RELINK MY APPLICATION ?
  183.     
  184.     
  185.          That's the problem I had with other products similar to
  186.          BLOCKADE. The biggest headache was time - it seemed to take
  187.          forever for them to calculate and update my program.
  188.     
  189.          To combat that, ALOT of time went into the all the utilities to
  190.          make things FAST.  For example, on an 8 MHz AT, the Brand
  191.          utility will analyze and brand a 40 K .EXE file in less than 4
  192.          seconds.
  193.     
  194.          The same thing is true for your developed applications. Nobody
  195.          wants to wait 30-40 seconds every time they start your program
  196.          while it self checks.  The check algorithm in BLOCKADE is quick.
  197.          Running from a hard disk, I doubt anyone will notice the delay.
  198.     
  199.          I leave the BLOCKADE code linked in during development - to
  200.          take into account the effect it has on speed and memory use -
  201.          but have the program ignore any error codes until my final
  202.          production link.
  203.     
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -4-
  236.  
  237.     
  238.     
  239.     
  240.          CONTENTS
  241.     
  242.     
  243.          This self extracting file should contain the following files:
  244.     
  245.     
  246.          blkade1.c       - the error message function used by BLOCKADE.
  247.          blkdmoms.lib    - Blockade demo library Microsoft 5.1 (Small model)
  248.          blkdmoml.lib    - Blockade demo library Microsoft 5.1 (Large model)
  249.          blkdmots.lib    - Blockade demo library Turbo C 2.01 (Small model)
  250.          blkdmotl.lib    - Blockade demo library Turbo C 2.01 (Large model)
  251.          blkdmobs.lib    - Blockade demo library Borland C++ 2.0 (Small model)
  252.          blkdmobl.lib    - Blockade demo library Borland C++ 2.0 (Large model)
  253.          brand.exe       - calculates your program's checkcode data
  254.                            and "brands" it into your .EXE file.
  255.          demo.c          - Demonstrates use of the Blockade function
  256.                            library.
  257.          demo.exe        - Demo program demonstrating BLOCKADE's use.
  258.          rundemo.bat     - Demonstrates use of the Blockade system.
  259.          mksig.exe       - Generates a SIGNATUR.H file.
  260.          signatur.h      - include file to be embedded in your program.
  261.          blkproto.h      - function prototypes for blockade functions.
  262.          read.me         - any last minute info.
  263.     
  264.     
  265.          COMPILER'S SUPPORTED
  266.     
  267.     
  268.          The test drive of BLOCKADE version comes with libraries for
  269.          Turbo C 2.0, Borland C++ 2.0 and Microsoft C 5.x.  I don't know
  270.          if these are usable with Microsoft 6.0.  According to Borland,
  271.          the C++ libraries are NOT reliably usable with Turbo C 2.0.
  272.          However, Turbo C++ and Borland C++ libraries do seem to be
  273.          compatible.
  274.     
  275.          For now, folks with other C compilers must license the source
  276.          code and compile it themselves.  BLOCKADE and all it's support
  277.          programs are written in (almost) ANSI C so things should
  278.          compile up just fine.
  279.     
  280.     
  281.          The libraries were compiled with the following options.
  282.     
  283.          For TC   :   tc  -O -G -c  -ml(or s)
  284.     
  285.          For BCC  :   bcc -O -G -c  -ml(or s)
  286.     
  287.          For MSC  :   CL /W3 /Ox /Zi  /c /AL(or S)
  288.     
  289.  
  290.  
  291.  
  292.  
  293.  
  294.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -5-
  295.  
  296.     
  297.     
  298.     
  299.          Below is an short program illustrating the BLOCKADE system.
  300.          (This is in fact a section of the DEMO program included in your
  301.          BLOCKADE package)
  302.     
  303.     
  304.     
  305.     
  306.          /* ------------------------------------------- */
  307.     
  308.          #include "blkproto.h"   /* function prototypes              */
  309.          #include "signatur.h"   /* holds the signature string       */
  310.     
  311.          /* ------------------------------------------- */
  312.     
  313.          main(int argc, char **argv)
  314.          {
  315.            char *sp;
  316.            int stat;
  317.     
  318.            printf("Checking myself for changes..\n");
  319.     
  320.            stat = blockade( argv[0], 8000);
  321.     
  322.            printf ("Results of file self check = %d\n", stat);
  323.     
  324.            sp = get_blk_err_msg( stat);
  325.            printf("The status my self check was \"%s\". \n", sp);
  326.     
  327.            return(0);
  328.          }
  329.     
  330.     
  331.          The above example illustrates how easy it is to add self
  332.          checking to your programs.
  333.     
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -6-
  354.  
  355.     
  356.     
  357.     
  358.     
  359.          Prototype :
  360.     
  361.            int blockade( char *filename, int buffer_size);
  362.     
  363.     
  364.          Description:
  365.     
  366.          Attempts to open "filename" and analyze it for any alterations.
  367.     
  368.          Allocates "buffer_size"  bytes of dynamic memory for disk I/O
  369.          to improve scanning performance.  Allowable buffer sizes are
  370.          from BLKSIZ to approximately 30000 bytes inclusive.  Buffer
  371.          sizes outside this range are set to the closest allowable size
  372.          within the function.
  373.     
  374.          Returns 0 if no changes are detected, else returns a non-zero
  375.          status indicating the reason for failure.  The user's
  376.          application must decide what action to take based on the
  377.          status.
  378.     
  379.     
  380.          Example:
  381.     
  382.     
  383.             include "signatur.h"
  384.             stat = blockade( "DEMO.EXE", 1024);
  385.             if (status != 0)
  386.                {
  387.                  printf(" This file has be altered !!!\n");
  388.                }
  389.     
  390.             Attempts to open DEMO.EXE located int the current directory
  391.             and analyzes it for any changes.  Allocates 1024 bytes of
  392.             dynamic memory for disk I/O to speed things along.
  393.     
  394.             Prints an error message if any alteration if found.
  395.     
  396.     
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -7-
  413.  
  414.     
  415.     
  416.     
  417.          Prototype :
  418.     
  419.            char *get_blk_err_msg( int status );
  420.     
  421.     
  422.          Description:
  423.     
  424.            Returns a READ ONLY pointer to a message relating to
  425.            the "status" code.  This message can then be used to explain
  426.            or document the error to the user.
  427.     
  428.            NOTE: The pointed to string must not be modified.
  429.                  Unpredictable operation may result if modification
  430.                  takes place. Make a copy of this string if you intend
  431.                  to alter it.
  432.     
  433.     
  434.     
  435.          Example:
  436.     
  437.             {
  438.             int status;
  439.     
  440.             status = blockade( "C:\BLOCK\BIN\MYSELF.EXE",  0);
  441.             if (status != 0)
  442.                {
  443.                  sp = get_blk_err_msg(stat);
  444.                  printf( "%s\n", sp );
  445.                }
  446.             return(status);
  447.             }
  448.     
  449.     
  450.             Attempts to open MYSELF.EXE located in subdirectory
  451.             C:\BLOCK\BIN and analyze it for any changes.
  452.     
  453.             Since 0 bytes (less than the minimum) were specified for
  454.             buffer, the minimum (BLKSIZ bytes) is used for disk
  455.             buffering.
  456.     
  457.             Prints an error message if any alteration if found or if
  458.             file cannot be successfully opened and analyzed.
  459.     
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -8-
  472.  
  473.     
  474.     
  475.     
  476.          MKSIG.EXE
  477.     
  478.          "Writes" an include which includes the references and data
  479.          space Blockade needs for operation.  You do not need to run
  480.          MKSIG.EXE unless you wish to change either the reserved data
  481.          size or signature string. However, there's no harm done if
  482.          you do.
  483.     
  484.          MKSIG's syntax is as follows :
  485.     
  486.          MKSIG "Signature string"   <array size> <output filename>
  487.     
  488.          "signature string"
  489.             the text BRAND.EXE should search for to locate Blockade's
  490.             data space. The default is "chk_signature". Note that the
  491.             signature string is case sensitive and spaces do count.
  492.             This string much match the string embedded in SIGNATUR.H.
  493.     
  494.          array size
  495.             The number of bytes that should be reserved by signatur.h.
  496.             This option is intended primarily for future use. User's may
  497.             wish to stuff additional info into this region such as
  498.             serial numbers or owner's names.
  499.     
  500.             The default is the minimum needed to hold blockade's info.
  501.     
  502.          output filename
  503.             The filename to use in case you don't like SIGNATUR.H.
  504.     
  505.     
  506.          EXAMPLE:
  507.     
  508.              MKSIG  "Brown Fox"  128  sig.h
  509.     
  510.     
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -9-
  531.  
  532.     
  533.     
  534.          BRAND.EXE
  535.     
  536.          This is the program used to "brand"  your program with the
  537.          self-checking info needed at run time. You must BRAND your
  538.          program prior to distributing the program.
  539.     
  540.          Brand's syntax is as follows:
  541.     
  542.          BRAND   filename[.exe]   </s=signature_string> </n> </c>
  543.     
  544.          filename
  545.             The name of the file to brand. The extension .EXE is assumed
  546.             if no extension is specified.  Note that only executable
  547.             programs may be branded since the location of the checking
  548.             information is made known to blockade() function only during
  549.             linking.
  550.     
  551.          /s=signature_string (optional)
  552.     
  553.             Specifies the character string to look for. This string
  554.             must occur only once in your executable program.
  555.             The default string is "chk_signature". It must match the
  556.             string embedded in SIGNATUR.H.
  557.     
  558.          /n   (optional)
  559.     
  560.            Tells Brand not to verify the check value immediately after
  561.            it is calculated.  Using this option speeds the BRAND process
  562.            by  about 40%.  We recommend you use it once you feel
  563.            comfortable with BRAND's operation.
  564.     
  565.         /c=function  (optional, full version only)
  566.     
  567.            Specifies that BRAND use 1 of 3 (currently) available self
  568.            checking algorithms to brand the program.  The full version
  569.            of BLOCKADE allows you to specify at link time the algorithm
  570.            you desire to use. The specification handed to BRAND via
  571.            this switch must match that used in your program, else your
  572.            blockade() function will think your executable has been
  573.            altered.
  574.     
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -10-
  590.  
  591.     
  592.           SUPPORT
  593.     
  594.           Indusoft Corp. can be contacted as follows:
  595.     
  596.           Phone:  (803)-292-9066.
  597.                   Please leave name, phone (including area code),
  598.                   and times when you can be reached.
  599.                   I will call COLLECT.
  600.     
  601.           Compuserve ID:  73517,1107
  602.                   I check for mail every couple of days.
  603.                   This is the preferred method.
  604.     
  605.     
  606.     
  607.          TERMS OF USE
  608.     
  609.          BLOCKADE is supplied for personal, private use.  Feel free to
  610.          distribute the non-registered version of BLOCKADE given these
  611.          restrictions:
  612.     
  613.          -  The program shall be supplied in its original, unmodified
  614.             form, which includes this documentation.
  615.     
  616.          -  No fee is charged other than media materials.
  617.     
  618.          -  Commercial use without a license is prohibited.
  619.     
  620.          -  No component of this package may be included, or bundled
  621.             with other  goods or services.  Exceptions may be granted
  622.             upon written request only.  This restriction also applies
  623.             to distributors, and shareware outlets.
  624.     
  625.     
  626.          WARRANTY
  627.     
  628.          This program is provided AS IS without any warranty, expressed
  629.          or implied, including but not limited to the program's
  630.          suitability for any specific purpose.  Considerable testing
  631.          effort has been expended in BLOCKADE's development, but the
  632.          user is responsible for determining the program's suitability
  633.          for use.  The user assumes full risk as to the results of using
  634.          this package.  In no event shall Indusoft be liable for any
  635.          consequential damages arising from the use, or inability to use
  636.          these routines.
  637.     
  638.          The idea of shareware with its low cost distribution of quality
  639.          programs can be of great value to computer users.  BLOCKADE
  640.          follows in that tradition.
  641.     
  642.                           THANK YOU FOR YOUR SUPPORT!
  643.     
  644.  
  645.  
  646.  
  647.  
  648.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -11-
  649.  
  650.     
  651.     
  652.     
  653.          -------------------- REGISTRATION BENEFITS ------------------------
  654.     
  655.     
  656.     
  657.          Registration allows Indusoft to continue improving BLOCKADE and
  658.          to develop new products for the computing community.  Future
  659.          improvements for BLOCKADE include..
  660.     
  661.          *  Adding serial numbers or other data after linking. This will
  662.             allow you to have a plain vanilla EXE file which you customize
  663.             prior to shipment.
  664.     
  665.          *  The ability to embed codes for multiple files, allowing a
  666.             master program to check both itself and subordinates.
  667.     
  668.          *  Ideas that you, our customers submit.
  669.     
  670.          Blockade registration comes in 3 versions, described below:
  671.     
  672.          License to use the current and all future
  673.          shareware versions for private use ...................... $ 10
  674.     
  675.          License for private and non-resale commercial use.
  676.          A disk with the latest version of BLOCKADE will be
  677.          sent to you This is an extended version with
  678.          (currently) 3 selectable checking algorithms.
  679.          Source code is not included.  ........................... $ 20
  680.     
  681.          License for business and commercial use,
  682.          (includes full source code and license to
  683.           embed object code in your product)  .................... $ 30
  684.     
  685.     
  686.          Please make checks or money orders payable to:
  687.     
  688.                          Indusoft Corp.
  689.                          PO Box 26747
  690.                        Greenville, SC  29616-1747
  691.     
  692.     
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -12-
  708.  
  709.     
  710.     
  711.                        REGISTRATION - ORDER FORM
  712.                       ============================
  713.     
  714.     
  715.     
  716.          Please Register BLOCKADE as follows:
  717.     
  718.     
  719.                       Shareware version  ($10.00)   ______
  720.     
  721.                       Extended version   ($20.00)   ______
  722.     
  723.                       Commercial version ($30.00)   ______
  724.     
  725.     
  726.          Send applicable material to:
  727.     
  728.          Name: ___________________________________  Phone:_____________
  729.     
  730.          Company: _____________________________________________________
  731.     
  732.          Address: _____________________________________________________
  733.     
  734.          Address: _____________________________________________________
  735.     
  736.          City, State, Zip: ____________________________________________
  737.     
  738.     
  739.          Where did you learn about our program?
  740.     
  741.          ______________________________________________________________
  742.     
  743.          How can we improve BLOCKADE?
  744.     
  745.          ______________________________________________________________
  746.     
  747.          ______________________________________________________________
  748.     
  749.          ______________________________________________________________
  750.     
  751.     
  752.          Please forward check or money order payable to:
  753.     
  754.                           Indusoft Corp.
  755.                           PO Box  26747
  756.                        Greenville, SC  29616-1747
  757.     
  758.     
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.              Blockade, (C) Copyright 1991 Indusoft Corp.  page -13-
  767.  
  768.