Конференция "WinAPI" » Как удалить файл без восстановления [D7]
 
  • nikfel (22.03.08 11:03) [0]
    Подскажите, пожалуйста. Как удалить файл со всем, чтобы восстановить было нельзя. Заранее спасибо.
  • Ega23 © (22.03.08 11:11) [1]
    Затереть нулями кластеры, занимаемые файлом.
  • tesseract © (22.03.08 12:39) [2]

    > Затереть нулями кластеры, занимаемые файлом.


    Можно без кластеров. Если размер файла не меняеться, то перезапись его содержимого не вызовет перераспределение кластеров на которых  файл находиться.
  • guav © (22.03.08 14:02) [3]
    В общем случае сложный вопрос, есть случаи, когда [1] и [2] не сработают.
    Особенно сложно, если нужно стереть ещё имя файла.знать о том что файл должен быть потом стёрт совсем уже при создании файла.
  • ЦУП © (22.03.08 14:10) [4]

    > В общем случае сложный вопрос, есть случаи, когда [1] и
    > [2] не сработают.


    А что это за случаи?
  • guav © (22.03.08 14:43) [5]
    > [4] ЦУП ©   (22.03.08 14:10)

    На NTFS нет строгого соотвествия между данными в файле и данными в его кластерах.
    Например сжатый файл займёт кластеров меньше чем его размер, тут [2] может не сработать.
    Если файл который полностью поместился в MFT, то при перезаписи методом [1] будет повреждена файловая система, при этом файл моет остатьсыя восстановимым. А при перезаписи методом [2] будет востановим. Тут Rouse_ давал ссылку на книгу "Криминалистический анализ файловых систем", там эти тонкости NTFS.

    Ну и что уже применимо к любой ФС, следы файла могут быть во всяких темпах, кэшах и свопах. И, при дефрагментации, в старом расположении файла. И ещё есть флешки которые менят маппигн секторов на их физическу память, чтобы распределить "износ" флешки равномерно, тогда затираемый кластер может не совпасть с кластером файла.
  • guav © (22.03.08 14:48) [6]
    Есть подозрение, что на NTFS поможет FSCTL_SET_ZERO_ON_DEALLOCATION, если указывать сразу при создании, не проверял. Но требует Vista.
  • TStas © (22.03.08 16:56) [7]
    А почему нельзя получить размер файла, если он > 0, открыть его в режиме Чтение/запись и перезаписать нулями? Размер не изменится, а в файле одни нули будут. А потом просто deleteFile ему сделать. Вот и удаление без восстановления.
  • Riply © (22.03.08 17:21) [8]
    > [7] TStas ©   (22.03.08 16:56)
    > А почему нельзя получить размер файла, если он > 0, открыть его в режиме
    > Чтение/запись и перезаписать нулями? Размер не изменится, а в файле одни нули будут.
    > А потом просто deleteFile ему сделать. Вот и удаление без восстановления.

    А кто тебе сказал, что "перезаписываемые нули" будут перезаписываться именно
    в теже кластеры, где располагался файл ? (Sorry за тавтологию :)
    Более того, если файл, например, исходно был фрагментирован, то шансов для этого
    становится очень мало.
  • guav © (22.03.08 19:34) [9]
    > [7] TStas ©   (22.03.08 16:56)

    Уже предложено в [2]. Не будет это работать для всех файлов.
    Более того писать именно нулями - идея более плохая чем писать случайными даными, если файл сжат, то "запись" почти ничего не сделает.
  • Игорь Шевченко © (22.03.08 22:13) [10]
    Riply ©   (22.03.08 17:21) [8]


    > Более того, если файл, например, исходно был фрагментирован,
    >  то шансов для этого
    > становится очень мало.


    Ты хочешь сказать, что при записи в файл он дефрагментируется ?

    guav ©   (22.03.08 19:34) [9]


    > Более того писать именно нулями - идея более плохая чем
    > писать случайными даными, если файл сжат, то "запись" почти
    > ничего не сделает.


    Запись как бы скорректирует кластеры, занимаемые файлом, нет ?
    Или тв хочешь сказать, что зная кластер на диске, ты гарантировано скажешь, какому файлу он принадлежал в прошлом ?
  • Riply © (22.03.08 22:42) [11]
    >  [10] Игорь Шевченко ©   (22.03.08 22:13)
    > Ты хочешь сказать, что при записи в файл он дефрагментируется ?

    Нет, конечно. Точнее: не такое строгое утверждение.
    Но я неоднакратно наблюдала ( и воспроизводила) дефрагментацию файла при записи.
  • Riply © (22.03.08 22:53) [12]
    > [11] Riply ©   (22.03.08 22:42)
    > Но я неоднакратно наблюдала ( и воспроизводила) дефрагментацию файла при записи.

    Имеется ввиду на NTFS
  • Игорь Шевченко © (22.03.08 22:58) [13]
    Riply ©   (22.03.08 22:42) [11]

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

    Он имеет возможность стать дефрагментированым ?
  • Riply © (22.03.08 23:07) [14]
    > [13] Игорь Шевченко ©   (22.03.08 22:58)
    > Ничего не понимаю - есть файл, у него есть N кластеров.
    > Содержимое файла аккуратно заполняется произвольными данными (хотя бы и нулями).
    > Он имеет возможность стать дефрагментированым ?

    Да.
    Я воспроизводила, примерно, такое:
    Создавала файл, например, занимающий восемь кластеров с "номерами":
    0..3,  128...131.
    И после "обычной" записи в него его картинка становилась: 0..7.
    Я не утверждаю, что это происходит всегда,
    но в моих тестах это повторилось несколько раз.
  • Riply © (22.03.08 23:10) [15]
    С заполнением нулями сжатого или разряженного файла, вообще интересно.
    Такое впечатление (может и неправильное),
    что система может вызвать FSCTL_SET_ZERO_DATA, если ей заблагорассудится :)
    А FSCTL_SET_ZERO_DATA может не вести "реальной" записи на диск, а только "подправить" MFT :)
  • Игорь Шевченко © (23.03.08 00:23) [16]
    Riply ©   (22.03.08 23:07) [14]

    Пример в студию. Атрибуты файла, как открывала, как писала, расположение кластеров до, расположение кластеров после.
    Или ссылки, подтверждающие подобные случаи и/или поведение.

    До того момента не верю.
  • guav © (23.03.08 00:42) [17]
    > [10] Игорь Шевченко ©   (22.03.08 22:13)
    > Запись как бы скорректирует кластеры, занимаемые файлом,
    > нет ?
    > Или тв хочешь сказать, что зная кластер на диске, ты гарантировано
    > скажешь, какому файлу он принадлежал в прошлом ?

    Даже если считать что достаточно разрыва связи между файлом и его данными, в NTFS обновления Data Runs всегда журналируются, поэтому, возможно, связь не будет безнадёжно утеряна в этом случае.
    Обычно от надёжного удаления файла хотят преде всего невостановимость самих данных, а не уничтожения информации о файле.
  • Игорь Шевченко © (23.03.08 00:49) [18]
    guav ©   (23.03.08 00:42) [17]


    > в NTFS обновления Data Runs всегда журналируются


    И живут там вечно ? Мне просто интересно
  • guav © (23.03.08 01:22) [19]
    > [18] Игорь Шевченко ©   (23.03.08 00:49)

    Нет. Но часто живут там достаточно долго.
    Логфайл состоит из циклического буфера страниц, т.е. всегда перезаписыватся самые старые.
    В NT запись начинается сначала при каждом монтировании, в более новых (2000 и новее) цикл не обрывается и при монтировании/демонтировании.
 
Конференция "WinAPI" » Как удалить файл без восстановления [D7]
Есть новые Нет новых   [134433   +22][b:0][p:0.001]