Безопасное удаление файла в C - PullRequest
5 голосов
/ 13 октября 2011

Безопасное удаление файлов в C

Мне нужно безопасно удалить файл в C, вот что я делаю:

  1. используйте fopen, чтобы получить дескриптор файла
  2. рассчитать размер с помощью lseek / ftell
  3. получить случайное начальное число в зависимости от текущего времени / или размера файла
  4. записать (размер) байтов в файл из файлацикл с 256 байтами, записанными на каждой итерации
  5. fflush / fclose дескриптор файла
  6. , повторно откройте файл и повторите шаги 3-6 для 10 ~ 15 раз
  7. переименуйте файл, затем удалите его

Так ли это?Потому что я прочитал название «Gutmann 25 pass» в Eraser, поэтому я предполагаю, что 25 - это количество раз, которое файл перезаписывается, а «Gutmann» - это алгоритм рандомизации?

Ответы [ 5 ]

8 голосов
/ 13 октября 2011

Вы не можете сделать это безопасно без сотрудничества с операционной системой - и часто даже тогда.

Когда вы открываете файл и записываете в него, нет никакой гарантии, что ОС собирается поставитьновый файл на том же куске ржавчины, что и старый.Даже если это произойдет, вы не знаете, будет ли новая запись использовать ту же цепочку кластеров, что и раньше.

Даже в этом случае вы не уверены, что диск не отобразил блок диска из-за какой-то ошибки - оставив свои планы мирового господства над блоком, который помечен как плохой, но все еще читаемый.

ps - 25-кратная перезапись больше не требуется, она была необходима на старых MFM-дисках низкой плотности с плохим отслеживанием головки.На современных дисках GMR перезаписи достаточно - один раз.

1 голос
/ 13 октября 2011

@ Мартин Беккет прав;существует такая вещь, как «безопасное удаление», если вы не знаете всего о том, что аппаратное обеспечение делает вплоть до накопителя.(И даже тогда я не стал бы делать ставку на то, что достаточно хорошо финансируемый злоумышленник может восстановить при доступе к физическому носителю.)

Но при условии, что ОС и диск будут повторно использовать одни и те же блоки,Схема не работает по более простой причине: fflush обычно ничего не записывает на диск.

В большинстве многозадачных операционных систем (включая Windows, Linux и OS X) fflush простовынуждает данные из буфера пользовательского пространства в ядро.Затем ядро ​​выполнит свою собственную буферизацию, записывая на диск только тогда, когда ему это нравится.

Например, в Linux вам нужно вызвать fsync(fileno(handle)).(Или просто используйте файловые дескрипторы в первую очередь.) OS X похожа.В Windows есть FlushFileBuffers.

Итог: описанный вами цикл, скорее всего, просто перезапишет буфер ядра 10-15 раз вместо файла на диске.В C или C ++ нет переносимого способа принудительного переноса данных на диск.Для этого вам нужно использовать платформо-зависимый интерфейс.

1 голос
/ 13 октября 2011

Да, фактически он перезаписывает n различных шаблонов в файле

Это делается путем написания серии из 35 шаблонов поверх область для удаления.

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

Больше информации здесь .

0 голосов
/ 26 февраля 2014

MFT (главная таблица файлов) аналогично FAT (таблица размещения файлов), MFT ведет записи: смещения файлов на диске, имя файла, дата / время, идентификатор, размер файла и даже данные файла, если данные файла помещаются в пустое пространство записи, которое составляет около 512 байт, размер 1 записи составляет 1 КБ.

Примечание. Новые данные на жестком диске установлены в 0x00. (Просто сообщите)

Допустим, вы хотите перезаписать file1.txt ОС MFT находит это смещение файла внутри записи. вы начинаете перезаписывать file1.txt с двоичного файла (00000000) в двоичном режиме.

Данные файла на диске будут перезаписаны на 100%, поэтому MFT имеет смещение файла на диске. после того, как вы переименуете его и удалите.

ПРИМЕЧАНИЕ. MFT пометит файл как удаленный, но вы все равно сможете получить некоторые данные об этом файле, то есть дату / время: созданный, измененный, доступный. смещение файла, атрибуты, флаги.

1- create folder in c:\  and move file and in same time rename in to folder( use rename function ) rename file to 0000000000 or any another without extention 

2- overwrite file with 0x00 and check if file was overwrited

3- change date/time

4- make without attributes

5- leave file size untouched OS faster reuse empty space.

6- delete file

7- repeat all files (1-6)

8- delete folder

or

(1, 2, 6, 7, 8)

9- find files in MFT remove records of these files.
0 голосов
/ 13 октября 2011

Метод Гутманна отлично работал для более старых схем кодирования дисковых технологий, и схема 35-проходной очистки метода Гутмана больше не требуется, что признает даже Гутман.См. Метод Гутмана по адресу: https://en.wikipedia.org/wiki/Gutmann_method в разделе «Критика», где Гутман обсуждает различия.

Обычно достаточно сделать несколько случайных проходов, чтобы безопасно удалить файл (возможно, с дополнительнымПрохождение обнуления).

Пакет secure-delete из thc.org содержит команду sfill для безопасного стирания дискового пространства и пространства на диске на жестком диске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...