![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Надежное удаление с последующим форматированием [XP]
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]Вопрос-то какой?