…czyli kontynuacja cyklu „człowiek uczy się całe życie” bo temat do świeżych nie należy. jaki jest dokładnie cel ADS nie potrafię zrozumieć – konkretnie, nie widzę praktycznego zastosowania dla tego wynalzq [czy coś normalnie z tego korzysta? skąd ten pomysł?]. ale coś takiego jest. ogólne przeznaczenie oznacza, iż każdy plik w NTFS może zawierać kilka strumieni danych. jeden z nich przetrzymuje informacje o ACL, inny realne dane. jak dotąd rozsądnie i nie widać nic dziwnego. dziwnie zaczyna się robić w momencie, kiedy dodamy informację, że realne dane mogą być de facto linkiem do innego strumienia danych. „robi się dziwniej i dziwniej, powiedziała alicja”… ponieważ oznacza to ni mniej ni więcej tylko tyle, że do pliq, może być dowiązany kolejny plik, który standardowo nie jest widoczny nigdzie w systemie. każdy listing pokaże nam plik np. 1kb podczas, gdy do niego jest dowiązany, niewidoczny DivX.

krótki test
c:copy con a.txt
wpisuje tu coś
^Z
c:echo i tu tez cos wpisze - ale to jest ukryte>a.txt:ukryty.plik

po wykonaniu komendy dir widać a.txt – ale nigdzie nie zobaczy sie ‚ukryty.plik’. wykonanie np. notepad a.txt:ukryty.plik – pokaże go i pozwoli wyedytować. sprawdzałem możliwość podczepienia pliq exe:
type calc.exe>notepad.exe:hiddencalc.exe
i działa. nie da się na szczęście takiego exe bezpośrednio uruchomić – trzeba go spowrotem przepisać do nowego pliq. przynajmniej tyle – bo nie jest to zbyt bezpieczny myk. kolejną ciekawostką jest fakt, że stary [nie]dobry type, strumieni nie obsługuje:

C:temp>type a.txt:new.exe
The filename, directory name, or volume label syntax is incorrect.

co nie znaczy, że nie da się tego zrobić innymi narzędziami. takich strumieni do pliq można dowiązać dowolnie wiele. w systemie vista i w2k8 polecenie dir zostało rozszerzone o dodatkowy parametr: /r, który wyświetla strumienie plików. przykładowy listing po doczepieniu 3 dodatkowych strumieni do pliq a.txt [w tym jednego pliq avi]:
C:temp>dir /r a.txt
Volume in drive C has no label.
Volume Serial Number is 0EAE-9628

Directory of C:temp

2008-12-16 19:15 5 a.txt
6 106 624 a.txt:avi.avi:$DATA
7 a.txt:new.txt:$DATA
9 a.txt:new2.txt:$DATA
1 File(s) 5 bytes
0 Dir(s) 19 567 476 736 bytes free

niestety [a może stety] żaden program nie był stanie otworzyć pliq a.txt:avi.avi – ciekawe, że notepad bez problemu otwiera a.txt:new.txt.

usunięcie pliq-linq, powoduje usunięcie wszystkich związanych z nim strumieni.

c:temp>dir
[...]
2008-12-16 19:15 5 a.txt
[...]
82 File(s) 129 929 767 bytes
14 Dir(s) 19 567 472 640 bytes free
c:temp>del a.txt
c:temp>dir
[...]
14 Dir(s) 19 573 579 776 bytes free

i tak widać, że usunięcie 5b pliq spowodowało zwolnienie ponad 6MB danych.

ponieważ w systemach XP- nie ma jak tego standardowo sprawdzić, dostępne są różne narzędzia, które wyświetlają te streamy – np. sysinternalsowy ‚streams.exe’.

kiedy poszpera się dalej można trafić na ciekawy art jeszcze z czasów w2k, do którego dodany jest ‚NTFSext.exe’, w którym znaleźć można bibliotekę ‚strmExt.dll’. po jej rejestracji [skopiować do system32 i wykonać regsvr32 strmext.dll] dodawana jest informacja w explorerze o ADS. aby dodadkowa zakładka była dodana również do folderu, należy wyedytować następujące klucze:

HKEY_CLASSES_ROOTDirectoryshellexPropertySheetHandlers{C3ED1679-814B-4DA9-AB00-1CAC71F5E337}
HKEY_CLASSES_ROOTDriveshellexPropertySheetHandlers{C3ED1679-814B-4DA9-AB00-1CAC71F5E337}

i na koniec jeszcze jeden link – spojrzenie od strony [nie]bezpieczeństwa.

****UPDATE
ponieważ ‚type’ nie rozumie streamów pozostaje pytanie – w jaki sposób go odczytać? spokojnie potrafi go zinterpretować windowsowa kompilacja linuxowego ‚cat’ – do zassania z projektu unxutils.
i jeszcze jedna ciekawostka: streamy można doczepiać również do katalogu:
c:temp>mkdir teststream
c:temp>echo ukryty opis katalogu>teststream:hidden
c:temp>dir /r teststream
Volume in drive C has no label.
Volume Serial Number is 0EAE-9628

Directory of C:tempteststream

2008-12-19 14:06

.
4 .:hidden:$DATA
2008-12-19 14:06
..
0 File(s) 0 bytes