home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / ftp.vapor.com / microdot-1 / md1_src_02.lzx / checkvalid.c < prev    next >
C/C++ Source or Header  |  2014-05-19  |  2KB  |  79 lines

  1. #include "microdot.h"
  2. #include "asyncio.h"
  3.  
  4. extern struct WBStartup *_WBenchMsg;
  5.  
  6. ULONG checkprogramval = MODE_NEWFILE;
  7.  
  8. static ULONG __inline dosum( ULONG *buffer, int cnt, ULONG sum )
  9. {
  10.     while( cnt-- )
  11.         sum += *buffer++;
  12.  
  13.     return( sum );
  14. }
  15.  
  16. ULONG __chip __aligned idblock[ 3 ]á= {á0x7ec04e10, 0, 0x1940e120 };
  17.  
  18. void checkvalid( void )
  19. {
  20.     ULONG sum = NULL;
  21.     char buffer[á4096 ];
  22.  
  23.     if( prefs.checksumfailed ||  !( rand() % 5 ) )
  24.     {
  25.         struct AsyncFile *f;
  26.  
  27.         if( _WBenchMsg )
  28.         {
  29.             struct WBArg *wba = _WBenchMsg->sm_ArgList;
  30.             BPTR old = CurrentDir( wba->wa_Lock );
  31.             f = OpenAsync( wba->wa_Name, MODE_READ, 32768 );
  32.             CurrentDir( old );
  33.         }
  34.         else
  35.         {
  36.             BPTR old = CurrentDir( GetProgramDir() );
  37.             GetProgramName( buffer, sizeof( buffer ) );
  38.             f = OpenAsync( buffer, MODE_READ, 32768 );
  39.             CurrentDir( old );
  40.         }
  41.  
  42.         if( f )
  43.         {
  44.             int rc;
  45.  
  46.             while( ( rc = ReadAsync( f, buffer, sizeof( buffer ) ) ) > 0 )
  47.                 sum = dosum( (ULONG*)buffer, rc >> 2, sum );
  48.  
  49.             CloseAsync( f );
  50.         }
  51.     }
  52.     prefs.checksumfailed = checkprogramval ? 1 : 0;
  53.     checkprogramval = sum;
  54. }
  55.  
  56. #define ALERTTXT "\000\030\026VIRUS ALERT - MICRODOT EXECUTABLE CHECKSUM FAILED!\000\000"
  57.  
  58. void reportvalid( void )
  59. {
  60.     if( checkprogramval )
  61.     {
  62.         DisplayAlert( 0, ALERTTXT, 40 );
  63.         exit( -1 );
  64.     }
  65. }
  66.  
  67. char unregistered[á32 ];
  68.  
  69. #define UREGTXT "[UNREGISTERED/%ld]"
  70.  
  71. void initdays( void )
  72. {
  73.     int days = ( ( time( 0 ) - prefs.firstinstalltime ) + 86399 ) / 86400;
  74.  
  75.     sprintf( unregistered, UREGTXT, days );
  76.     if( strlen( unregistered ) < 16 )
  77.         exit( 0 );
  78. }
  79.