Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Безвозвратное удаление


Автор: shapka1ushanka 21.5.2010, 01:22
Привет
Подскажите пожалуйста, как можно удалить файл безвозвратно?

Автор: ~FoX~ 21.5.2010, 10:16
Цитата(shapka1ushanka @  21.5.2010,  02:22 Найти цитируемый пост)
Привет
Подскажите пожалуйста, как можно удалить файл безвозвратно? 

Несколько раз записать на место бывшего файла случайные данные...

Автор: shapka1ushanka 21.5.2010, 11:48
То есть достаточно открыть файл и записать туда нули?

А как, зная размер файла, определить сколько именно нулей писать?

Автор: Riply 21.5.2010, 11:51
Цитата(shapka1ushanka @  21.5.2010,  01:22 Найти цитируемый пост)
Привет
Подскажите пожалуйста, как можно удалить файл безвозвратно? 


Если надежно (т.е. враг 100% не сможет прочитать данные), то практически нереально (неимоверно сложно).
Слишком много следов (таких, как логирование) остается, по которым существует шанс восстановить даные.
Простейший пример: По какой-то причине (например дефрагментатор поработал или еще кто)
кластеры файла были "перемещены". Т.е. его данные существуют уже как минимум в
стольки местах, сколько раз данная операция производилась. Найти их все и почистить это утопия smile

У Rouse_ на сайте есть книга Брайан Кэрриэ "Криминалистический анализ файловых систем".
Можно ее почитать, дабы оставить всякую надежду smile

IMHO, единственный надежный способ - не создавать файл вообще,
ну или создавать на собственном диске, как это делает TrueCrypt.
.



Автор: ~FoX~ 21.5.2010, 11:54
Цитата(shapka1ushanka @  21.5.2010,  12:48 Найти цитируемый пост)
То есть достаточно открыть файл и записать туда нули?

Нет.... физически занимаемое файлом место... прям в файловой системе...

Автор: shapka1ushanka 21.5.2010, 12:09
Riply, да мне супернадежно не надо. Достаточно, чтобы простые програмки-восстановлялки не могли вернуть файл.
~FoX~, а как это место определить?

Автор: kami 21.5.2010, 23:43
Доп.вопрос, почти в тему...
Цитата(Riply @  21.5.2010,  11:51 Найти цитируемый пост)
его данные существуют уже как минимум встольки местах, сколько раз данная операция производилась. Найти их все и почистить это утопия

То есть (к примеру) - "шреддинг" файла какой-нибудь специализированной под это программой (например, BCWipe) и потом затирание свободного места на диске (ф-я Wipe free space той же программы) - это бессмысленная трата времени?
(спрашиваю не из праздного любопытства - очень актуальный для меня вопрос).

Автор: Riply 22.5.2010, 00:44
Цитата(kami @  21.5.2010,  23:43 Найти цитируемый пост)
То есть (к примеру) - "шреддинг" файла какой-нибудь специализированной под это программой (например, BCWipe) и потом затирание свободного места на диске (ф-я Wipe free space той же программы) - это бессмысленная трата времени?
(спрашиваю не из праздного любопытства - очень актуальный для меня вопрос). 


К сожалению, я не обладаю достаточным уровнем знаний, чтобы однозначно ответить на этот вопрос  :(
NTFS логирование - страшная штука и всего механизма его работы я не знаю.
 
Но можно попробовать пофантазировать и мысленно построить парочку примеров,
когда не спасет даже данная последовательность действий.
(данные или их часть можно будет прочесть)

Первый вариант: маленький файл вообще не имеет своих кластеров на диске.
Все его данные содержатся в MFT. Как и куда они переносятся при логировании, я не знаю.
Но я очень сильно сомневаюсь, что "программы чистильщики" не только затирают данные в самой MFT,
но еще и анализируют лог, чтобы найти в нем все их следы.
Сомневаюсь потому, что запись в MFT очень сложна, надо не только следить за контрольными битами в секторах,
но и корректно провести всю цепочку изменений в MFT, которую повлечет за собой запись.

Второй вариант: после уничтожения нашего файла, но перед затиранием свободного места,
создается довольно большой файл, но записывается в него только несколько байт в начало.
В принципе, он может "захватить" кластеры с нашими данными.
Система, при такой операции, реально не затирает его нулями, хотя API и возвращают нули при его чтении.
Прямое же чтение вернет реальное содержимое кластеров.
http://forum.sources.ru/index.php?showtopic=301351&st=0&#entry2577852 можно посмотреть как проверялось данное утверждение.
Вряд-ли при Wipe free space будут затираться и кластеры, "записанные" за этим файлом.
А значит их можно прочесть.

P.S.
 Это просто парочка примеров "с потолка", никак не претендующая на истину в последней инстанции smile 

Автор: Alca 22.5.2010, 07:56
http://www.xakep.ru/magazine/xa/101/034/1.asp

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)