Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

NTFS - Процесс без файла - глюк или фантастика ?


Страницы:   1 2

kaZaNoVa ©   (2004-11-20 15:38:00) 

Недавно мне попалась статья о том, что используя механизм файловых потоков NTFS можно реализовывать некоторые интересные идеи.
Например если запустить программу из файлового потока, то можно "файл-носитель" удалить(!), а программа будет далее работать !
- имхо один из самых лучших способов самоудаления для инсталляторов, а также _очень_ хороший способ защиты от изменений ЕХЕ
- для защиты коммерческого ПО - основной ЕХЕ можно хранить зашифрованным, и используя этот механизм возможно фактически "процесс без исполняемого файла !" - то есть кракер НЕ СМОЖЕТ исследовать ЕХЕ так,как ЕГО НЕТ НА диске !!!

мой главный вопрос - это глюк, связанный с недоработкой файловой системы NTFS или стандарная возможность системы ?

и еще, работает ли это на ХР SP2 ? (просьба протестировать код)
и будет ли работать в ледующих версиях системы ? (LongHorn ?)
(у меня на 2003 работает) ;)

а также - есть ли документация на файловые потоки NTFS ?

код:

program TestNTFS;

uses
 Windows,SysUtils;

const StreamName=':sys_file_system';

Var zapusk:integer;
my,target:string;

function CopyFileI(source, dest:pchar):boolean;
var h,h2:integer;
mas:array[1..2048] of byte;
i:cardinal;
done:cardinal;
begin
result:=false;  h:=0;  h2:=0;

Try
 h:=CreateFile(source,GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
 h2:=CreateFile(dest,GENERIC_WRITE,FILE_SHARE_WRITE,nil,OPEN_ALWAYS,0,0);
if (h2<=0) or (h<=0) then exit;

while ReadFile(h,mas,sizeof(mas),done,nil) and (done<>0) do
        WriteFile(h2,mas,done,i,nil);
Except End;

  CloseHandle(h);
   CloseHandle(h2);
result:=true;
end;

begin
if pos(StreamName,Paramstr(0))>0 then begin
MessageBox(0,'Ура, Мы свободны !!','Фантастика',mb_ok);
 MessageBox(0,'Мы работаем без файла !!!','Фантастика v2',mb_ok);
  Exit;
end;

my:=Paramstr(0);
target:=ChangeFileExt(my,'.txt');

if CopyFileI(Pchar(my),Pchar(target+StreamName)) then
begin
zapusk:=WinExec(PChar(target+StreamName),SW_SHOWDEFAULT);
 if zapusk<32 then MessageBox(0,Pchar(SysErrorMessage(GetLastError)),Pchar('Ошибка # '+IntToStr(GetLastError)),0);
   Sleep(350);
     if not DeleteFile(Pchar(target)) then MessageBox(0,Pchar(SysErrorMessage(GetLastError)),Pchar('Ошибка # '+IntToStr(GetLastError)),0);
end;

end.


kaZaNoVa   (2004-11-20 18:38:00) [21]

имхо .. новое то, что фактически ехе работает без файла ;)

Piter ©   (20.11.04 18:32) [6]
я в соседней теме уже долго над этим бьюсь ..
пока выходин не очень грамотно ...


Piter   (2004-11-20 18:32:00) [22]

Хм, ну и что? Не понимаю восторгов. С таким же успехом можно создать удаленный поток, который убьет любой файл (в том числе и EXE), после чего завершится.


Игорь Шевченко   (2004-11-20 18:32:00) [23]

Я нифига не понял. Ты переписываешь свой exeшник в именованный поток текстового файла, запускаешь его, после этого удаляешь безымянный поток текстового файла, и что тут нового ?
Точно также ты можешь переписать exeшник в один файл, запустить его, удалить любой другой файл и твой процесс будет работать. Что нового ?


kaZaNoVa   (2004-11-20 18:23:00) [24]

файл тхт тоже удаляется ;)


kaZaNoVa   (2004-11-20 18:19:00) [25]

Напоминаю смысл кода:

первоначально файла .ТХТ нет!
он создаётся на время работы, при этом программа стартует из него, и ЕХЕ таким образом свободен ;)
- то еть его (ехе можно удалить программой, запущенной из .тхт, которая уже работает без файла на диске !)

Piter ©   (20.11.04 18:14) [2]
Ты не совсем понял смысла кода - попробуй запустить, велезет мессага - её не закрывай, удали ехе - и фактически программа работает сама по себе :)))

-

> Насчет вот удалить не получится
а у меня - именно УДАЛИТЬ !!


Piter   (2004-11-20 18:14:00) [26]

kaZaNoVa ©   (20.11.04 15:38)
Например если запустить программу из файлового потока, то можно "файл-носитель" удалить (!), а программа будет далее


а чего ты так переживаешь? Насчет вот удалить не получится - но вот переместить EXE'шник (в том числе переименовать его, дать ему расширение TXT например) во время работы программы в NT системах можно (NTFS не при чем)


Игорь Шевченко   (2004-11-20 17:57:00) [27]

А файл-то при этом на диске есть ? Который .txt ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо