Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Уничтожение файлов и папок


Автор: Асоишница 6.10.2014, 20:06
Здравствуйте!
Собственно это моё задание "Написать windows-приложение для гарантированного удаления файлов(каталогов) без возможности восстановления специализированным ПО".
Нашла на википедии информацию по алгоритмам уничтожения:
https://ru.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D1%87%D1%82%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85
1.Вопрос собственно в реализации: с чего начать. 
2.И может есть у кого какая-нибудь ещё полезная литература на эту тему?
3.Так же вопрос в том, как всё это обстоит с каталогами. Рекурсия?
Использую VS2013 если что.
Простое не знаю, за что сразу браться.

Автор: Alca 7.10.2014, 08:46
Что-то вроде этого https://bitbucket.org/skynowa/xlib/src/f620b351f285cc60997a436b44cc097bd36de6ba/Include/xLib/IO/File.cpp?at=master#cl-705

Автор: xvr 7.10.2014, 11:27
Цитата(Асоишница @  6.10.2014,  20:06 Найти цитируемый пост)
Собственно это моё задание "Написать windows-приложение для гарантированного удаления файлов(каталогов) без возможности восстановления специализированным ПО".

Задание интересное, особенно с учетом существования SSD, в которых применяют специальные алгоритмы перемещения записываемых блоков данных, что бы избежать частых записей в один и тит же физический блок FLASH'а. Так что любая многократная перезапись файла (на которой и базируются все алгоритмы уничтожения информации) имеет все шансы равномерно разлечься по разным физическим блокам FLASH, оставив исходную уничтожаемую информацию девственно нетронутой  smile 

Автор: Асоишница 7.10.2014, 16:57
xvr, буду надеяться, что у меня не такой smile 


Alca, Вы не могли бы вкратце описать, что там происходит? На чём основан алгоритм?

Автор: sQu1rr 7.10.2014, 20:59
Цитата(xvr @  7.10.2014,  11:27 Найти цитируемый пост)
Задание интересное, особенно с учетом существования SSD

А еще в разведке умеют определять последнии состояния байтов с помощью какого-то магнитного анализа smile


Цитата(Асоишница @  7.10.2014,  16:57 Найти цитируемый пост)
На чём основан алгоритм? 

Мне кажется самый простой вариант, записать данные рандомными битами, думаю любой алгоритм делает именно так, параноики делают по несколько итераций. Потому удалить ссылки на эти данные и директории с файловой системы

Автор: Асоишница 7.10.2014, 23:08
sQu1rr
Цитата(sQu1rr @  7.10.2014,  20:59 Найти цитируемый пост)
Мне кажется самый простой вариант, записать данные рандомными битами, думаю любой алгоритм делает именно так, параноики делают по несколько итераций. Потому удалить ссылки на эти данные и директории с файловой системы 

Да, пожалуй, самый простой способ. Но наверняка самый медленный.
А "на чём основан алгоритм" это к ссылке, которую прикрепил(а) Alca 

Автор: Dem_max 8.10.2014, 06:44
Цитата

по разным физическим блокам FLASH, оставив исходную уничтожаемую информацию девственно нетронутой


на SSD всегда уничтожаются старые данные командой TRIM

Автор: Alca 8.10.2014, 09:30
Цитата(Асоишница @  7.10.2014,  16:57 Найти цитируемый пост)
Alca, Вы не могли бы вкратце описать, что там происходит? На чём основан алгоритм?

Там же комменты есть

Сначала затираешь атрибуты файла, потом файл заполняется 0x55, 0xAA, random char, потом размер файла в нуль, потом ресетится время создание, изменение файла, потом рендомное переименование,  потом уже удаление файла. Затирку файла можно делать несколько раз

Автор: DarthTon 8.10.2014, 14:09
По поводу перезаписи содержимого файла - лучше перезаписать не файл, а сектора диска его содержащие:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364572(v=vs.85).aspx + http://msdn.microsoft.com/en-us/library/windows/desktop/dd405526(v=vs.85).aspx. Получим список групп кластеров файла относительно начала тома (не сработает для файлов <1КБ ибо они хранятся непосредственно в МФТ). Так же надо найти смещение тома относительно диска - http://msdn.microsoft.com/en-us/library/windows/desktop/aa365174(v=vs.85).aspx

Автор: Асоишница 9.10.2014, 21:21
Alca, буду по всей видимости делать по Вашему алгоритму. Потому что обычные алгоритмы перезаписи из википедии программа recuva у меня во всяком случае восстанавливает....
Вот только откуда взяты 0х55 и 0хАА?

Автор: sQu1rr 9.10.2014, 23:21
Цитата(Асоишница @  9.10.2014,  21:21 Найти цитируемый пост)
Вот только откуда взяты 0х55 и 0хАА? 

они чередуют нули и еденицы (бинарные).

Автор: baldina 10.10.2014, 01:22
Асоишница, раз задание про невозможность восстановления программным способом, т.е. без специализированных аппаратных решений, анализа намагниченности и т.п., то достаточно один раз перезаписать файл произвольными данными, например 0xFF. 
В целом получается такой алгоритм
Код

DeleteFolder (Path)
   foreach (File in Path) 
      if (isFolder (File))
         DeleteFolder(Path+'/'+File)
      else
         DeleteFile (File)
      Rename (Path, 'XXXXXXXX.XXX')
      RmDir (Path)
  endfor
end

DeleteFile (File)
  for (i=0; i != File.Length; ++i)
      File.Write(0xFF)
  endfor
  File.Truncate() // set zero size
  Rename (File, 'XXXXXXXX.XXX')
  Unlink (File)
end

Автор: Dem_max 11.10.2014, 13:47
Цитата(sQu1rr @ 9.10.2014,  23:21)
Цитата(Асоишница @  9.10.2014,  21:21 Найти цитируемый пост)
Вот только откуда взяты 0х55 и 0хАА? 

они чередуют нули и еденицы (бинарные).

ГОСТ на безопастное удаление файлов

Автор: baldina 14.10.2014, 10:33
Цитата(Dem_max @  11.10.2014,  13:47 Найти цитируемый пост)
ГОСТ на безопастное удаление файлов

что за гост?

Автор: Dem_max 14.10.2014, 10:53
НЕ не ГОСТ, ошибся, думал в ГОСТ есть алгоритм, запамятовал просто

https://ru.wikipedia.org/wiki/Уничтожение_данных

Автор: Асоишница 15.10.2014, 22:32
Всем спасибо! Сделала по методу Alca, recuva даже не видит файл. Теперь буду мучиться с wpf(надо же начинать с ним знакомиться), но это уже совсем другая история smile 

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