1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Help Me Please For Antivirus Coding Problem In C

Discussion in 'C' started by dragosam, Nov 13, 2007.

  1. dragosam

    dragosam New Member

    Joined:
    Nov 13, 2007
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    please help i have developed an antivirus programme code in c language

    which fights for ashar virus whos details are


    Ashar virus is also known as paralyse virus

    Its charachteristic features are :

    1) It comes as “(c) Brain “ or ( c) ashar”

    Where ( c ) stands for copyright in the volume label

    of affected disk.

    2) it resides in the boot record and is entirely a memory

    Resident programme occupying 3 to4 kilobytes
    i am attching its source code

    please help me it shows many errors when i run it

    please help me as soon as possible i have to submit that programme code

    latest by 15 nov 2007

    please make it working by correcting it and you can post it to my email id

    dragokartik@yahoo.co.in
    CODE IS AS FOLLOWS


    Code:
    #include<dos.h>
    #include<dir.h>
    #include<string.h>
    void main()
    
    {
    
      int virus_found,more;
    
      virus_found=RAM_Test();
    
      if(virus_found)
      {
    
        Reset_INT13();
    
        clean_Disk('F')  ;
    
      }
    
      while(1)
      {
        printf("\n\nMore diskette to clean ?  Y/N");
    
        more=toupper(getch());
    
        while(more!='Y' &&more!='N')
    	 more=toupper(getch());
    
        if(more=='N') exit(0);
           clean_Disk(more);
    
       }
       }
    
       /* End of program */
    
       /* Routine to check Ram for virus */
    
       RAM_Test()
    {
       unsigned int vseg,voff;
    
       void interrupt(*v)(void);
    
       printf("\n\n RAM checking____");
    
       v=getvect(109);
       vseg=FP_SEG(v);
       voff=FP_OFF(v);
       if(vseg!=0x0 && voff=0x0)
       {
        printf("virus detected :-");
        putch(7);return(1);
        }
        else
        {
         printf("ok\n\n");
         putch(7);putch(7);return(0);
        }
    }
        /*end of routine ram test*/
    
       /*ROUTINE TO RESETINT 13H*/
     Reset_INT13()
    {
         unsigned int vseg,voff;
    
         void interrupt(*v)(void);
         v=getvect(109);
         vseg=FP_SEG(v);voff=FP_OFF(v);
         poke(0,76,voff);poke(0,78,vseg);
         printf("disabled\n");
    }
      /*end of routine Reset_INT13*/
    
      /*Routine to clean diskette*/
    
     clean_Disk(next)
     char next;
    {
     clean_Boot_sector(next);
     clean_Data_Area();
     change_Label();
    }
    /* end of routine clean disk*/
    
    clean_Boot_sector(next_disk)
    char next_disk;
    {
     int ans,i,True;
     static void *buf[512];
     char virus[6],ashar[]="ashar",brain[]="Brain";
     if(next_disk=='F')
     True=1;
     else True=0;
     while(True)
     {
       printf("\ninsert dos diskettein drive A____WAITING\n");
       ans=getch();
       ans=absread(0,1,0,buf);
       virus=ashar;
       ans=chkboot(buf,&virus);
       virus=brain;
       ans=ans&&chkboot(buf,&virus);
       if(!ans)
       {
        printf("\nBoot sector infected with virus\n") ;
       }
       else
       break;
     }
     printf("\n insert infected disk in drive A_________ waiting\n\n\n");
     ans=getch();
     ans=abswrite(0,1,0,buf);
     if(ans)
     printf("\n unable to clean disk\n");
    }
    
    /*end of routine clean boot record*/
    
    /*subroutine to check virus*/
     /*boot routine*/
     chkboot(str,name)
     char str[512],name[6];
     {
       int i,k;
       for(i=0,k=0;i<512;i++)
       if(str[i]==name[k])
       {
        k++;
        if(k==5)
        return(0);
        else
        continue;
       }
       else
       k=0;
       return(1);
      }
    
      /*end of sub routine chk boot*/
    
      /*routine to clean virus*/
      /* executive routine*/
    
      clean_Data_Area()
    {
       int i,j;
       float rj;
       unsigned int fat_off,fat_dmp;
       unsigned dmp_sav;
       unsigned char fatbuf[1024],b1,b2;
       absread(0,2,1,fatbuf);j=0;
    
       for(i=2;i<355;i++)
       {
         rj=1.5*i;
         fat_off=rj;
         b2=fatbuf[fat_off+1];
         b1=fatbuf[fat_off];
         fat_dmp=b2;
         fat_dmp=fat_dmp<<8;
         fat_dmp=fat_dmp+b1;
         dmp_sav=fat_dmp;
         if(rj==fat_off)
         fat_dmp=fat_dmp&0xffff;
         else fat_dmp=fat_dmp>>4;
         fat_dmp=fat_dmp<<4;
         fat_dmp=fat_dmp>>4;
         if(fat_dmp==0x0ff7)
         {
          j++;
          if(rj==fat_off)
          dmp_sav=dmp_sav&0xf000;
          else
          dmp_sav=dmp_sav&0x000f;
          b2=(dmp_sav&0xff00)>>8;
          b1=dmp_sav&0x00ff;
          fatbuf[fat_off]=b1;
          fatbuf[fat_off+1]=b2;
         }
         }
         if(j)
         {
          abswrite(0,2,1,fatbuf);
          printf("disk cleaned \n\n");
         }
    }
    
        /*End of routine clean_data_Area*/
    
        /*routine to change volume label */
    
      change_Label()
    {
      unsigned char buf[512],volb1[11];
      int i,llen,lblpos,sno=5;
      struct ffblk blk;
      i=findfirst("*.*",&blk,0x08);
      if(!i)
      {
       absread(0,1,sno,buf);
       lblpos=findlbl(buf);
       while(!lblpos){ sno++;absread(0,1,sno,buf);
    		   lblpos=lblpos-0x0b;
    		   for(i=0;i<0x0b;i++)
    		   volb1[i]=buf[lblpos+i];
    		   volb1[i]=0x0b;
    		   printf("volume label is %s \n",volb1);
    		  }
      }
      else
      printf("volume label not defined\n");
      printf("enter new label (char):");
      scanf("%s",volb1);
      if(!i)
      {
        llen=strlen(volb1);
        for(i=0;i<=llen;i++,lblpos++)
        buf[lblpos]=volb1[i];
        for(;i<0x0b;i++,lblpos++)
        buf[lblpos]=' ';
        abswrite(0,1,sno,buf);
      }else
      {
        i=_creat(volb1,0x08);
        close(i);
      }
    }
     findlbl(source)
     unsigned char source[512];
     {
      int ofset=0x0b;
      while(ofset<512){
      if(source[ofset]==0x28)
      return(ofset);
      ofset=ofset+0x020;
      }
      return(0);
     }
    
    /* End of routine change _label*/
     
    Last edited by a moderator: Nov 13, 2007

Share This Page