Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2008, 21:27   #1
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию Затирка файлов

Подскажите как можно затереть файлы без возможности востановления?
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 08.01.2008, 22:12   #2
Albenous
Helper
Форумчанин
 
Аватар для Albenous
 
Регистрация: 10.12.2006
Сообщений: 109
По умолчанию

Как вариант:
Код:
   assignfile(f,'file.txt');
   rewrite(f);
   closefile(f);
А затем просто удалить файл (через Делфи, кончно). Точно никто не восстановит. Хотя это не совсем то, что хотел автор, но тоже действенно
Глупых вопросов не бывает - бывают глупые ответы.

Последний раз редактировалось Albenous; 08.01.2008 в 22:22.
Albenous вне форума Ответить с цитированием
Старый 08.01.2008, 23:08   #3
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Тоже самое делает

Код:
DeleteFile('c:\123.exe')
Хотя и то и это можно обойти, но не всегда.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 09.01.2008, 00:32   #4
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от SunKnight Посмотреть сообщение
Подскажите как можно затереть файлы без возможности востановления?
Без возможности восстановления информации из файла или сам факт его недавнего наличия? Если первое, то перед удалением файла, записать туда "мусор", т.е. случайную информацию. Например так:
Код:
var
  F: file of Byte;
  I, L: Integer;
  X: Byte;
begin
  AssignFile(F, '1.txt');
  Reset(F);
  L := FileSize(F);

  for I := 1 to L do
    begin
      X := Random(256);
      Write(F, X);
    end;

  CloseFile(F);
  DeleteFile('1.txt');
end;
Можно это же сделать с помощью потоков или файлов отображаемых в память.
Jeni вне форума Ответить с цитированием
Старый 09.01.2008, 00:37   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Интересно через пару часов что еще оригинальней придумают ?
Удивительно столько стараний переписать все байты а потом удалить файл ))) чем не нравитяс даже первый вариант, не говоря о возможных ошибках системы Кто запрещает SetEndOfFile юзать ?
BOBAH13 вне форума Ответить с цитированием
Старый 09.01.2008, 01:22   #6
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
чем не нравитяс даже первый вариант
Так человек вроде бы хотел, чтобы невозможно было восстановить информацию. А для этого не подойдет просто удаление (пусть даже с изменением размера).
Jeni вне форума Ответить с цитированием
Старый 09.01.2008, 15:58   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Jeni Посмотреть сообщение
Без возможности восстановления информации из файла или сам факт его недавнего наличия? Если первое, то перед удалением файла, записать туда "мусор", т.е. случайную информацию. Например так:
Код:

....
  for I := 1 to L do
    begin
      X := Random(256);
      Write(F, X);
    end;
....
это наверно лучший вариант, но довольно таки медлительный! он будет работать гораздо быстрее если написать так
Код:
var
  x:Integer;
....
  for I := 1 to L do
    begin
      X := Random(10000000);//можно поставть 2^32-1
      Write(F, X);
    end;
....
, но можно просто заполнить файл нулями. например так:

Код:
buf:=VirtualAlloc(...,<размер файла>,..,...);
WriteFile(FileHAndle,buf^,<размер файла>,...,...);
DeleteFile(....);
это наверно самый быстрый вариант решения этой задачи

Последний раз редактировалось rpy3uH; 09.01.2008 в 16:03.
rpy3uH вне форума Ответить с цитированием
Старый 09.01.2008, 22:23   #8
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
это наверно лучший вариант, но довольно таки медлительный!
Да я знаю, что тут оптимизацией и не пахнет. Просто хотел написать человеку такой код, чтобы он и в обычном Паскале работал. И чтобы он понял его, вот и старался сделать попроще. Надеюсь, помогло.
Jeni вне форума Ответить с цитированием
Старый 10.01.2008, 11:02   #9
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Albenous, Air - восстановлю файл без особых проблем.
В остальных случаях - 100% узнаю, что такой файл был, но вот содержимое уже не восстановить.
Если всё это происходит в 9х винде, то можно напрямую править FAT (если сумеете найти свой файл). В NT - нет.
zetrix вне форума Ответить с цитированием
Старый 10.01.2008, 12:52   #10
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Этот вопрос возник у меня после прочтения стать из журнала "Хакер".
http://www.xakep.ru/magazine/xa/101/034/1.asp
ВСЕМ СПАСИБО!

//не хочу пост оставлять. За ссылку большое спасибо. zetrix
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.

Последний раз редактировалось zetrix; 10.01.2008 в 19:33.
SunKnight вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь: выбор файлов исходя из имени файлов Antik163RUS Помощь студентам 4 19.06.2008 21:20
Печать pdf файлов из списка файлов в Excel АПС Microsoft Office Excel 5 15.04.2008 16:04
Поиск файлов student_63 Общие вопросы Delphi 6 07.03.2008 19:00
Копирование файлов на FTP Dj_smart Общие вопросы Delphi 2 05.03.2008 09:04
Открытие файлов *.txt Bill Gates Общие вопросы Delphi 3 28.11.2007 22:44