// вы читаете...

Новости

NTFS Streams



memo1.Lines.Add(‘Stream size: ‘+IntToStr(sid.Size));
s:=’Type of data: ‘;
case sid.dwStreamId of // определяем тип потока
BACKUP_DATA: s := s+’data’;
BACKUP_EA_DATA: s := s+’extended attributes’;
BACKUP_SECURITY_DATA: s := s+’security’;
BACKUP_ALTERNATE_DATA: s := s+’other streams’;
BACKUP_LINK: s := s+’link’;
else s := s+’unknown’;
end;
memo1.Lines.Add(s);
if sid.Size>0 then
{ я не думаю, что у кого-то есть потоки больше 4ГБ, поэтому второй параметр поиска = 0 }
BackupSeekA(h, sid.Size, 0, @dw1, @dw2, p);
end;
BackupRead(h, @sid, 0, temp, TRUE, FALSE, p);
CloseHandle(h);
end;

Вот теперь мы знаем о потоках “почти всё”. :) Осталось самое интересное – обещаная возможность выполненя программы без основного exe или самоуничтожение exe. Эту фишку обнаружил X[ei]NOmorph, за что ему большое спасибо.
Как уже многие подозревают, раз в потоки можно записать всё что угодно, значит можно и exe. Так-с… Для начала запишем какую-нить прогу в текстовый файл и запустим (для запуска подойдёт WinExec(‘some_file:somestream’, SW_SHOWDEFAULT)). Вот что мы видим в “Диспетчере задач Windows”:

Значит можно запускать не только exe. :) Неподготовленный юзер не слабо удивиться увидев такое. Но это мелочь, сейчас будет веселее – удаляем 2.txt… Файла больше нет, а программа работает, и довольно уверенно работает. (главное чтобы она вся была загружена, т.е. не содержала большого объёма данных) Это говорит о том, что в MS плохо тестируют своё ПО… Если ещё и сокрыть процесс от глаз “Диспетчера задач”, то эта дырка позволяет сделать всеми любимый в прошлом резидент Ring3. Можно создать “невидимое юзером” окно и при закрытии винды записывать себя на диск, а при запуске удалять себя. Вот небольшой пример “самоудаленья”:
program KillYourself;

{$APPTYPE CONSOLE}

uses
Windows;

const StreamName=’:dead_stream’;

function CopyFileI(source, dest:pchar):boolean;
var h,h2:integer;
mas:array[1..2048] of byte;
i:cardinal;
done:cardinal;
begin
result:=false;
h:=CreateFile(source,GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
if h=-1 then exit;
h2:=CreateFile(dest,GENERIC_WRITE,FILE_SHARE_WRITE,nil,OPEN_ALWAYS,0,0);

Страницы: 1 2 3 4 5

Обсуждене

Отзывов нет на «NTFS Streams»

Ваш отзыв

Рубрики