![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
NTFS - Процесс без файла - глюк или фантастика ?
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 ?