O usuwaniu plików (na NTFS)

Tym razem kilka słów o tym, jak skutecznie usunąć plik na NTFS z poziomu działającego systemu operacyjnego. Po co? By zatrzeć za sobą ślady. Chodzi na przykład o taką sytuację, gdy zlecenie jest wykonywane na sprzęcie zleceniodawcy, bo istniejące polityki nie pozwalają na podpięcie własnego sprzętu. A przy okazji chodzi mi o pokazanie jak łatwo jest odzyskać usunięte (nie zamazane) dane. Nie będę się zajmował rozważaniami ile razy trzeba coś nadpisać, by oni nic nie odzyskali.

Narzędzia...
Tym razem wykorzystam fajny zestaw narzędzi o nazwie Sleuthkit. Co prawda można ułatwiać sobie życie korzystając dodatkowo z Autopsy, ale obejdzie się bez tego.
Całość testów wykonuję na pamięci USB, dla oszczędności czasu 256MiB przestrzeni w zupełności wystarczy.

No to zaczynamy...
Na początku kilka informacji o systemie plików, które można uzyskać za pomocą narzędzia fsstat. Jak widać system plików to NTF w wersji z Windows XP. Świeżo sformatowany.

`
FILE SYSTEM INFORMATION


File System Type: NTFS
Volume Serial Number: 28545FF7545FC66A
OEM Name: NTFS
Version: Windows XP

METADATA INFORMATION


First Cluster of MFT: 170666
First Cluster of MFT Mirror: 255999
Size of MFT Entries: 1024 bytes
Size of Index Records: 4096 bytes
Range: 0 – 31
Root Directory: 5

CONTENT INFORMATION


Sector Size: 512
Cluster Size: 512
Total Cluster Range: 0 – 511998
Total Range in Image: 0 – 498014
Total Sector Range: 0 – 511998

$AttrDef Attribute Values:
$STANDARDINFORMATION (16) Size: 48-72 Flags: Resident
$ATTRIBUTE
LIST (32) Size: No Limit Flags: Non-resident
$FILENAME (48) Size: 68-578 Flags: Resident,Index
$OBJECT
ID (64) Size: 0-256 Flags: Resident
$SECURITYDESCRIPTOR (80) Size: No Limit Flags: Non-resident
$VOLUME
NAME (96) Size: 2-256 Flags: Resident
$VOLUMEINFORMATION (112) Size: 12-12 Flags: Resident
$DATA (128) Size: No Limit Flags:
$INDEX
ROOT (144) Size: No Limit Flags: Resident
$INDEXALLOCATION (160) Size: No Limit Flags: Non-resident
$BITMAP (176) Size: No Limit Flags: Non-resident
$REPARSE
POINT (192) Size: 0-16384 Flags: Non-resident
$EAINFORMATION (208) Size: 8-8 Flags: Resident
$EA (224) Size: 0-65536 Flags:
$LOGGED
UTILITY_STREAM (256) Size: 0-65536 Flags: Non-resident
`

Za pomocą narzędzia fls można obejrzeć co jest w tej chwili “na dysku”:

r/r 4-128-4: $AttrDef r/r 8-128-2: $BadClus r/r 8-128-1: $BadClus:$Bad r/r 6-128-1: $Bitmap r/r 7-128-1: $Boot d/d 11-144-4: $Extend r/r 25-144-2: $Extend/$ObjId:$O r/r 24-144-3: $Extend/$Quota:$O r/r 24-144-2: $Extend/$Quota:$Q r/r 26-144-2: $Extend/$Reparse:$R r/r 2-128-1: $LogFile r/r 0-128-1: $MFT r/r 1-128-1: $MFTMirr r/r 9-128-8: $Secure:$SDS r/r 9-144-6: $Secure:$SDH r/r 9-144-5: $Secure:$SII r/r 10-128-1: $UpCase r/r 3-128-3: $Volume
Po założeniu katalogu test i utworzeniu w nim pliku test.txt całość wygląda tak (czasami trzeba chwilę zaczekać, by system zrobił sync na pena):
r/r 4-128-4: $AttrDef r/r 8-128-2: $BadClus r/r 8-128-1: $BadClus:$Bad r/r 6-128-1: $Bitmap r/r 7-128-1: $Boot d/d 11-144-4: $Extend r/r 25-144-2: $Extend/$ObjId:$O r/r 24-144-3: $Extend/$Quota:$O r/r 24-144-2: $Extend/$Quota:$Q r/r 26-144-2: $Extend/$Reparse:$R r/r 2-128-1: $LogFile r/r 0-128-1: $MFT r/r 1-128-1: $MFTMirr r/r 9-128-8: $Secure:$SDS r/r 9-144-6: $Secure:$SDH r/r 9-144-5: $Secure:$SII r/r 10-128-1: $UpCase r/r 3-128-3: $Volume d/d 27-144-1: test r/r 28-128-1: test/test.txt
Jak widać pojawił się zarówno założony katalog, jak i plik. Teraz można obejrzeć dokładniejsze informacje (metadane) na temat stworzonego pliku za pomocą polecenia istat :
`
MFT Entry Header Values:
Entry: 28 Sequence: 1
$LogFile Sequence Number: 1056000
Allocated File
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags: Archive
Owner ID: 0
Created: Fri Feb 01 12:54:07 2008
File Modified: Fri Feb 01 12:54:07 2008
MFT Modified: Fri Feb 01 12:54:07 2008
Accessed: Fri Feb 01 12:54:07 2008

$FILE_NAME Attribute Values:
Flags: Archive
Name: test.txt
Parent MFT Entry: 27 Sequence: 1
Allocated Size: 0 Actual Size: 0
Created: Fri Feb 01 12:54:07 2008
File Modified: Fri Feb 01 12:54:07 2008
MFT Modified: Fri Feb 01 12:54:07 2008
Accessed: Fri Feb 01 12:54:07 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-2) Name: N/A Resident size: 82
Type: $DATA (128-1) Name: $Data Resident size: 18
`

To samo polecenie po usunięciu pliku (standardowym poleceniem del) pokaże coś takiego:
`
MFT Entry Header Values:
Entry: 28 Sequence: 2
$LogFile Sequence Number: 1057735
Not Allocated File
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags: Archive
Owner ID: 0
Created: Fri Feb 01 12:54:07 2008
File Modified: Fri Feb 01 12:54:07 2008
MFT Modified: Fri Feb 01 12:54:07 2008
Accessed: Fri Feb 01 12:54:07 2008

$FILE_NAME Attribute Values:
Flags: Archive
Name: test.txt
Parent MFT Entry: 27 Sequence: 1
Allocated Size: 0 Actual Size: 0
Created: Fri Feb 01 12:54:07 2008
File Modified: Fri Feb 01 12:54:07 2008
MFT Modified: Fri Feb 01 12:54:07 2008
Accessed: Fri Feb 01 12:54:07 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-2) Name: N/A Resident size: 82
Type: $DATA (128-1) Name: $Data Resident size: 18
Jak widać jedyną różnicą między plikiem usuniętym, a istniejącym jest to, że rekord w MFT został oznaczony jako niewykorzystany. Niezmienione pozostały natomiast wszelkie informacje o pliku (metadane), jak i sama zawartość pliku, którą łatwo odczytać za pomocą narzędzia _icat_ podając adres strumienia $DATA, czyli w tym przypadku 28-128-1:
E:\test\test.txt
`

Jednym z narzędzi, które pozwalają na nadpisanie usuwanego pliku jest sdelete z Sysinternals. Standardowo nie jest ono dostępne w systemie, ma jednak taką zaletę, że nie wymaga instalacji. Po usunięciu pliku za jego pomocą, stosowny rekord w MFT wygląda tak (wcześniej zawartość nośnika odtworzyłem z obrazu stworzonego na samym początku):
`
MFT Entry Header Values:
Entry: 28 Sequence: 2
$LogFile Sequence Number: 1063254
Not Allocated File
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags: Archive
Owner ID: 0
Created: Fri Feb 01 12:54:07 2008
File Modified: Fri Feb 01 13:10:24 2008
MFT Modified: Fri Feb 01 13:10:24 2008
Accessed: Fri Feb 01 13:10:24 2008

$FILE_NAME Attribute Values:
Flags: Archive
Name: ZZZZ.ZZZ
Parent MFT Entry: 27 Sequence: 1
Allocated Size: 24 Actual Size: 18
Created: Fri Feb 01 12:54:07 2008
File Modified: Fri Feb 01 13:10:24 2008
MFT Modified: Fri Feb 01 13:10:24 2008
Accessed: Fri Feb 01 13:10:24 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-28) Name: N/A Resident size: 82
Type: $DATA (128-1) Name: $Data Resident size: 18
Jak widać zmian jest zdecydowanie więcej niż w przypadku zwykłego usunięcia. Dodatkowo nadpisana została nazwa pliku. Nie można odczytać również zawartości pliku, bo została nadpisana:
▬\║żE+wKťq ę}‼Ć↕
`

A jak wyczyścić dane po usunięciu?

W tym celu trzeba nadpisać całą wolną przestrzeń dysku. Wada jest taka, że mogą pozostać metadane o plikach. Aby to dokładniej pokazać, utworzę dodatkowo kilka plików:
r/r 4-128-4: $AttrDef r/r 8-128-2: $BadClus r/r 8-128-1: $BadClus:$Bad r/r 6-128-1: $Bitmap r/r 7-128-1: $Boot d/d 11-144-4: $Extend r/r 25-144-2: $Extend/$ObjId:$O r/r 24-144-3: $Extend/$Quota:$O r/r 24-144-2: $Extend/$Quota:$Q r/r 26-144-2: $Extend/$Reparse:$R r/r 2-128-1: $LogFile r/r 0-128-1: $MFT r/r 1-128-1: $MFTMirr r/r 9-128-8: $Secure:$SDS r/r 9-144-6: $Secure:$SDH r/r 9-144-5: $Secure:$SII r/r 10-128-1: $UpCase r/r 3-128-3: $Volume d/d 27-144-5: test r/r 29-128-1: test/1.txt r/r 38-128-1: test/10.txt r/r 30-128-1: test/2.txt r/r 31-128-1: test/3.txt r/r 32-128-1: test/4.txt r/r 33-128-1: test/5.txt r/r 34-128-1: test/6.txt r/r 35-128-1: test/7.txt r/r 36-128-1: test/8.txt r/r 37-128-1: test/9.txt r/r 28-128-1: test/test.txt
Po usunięciu plików (łączenie z katalogiem) całość wygląda tak:
r/r 4-128-4: $AttrDef r/r 8-128-2: $BadClus r/r 8-128-1: $BadClus:$Bad r/r 6-128-1: $Bitmap r/r 7-128-1: $Boot d/d 11-144-4: $Extend r/r 25-144-2: $Extend/$ObjId:$O r/r 24-144-3: $Extend/$Quota:$O r/r 24-144-2: $Extend/$Quota:$Q r/r 26-144-2: $Extend/$Reparse:$R r/r 2-128-1: $LogFile r/r 0-128-1: $MFT r/r 1-128-1: $MFTMirr r/r 9-128-8: $Secure:$SDS r/r 9-144-6: $Secure:$SDH r/r 9-144-5: $Secure:$SII r/r 10-128-1: $UpCase r/r 3-128-3: $Volume d/- 0: test

Informacje o starych plikach można uzyskać na przykład przy pomocy narzędzia ils (rezultat trochę uproszczony):
27|f|0|0|1201868630|1201868630|1201868630|40777|1|4144|0|0 28|f|0|0|1201866847|1201866847|1201866847|100777|1|18|0|0 29|f|0|0|1201868555|1201868555|1201868555|100777|1|33|0|0 30|f|0|0|1201868555|1201868555|1201868555|100777|1|48|0|0 31|f|0|0|1201868555|1201868555|1201868555|100777|1|63|0|0 32|f|0|0|1201868555|1201868555|1201868555|100777|1|78|0|0 33|f|0|0|1201868555|1201868555|1201868555|100777|1|93|0|0 34|f|0|0|1201868555|1201868555|1201868555|100777|1|108|0|0 35|f|0|0|1201868555|1201868555|1201868555|100777|1|123|0|0 36|f|0|0|1201868555|1201868555|1201868555|100777|1|138|0|0 37|f|0|0|1201868555|1201868555|1201868555|100777|1|153|0|0 38|f|0|0|1201868555|1201868555|1201868555|100777|1|169|0|0
W pierwszej kolumnie znajduje się informacja gdzie szukać danych o danym obiekcie. Dla przykładu pod numerem 27 kryje się informacja o katalogu:
`
MFT Entry Header Values:
Entry: 27 Sequence: 2
$LogFile Sequence Number: 1066176
Not Allocated Directory
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags:
Owner ID: 0
Created: Fri Feb 01 12:54:00 2008
File Modified: Fri Feb 01 13:23:50 2008
MFT Modified: Fri Feb 01 13:23:50 2008
Accessed: Fri Feb 01 13:23:50 2008

$FILE_NAME Attribute Values:
Flags: Directory
Name: test
Parent MFT Entry: 5 Sequence: 5
Allocated Size: 0 Actual Size: 0
Created: Fri Feb 01 12:54:00 2008
File Modified: Fri Feb 01 12:54:00 2008
MFT Modified: Fri Feb 01 12:54:00 2008
Accessed: Fri Feb 01 12:54:00 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-2) Name: N/A Resident size: 74
Type: $INDEXROOT (144-5) Name: $I30 Resident size: 48
Type: $INDEX
ALLOCATION (160-3) Name: $I30 Non-Resident size: 4096
170655 170656 170657 170658 170659 170660 170661 170662
Type: $BITMAP (176-4) Name: $I30 Resident size: 8
A pod numerem 38, informacja o jednym z plików:
MFT Entry Header Values:
Entry: 38 Sequence: 2
$LogFile Sequence Number: 1065344
Not Allocated File
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags: Archive
Owner ID: 0
Created: Fri Feb 01 13:22:35 2008
File Modified: Fri Feb 01 13:22:35 2008
MFT Modified: Fri Feb 01 13:22:35 2008
Accessed: Fri Feb 01 13:22:35 2008

$FILE_NAME Attribute Values:
Flags: Archive
Name: 10.txt
Parent MFT Entry: 27 Sequence: 1
Allocated Size: 0 Actual Size: 0
Created: Fri Feb 01 13:22:35 2008
File Modified: Fri Feb 01 13:22:35 2008
MFT Modified: Fri Feb 01 13:22:35 2008
Accessed: Fri Feb 01 13:22:35 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-2) Name: N/A Resident size: 78
Type: $DATA (128-1) Name: $Data Resident size: 169
Dla porządku odczytajmy jego zawartość:
E:\test\1.txt
E:\test\10.txt
E:\test\2.txt
E:\test\3.txt
E:\test\4.txt
E:\test\5.txt
E:\test\6.txt
E:\test\7.txt
E:\test\8.txt
E:\test\9.txt
E:\test\test.txt
`

To teraz pora na wyczyszczenie wolnego miejsca. Dla odmiany do tego zadania użyję narzędzia, które jest w systemie, a mianowicie polecenia cipher /w:nazwadysku_. Powoduje to nadpisanie całości wolnego miejsca trzy razy:

Rezultat polecenia ils na nadpisanym dysku nie różni się bardzo od poprzedniego rezultatu (choć można zauważyć różnice w kolumnach oznaczających daty, a także różnicę w kolumnie określającej rozmiar):
27|f|0|0|1201869267|1201869267|1201869267|40777|1|48|0|0 28|f|0|0|1201869311|1201869311|1201869311|100777|1|258990592|0|0 29|f|0|0|1201869311|1201869311|1201869311|100777|1|736|0|0 30|f|0|0|1201869311|1201869311|1201869311|100777|1|736|0|0 31|f|0|0|1201869311|1201869311|1201869311|100777|1|736|0|0 32|f|0|0|1201869311|1201869311|1201869311|100777|1|736|0|0 33|f|0|0|1201869311|1201869311|1201869311|100777|1|736|0|0 34|f|0|0|1201869311|1201869311|1201869311|100777|1|0|0|0 35|f|0|0|1201869267|1201869267|1201869267|100777|1|0|0|0 36|f|0|0|1201868555|1201868555|1201868555|100777|1|138|0|0 37|f|0|0|1201868555|1201868555|1201868555|100777|1|153|0|0 38|f|0|0|1201868555|1201868555|1201868555|100777|1|169|0|0
Odczytajmy jednak metadane dotyczące rekordu 27:
`
MFT Entry Header Values:
Entry: 27 Sequence: 5
$LogFile Sequence Number: 1757094
Not Allocated Directory
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags:
Owner ID: 0
Created: Fri Feb 01 13:34:27 2008
File Modified: Fri Feb 01 13:34:27 2008
MFT Modified: Fri Feb 01 13:34:27 2008
Accessed: Fri Feb 01 13:34:27 2008

$FILE_NAME Attribute Values:
Flags: Directory
Name: EFSTMPWP
Parent MFT Entry: 5 Sequence: 5
Allocated Size: 0 Actual Size: 0
Created: Fri Feb 01 13:34:27 2008
File Modified: Fri Feb 01 13:34:27 2008
MFT Modified: Fri Feb 01 13:34:27 2008
Accessed: Fri Feb 01 13:34:27 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-2) Name: N/A Resident size: 82
Type: $INDEX_ROOT (144-1) Name: $I30 Resident size: 48
Jak widać polecenie _cipher_ samo do swojej pracy zakłada katalog (a w nim tworzy pliki), do których pisze. Tak się więc złożyło, że wcześniejszy katalog został "ponownie wykorzystany" i w MFT znajdują się dane dotyczące katalogu stworzonego w trakcie czyszczenia. Wracając do rezultatów polecenia _ils_ można zauważyć, że zmodyfikowane zostały rekordy od 27 do 35 włącznie. Dla pewności _istat_ dla 35:
MFT Entry Header Values:
Entry: 35 Sequence: 4
$LogFile Sequence Number: 1594460
Not Allocated File
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags: Archive
Owner ID: 0
Created: Fri Feb 01 13:34:27 2008
File Modified: Fri Feb 01 13:34:27 2008
MFT Modified: Fri Feb 01 13:34:27 2008
Accessed: Fri Feb 01 13:34:27 2008

$FILE_NAME Attribute Values:
Flags: Archive
Name: 13.E
Parent MFT Entry: 27 Sequence: 3
Allocated Size: 0 Actual Size: 0
Created: Fri Feb 01 13:34:27 2008
File Modified: Fri Feb 01 13:34:27 2008
MFT Modified: Fri Feb 01 13:34:27 2008
Accessed: Fri Feb 01 13:34:27 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-2) Name: N/A Resident size: 74
Type: $DATA (128-1) Name: $Data Resident size: 0
`

Jednak sprawdzany wcześniej rekord 38 pozostał niezmieniony:
`
MFT Entry Header Values:
Entry: 38 Sequence: 2
$LogFile Sequence Number: 1065344
Not Allocated File
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags: Archive
Owner ID: 0
Created: Fri Feb 01 13:22:35 2008
File Modified: Fri Feb 01 13:22:35 2008
MFT Modified: Fri Feb 01 13:22:35 2008
Accessed: Fri Feb 01 13:22:35 2008

$FILE_NAME Attribute Values:
Flags: Archive
Name: 10.txt
Parent MFT Entry: 27 Sequence: 1
Allocated Size: 0 Actual Size: 0
Created: Fri Feb 01 13:22:35 2008
File Modified: Fri Feb 01 13:22:35 2008
MFT Modified: Fri Feb 01 13:22:35 2008
Accessed: Fri Feb 01 13:22:35 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-2) Name: N/A Resident size: 78
Type: $DATA (128-1) Name: $Data Resident size: 169
`

Nadal można odczytać metadane o pliku, w szczególności:

Co więcej okazuje się, że zawartość części plików nadal można odczytać (w szczególności dla rekordu 38):
E:\test\1.txt E:\test\10.txt E:\test\2.txt E:\test\3.txt E:\test\4.txt E:\test\5.txt E:\test\6.txt E:\test\7.txt E:\test\8.txt E:\test\9.txt E:\test\test.txt
Dlaczego? Dlatego, że rozmiar pliku jest mały, całość danych mieści się w MFT, a rekord MFT nie jest nadpisywany podczas pisania do pliku. Ups... Co potrafi zrobić sdelete? Uruchamiam go na dysku wcześniej wyczyszczonym (jak się okazuje – nie do końca skutecznie) przy pomocy cipher. Rezultat? Najpierw ils :
27|f|0|0|1201870875|1201870875|1201870875|100555|1|258990592|0|0 28|f|0|0|1201871159|1201871159|1201871159|100555|1|728|0|0 29|f|0|0|1201871159|1201871159|1201871159|100555|1|720|0|0 30|f|0|0|1201871160|1201871160|1201871160|100555|1|720|0|0 31|f|0|0|1201871161|1201871161|1201871161|100555|1|720|0|0 32|f|0|0|1201871161|1201871161|1201871161|100555|1|720|0|0 33|f|0|0|1201871161|1201871161|1201871161|100555|1|720|0|0 34|f|0|0|1201871161|1201871161|1201871161|100555|1|720|0|0 35|f|0|0|1201871162|1201871162|1201871162|100555|1|720|0|0 36|f|0|0|1201871162|1201871162|1201871162|100555|1|720|0|0 37|f|0|0|1201871162|1201871162|1201871162|100555|1|720|0|0 38|f|0|0|1201871162|1201871162|1201871162|100555|1|720|0|0 39|f|0|0|1201871163|1201871163|1201871163|100555|1|720|0|0 40|f|0|0|1201871163|1201871163|1201871163|100555|1|720|0|0 41|f|0|0|1201871164|1201871164|1201871164|100555|1|720|0|0 42|f|0|0|1201871164|1201871164|1201871164|100555|1|720|0|0 43|f|0|0|1201871164|1201871164|1201871164|100555|1|720|0|0 44|f|0|0|1201871164|1201871164|1201871164|100555|1|720|0|0 45|f|0|0|1201871165|1201871165|1201871165|100555|1|720|0|0 46|f|0|0|1201871165|1201871165|1201871165|100555|1|720|0|0 47|f|0|0|1201871166|1201871166|1201871166|100555|1|720|0|0
Jak widać zmian jest sporo, przede wszystkim plików jest więcej. Wynika to z zasady działania sdelete opisanej na stronie narzędzia.

Co się kryje więc w nieszczęsnym rekordzie 38?
`
MFT Entry Header Values:
Entry: 38 Sequence: 3
$LogFile Sequence Number: 8562839
Not Allocated File
Links: 1

$STANDARD_INFORMATION Attribute Values:
Flags: Hidden, Archive
Owner ID: 0
Created: Fri Feb 01 14:06:02 2008
File Modified: Fri Feb 01 14:06:02 2008
MFT Modified: Fri Feb 01 14:06:02 2008
Accessed: Fri Feb 01 14:06:02 2008

$FILE_NAME Attribute Values:
Flags: Hidden, Archive
Name: SDELMFT000009
Parent MFT Entry: 5 Sequence: 5
Allocated Size: 0 Actual Size: 0
Created: Fri Feb 01 14:06:02 2008
File Modified: Fri Feb 01 14:06:02 2008
MFT Modified: Fri Feb 01 14:06:02 2008
Accessed: Fri Feb 01 14:06:02 2008

Attributes:
Type: $STANDARDINFORMATION (16-0) Name: N/A Resident size: 72
Type: $FILE
NAME (48-2) Name: N/A Resident size: 92
Type: $DATA (128-1) Name: $Data Resident size: 720
Jak widać założony został nowy plik, jego zawartość (720 bajtów) to losowe śmieci:
§B ŹůŕCKÚ!│ű↨▬ĺb‼đťŮ◄┬Gť┌čI♂poZŧŃ;|╔ň¸;ˇti╬┬»■{│/Ż├ľÜäöÝuö└Ľ:O«ĘźAPíe^T┴ŞŐč▓¸
kŐ* S♀6ięĺNg}bŇC↑´Uĺ■ ↔ľ▼U0T;>☺ëý|É=šâÍŤ⌂Ŕc k▬FR╚C-ôbó═Â/┌ä▒∟Ş=Ë♀ ĽX▲J<;/+ŁKí0┴ü
Z2pĹ☼žÜ┐┬§÷˘ë═Ú◄ĺŇęâd&ó↑g↨↓►ž→☼xŇŽh│ĆtLZÓţ╬F♂ň╦ŕäé§Š@⌂Đ┌.ľ▲x♠:°ŮAć[“hsź.ĺMS╬)hşý
☼”ź:Żĺ*ŹÉ§źE˙C[ž║ĺ♣%25
~ń▀→╬ÁkżU☼Đc§¸┌Hź░őŰšđý┴║Ö♫)UůKúĆ#đ=ç”YOőź|â↓â4♣Ň╩.Š
űäg6ĺô♥G˛ ]×ű°xćŮ╗&Ë0[├Ă>┴”0í˝╚┌↕ÉX%25⌂úOţ^Ü˝┤AŹäř¬┼╗§!~uYůŰĘôá{Ś'ř[LM■ áôGv9n♥Ť ╗}F´S╝┤gÝ)°8ňDńŘ<ľ,¬▀Š╔g,░ťč▓ËTU8ŐĹĚ☺ŁI÷O┘lT&Ż├⌂Rv▲↔Č♫«ĘśÓ░|ĎOK.kĚ╝ ♫Ą░
RłB˝{ç§EYóŕöEÜ♫H
ÓŻ¨¸WŢJ3ZÝ♫Q☺8░$áNĐŇĹ┤224█ŇI3O
6♂1┴9╚š↨♀☼↕đsb└►¶áńRë╦♥R┤♫/*R 9╗Ë!#Njşď{ĺ☼Kş║ŽÖ╔ ĆŰż└żhmů:đ█łů5#Ő+zŕ░Ć♀>ÎÚ═─(ÉQ‼ýuM[í­LJM└Ą0↕Męa♥/ █6˘¸(→▲3ć♂l)F$[˝rUŰ↑▓ÁŽĽp↓▀■;ň 8Ři"gř☺Đ9(ě⌂Íľ¨→H┐J♥72md÷Őň──Łz┘K÷ŮŁmć

Sukces!
Cel został osiągnięty. Usunięte zostały nie tylko informacje zawarte w pliku, ale również metadane opisujące usunięte pliki. Co prawda wiadomo, że coś było, nie wiadomo jednak dokładnie co i kiedy...

Oryginał tego wpisu dostępny jest pod adresem O usuwaniu plików (na NTFS)

Autor: Paweł Goleń