Перейти к содержимому


Фотография

MailSlots - будущее троянологии.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 FoxTop

FoxTop

    МЕСТНЫЙ

  • 57 topics
  • Пользователи
  • PipPipPip
  • 871 сообщений

Отправлено 29 октября 2017 - 09:34

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. 

  • 0

#2 santilax

santilax

    МЕСТНЫЙ

  • 49 topics
  • Пользователи
  • PipPipPip
  • 734 сообщений

Отправлено 30 октября 2017 - 09:17

Лично я в этом будущего не вижу.


  • 0

#3 UltraPro

UltraPro

    МЕСТНЫЙ

  • 51 topics
  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 03 ноября 2017 - 10:52

Вообще ничего не понятно.


  • 0

#4 ROK

ROK

    МЕСТНЫЙ

  • 49 topics
  • Пользователи
  • PipPipPip
  • 598 сообщений

Отправлено 16 ноября 2017 - 04:47

согласен 


  • 0

#5 Dessar

Dessar

    МЕСТНЫЙ

  • 55 topics
  • Пользователи
  • PipPipPip
  • 823 сообщений

Отправлено 22 ноября 2017 - 09:02

фигня одним словом.


  • 0

#6 Sher

Sher

    МЕСТНЫЙ

  • 67 topics
  • Пользователи
  • PipPipPip
  • 573 сообщений

Отправлено 28 ноября 2017 - 04:44

Ну посмотрим как будет дальше,действительно ли это будущие.


  • 0

#7 Fly333

Fly333

    МЕСТНЫЙ

  • 40 topics
  • Пользователи
  • PipPipPip
  • 556 сообщений
  • Откуда:ОАЭ

Отправлено 21 декабря 2017 - 10:53

Для начала нужно во всем хорошенько разобраться.


  • 0

#8 aSSop

aSSop

    МЕСТНЫЙ

  • 50 topics
  • Пользователи
  • PipPipPip
  • 1 348 сообщений

Отправлено 07 января 2018 - 06:44

Ну может и будущее.


  • 0

#9 Progat

Progat

    МЕСТНЫЙ

  • 54 topics
  • Пользователи
  • PipPipPip
  • 587 сообщений

Отправлено 13 января 2018 - 10:12

Ну не плохо.


  • 0

#10 Sagan

Sagan

    МЕСТНЫЙ

  • 82 topics
  • Пользователь
  • PipPipPip
  • 302 сообщений

Отправлено 16 января 2018 - 09:03

Всё так просто и доступно.


  • 0

#11 Gastro

Gastro

    Новичок

  • 65 topics
  • Пользователь
  • Pip
  • 27 сообщений

Отправлено 26 января 2018 - 09:02

Да очень доступно.


  • 0




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных