Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Надежное удаление с последующим форматированием [XP]


Страницы:   1 2 3

alumium ©   (2013-02-07 23:21:00) 

Доброго времени суток, форумчане. Вынужден попросить у вас помощи в написании программы для надежного удаления информации.
Её суть: выделяешь checkbox'ами диски, которые нужно очистить. Программа заполняет кластеры тома нулями или случайными байтами (Т.е. не перезапись по 1 файлу, а как можно быстрее. Побайтовый перебор скорее всего медленный.). После этого быстрое форматирование тома.
Сторонние утилиты не интересуют.
Буду надеяться на вашу помощь. Спасибо.


brother   (2013-02-09 10:39:00) [41]

все сектора с данными перезаписываем (кроме FS)? profit!


Rouse_   (2013-02-09 09:37:00) [42]


> brother ©   (09.02.13 07:14) [15]
> да хрен с ней! данные будут не восстановимы...

Не факт


brother   (2013-02-09 07:14:00) [43]

> он ориентируется на файловую систему, которую ты и хочешь
> убить.

да хрен с ней! данные будут не восстановимы...


Макс Черных   (2013-02-09 03:50:00) [44]


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

Какие то параграфы противоречивые. Полное форматирование и так все пропишет нулями. Зачем сначала мучиться писать тоже самое по сути, а потом делать "быстрое форматирование"?

Самый быстрый, надежный и легальный способ это гоблин с ружъем. Оный при опасности просто делает "случайный" выстрел прямо в винт. Это вовсе не шутка, а реалии 90х годов. :)
Это я к чему - прежде чем играть в шпионов надо бы определиться - от кого, собственно, прячемся. Часто для надежного сокрытия информации даже стирать все не надо. Гораздо хитрее проще и быстрее подменить, скажем, базу 1С другой, набитой всякой "важной" инфой, которая на деле - мусор. Ну, т.е. создать у того, кто будет искать полное впечатление того, что все что надо он типа нашел. И щас всех комерсов поимеет за водку паленую. Ага, щас, комерсы заранее мну денежку занесли, за кое какие фокусы. :) Расцвет демократии начала 90х, однако. :)

Так что, ИМХО, перед тем как думать как? надо определиться- зачем?


Rouse_   (2013-02-08 23:59:00) [45]


> А сразу отформатировать?

А что это даст, с учетом задачи от автора?


Inovet   (2013-02-08 23:29:00) [46]

> [11] Rouse_ ©   (08.02.13 22:51)
> ЗЫ: ну а потом конечно можно и отформатировать :)

А сразу отформатировать?


Rouse_   (2013-02-08 22:51:00) [47]

ЗЫ: ну а потом конечно можно и отформатировать :)


Rouse_   (2013-02-08 22:49:00) [48]

Приведенный код для задачи не подойдет, он ориентируется на файловую систему, которую ты и хочешь убить. Решение задачи на самом деле достаточно простое, необходимо открыть раздел в RAW режиме и банально пройтись по нему рандомными буферами, желательно гаммированными. Как показывает практика 30 проходов обычно достаточно чтобы раздел не восстановился даже на экспертном оборудовании.


alumium   (2013-02-08 16:56:00) [49]

спасибо, друзья, пойду пробовать...


brother   (2013-02-08 04:18:00) [50]

чтож всех на скрытность то тянет?
мои наброски, разбирайся!
function TProgramForm.SafeRemoval(drive: char): boolean;
var
sh : SHFILEOPSTRUCT;

FreeBytesAvailableToCaller: TLargeInteger;
FreeSize: TLargeInteger;
TotalSize: TLargeInteger;

f: file;
NumWritten: Integer;
Buf: pointer;
bufSize: Integer;
BytesWrite: TLargeInteger;
begin
result:= False;
StopSafeRemoval:= False;

//  ShowMessage('Удаление всего содержимого диска, это может занять длительное время, ждите...');

// Удаляем ВСЕ содержимое с устройства!
AddLog('Удаление всего содержимого диска, ждите...');
sh.Wnd := Application.Handle;
sh.wFunc := FO_DELETE;
sh.pFrom := PAnsiChar(drive + ':\*.*');
sh.pTo := nil;
sh.fFlags := FOF_NOCONFIRMATION + FOF_SILENT+ FOF_NOERRORUI;
sh.fAnyOperationsAborted := False;
sh.hNameMappings := nil;
sh.lpszProgressTitle := nil;
if SHFileOperation(sh) <> 0 then
begin
 AddLog('Не удалось(файлы/папки заняты другим приложением?)');
 //Exit;
end
else
  AddLog('Ok');

// узнаем кол-во свободного места на диске
if not GetDiskFreeSpaceEx(PChar(drive + ':\'), FreeBytesAvailableToCaller, Totalsize, @FreeSize) then
begin
  AddLog('Ошибка получения свободного места: ' + GetLastErrorText);
  exit;
end
else
  AddLog('Свободное место на диске: ' + IntToStr(FreeBytesAvailableToCaller) + ' байт');

//  FreeBytesAvailableToCaller:= {1073741824;} 2147483648;

// Создаем файл с пустым содержимым по размеру всего диска
AddLog('Создание временного файла, ждите...');
BufSize := 1048576; // 1МБ
GetMem(buf, BufSize);
//Gauge1.MaxValue:= FreeBytesAvailableToCaller;
BytesWrite:= 0;
try
  assignfile(f, drive + ':\tmp.$$$');
  rewrite(f, 1);
  while (BytesWrite+bufSize <= FreeBytesAvailableToCaller) and (not StopSafeRemoval) do
  begin
    BlockWrite(f, Buf^, BufSize, NumWritten);
    Inc(BytesWrite, NumWritten);
//      Gauge1.Progress:= BytesWrite;
    application.ProcessMessages;
  end;
except
  FreeMem(Buf);
  CloseFile(f);
end;
if StopSafeRemoval then
begin
  AddLog('Отменено пользователем!');
  FreeMem(Buf);
  CloseFile(f);
  Exit;
end;
// если в конце не дозаписан хвост меньше bufSize дозапишем его
if BytesWrite < FreeBytesAvailableToCaller then
begin
  BufSize := FreeBytesAvailableToCaller-BytesWrite;
  FreeMem(Buf);
  GetMem(buf, BufSize);
  BlockWrite(f, Buf^, BufSize, NumWritten);
end;
FreeMem(Buf);
CloseFile(f);

AddLog('Ok');

{  if DeleteFile(drive + ':\tmp.$$$') then
  AddLog('Временный файл успешно удален')
else
begin
  AddLog('Ошибка удаления временного файла');
  exit;
end;}

result:= True;
end;


KilkennyCat   (2013-02-08 03:53:00) [51]


> alumium

а смысл?
информация все равно восстановима. либо дорогостоящими технологиями, либо дешевым утюгом.


palva   (2013-02-08 01:48:00) [52]

Открыть физически том при помощи CreateFile (должны быть на это права) и расписать. Сам пробовал однажды для чтения нескольких блогов (MBR).
http://www.vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_createfile.htm


alumium   (2013-02-08 00:55:00) [53]

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


Никита32   (2013-02-07 23:52:00) [54]

http://forum.vingrad.ru/faq/topic-155950.html


Никита32   (2013-02-07 23:50:00) [55]

http://www.delphisources.ru/pages/faq/base/format_disk.html


Danko   (2013-02-07 23:43:00) [56]

uses ShellAPI;
 
ShellExecute (Handle, nil, 'format d: /u', nil, nil, SW_RESTORE);

(образец)


Rouse_   (2013-02-07 23:35:00) [57]

Вопрос-то какой?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо