Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Алгоритмы безопасного удаления файлов (https://forum.antichat.xyz/showthread.php?t=91849)

_nic 14.11.2008 22:47

Алгоритмы безопасного удаления файлов
 
По каким алгоритмам работают программы "бесследно" удаляющие файлы?Мне не приходит в голову ничего кроме как открыть файл и записать в него несколько раз мусор,а потом удалить.

PHPoozy 14.11.2008 22:55

папка это вить тож файл ".."

_nic 14.11.2008 22:59

Цитата:

Сообщение от PHPoozy
папка это вить тож файл ".."

Ну и что ты предлогаешь?

PHPoozy 14.11.2008 23:08

Цитата:

Ну и что ты предлогаешь?
перезаписать папку из того что было

spider-intruder 14.11.2008 23:10

Разобрать структуру файловой системы - найти физ. сектор содержащий информацию и перезаписать. Че ту сложного?!


Например для NTFS
Код:

ULONGLONG *GetFileClusters(
                    PCHAR lpFileName,
                    ULONG ClusterSize,
                    ULONG *ClCount,
                    ULONG *FileSize
                    )
{
    HANDLE  hFile;
    ULONG  OutSize;
    ULONG  Bytes, Cls, CnCount, r;
    ULONGLONG *Clusters = NULL;
    BOOLEAN Result = FALSE;
    LARGE_INTEGER PrevVCN, Lcn;
    STARTING_VCN_INPUT_BUFFER  InBuf;
    PRETRIEVAL_POINTERS_BUFFER OutBuf;

    hFile = CreateFile(lpFileName, FILE_READ_ATTRIBUTES,
                      FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                      NULL, OPEN_EXISTING, 0, 0);

    if (hFile != INVALID_HANDLE_VALUE)
    {
        *FileSize = GetFileSize(hFile, NULL);

        OutSize = sizeof(RETRIEVAL_POINTERS_BUFFER) + (*FileSize / ClusterSize) * sizeof(OutBuf->Extents);

        OutBuf = malloc(OutSize);

        InBuf.StartingVcn.QuadPart = 0;
               
        if (DeviceIoControl(hFile, FSCTL_GET_RETRIEVAL_POINTERS, &InBuf,
                            sizeof(InBuf), OutBuf, OutSize, &Bytes, NULL))
        {
            *ClCount = (*FileSize + ClusterSize - 1) / ClusterSize;

            Clusters = malloc(*ClCount * sizeof(ULONGLONG));

            PrevVCN = OutBuf->StartingVcn;

            for (r = 0, Cls = 0; r < OutBuf->ExtentCount; r++)
            {
                Lcn = OutBuf->Extents[r].Lcn;

                for (CnCount = OutBuf->Extents[r].NextVcn.QuadPart - PrevVCN.QuadPart;
                    CnCount; CnCount--, Cls++, Lcn.QuadPart++) Clusters[Cls] = Lcn.QuadPart;

                PrevVCN = OutBuf->Extents[r].NextVcn;
            }
        }
                       
        free(OutBuf);       

        CloseHandle(hFile);
    }
    return Clusters;

На выходе этой функции мы имеем массив описывающий кластеры файла

vikseriq 14.11.2008 23:12

Цитата:

Сообщение от _nic
Мне не приходит в голову ничего кроме как открыть файл и записать в него несколько раз мусор,а потом удалить.

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

spider-intruder 14.11.2008 23:16

обращения к фс через асм - на кой хрен через асм простите )

Читайте безсмертного рему и думайте: http://www.wasm.ru/article.php?article=lockfileswork

в третьем методе пример получения физ положения файла. Код в пердыдущем посте есть.
Получите его положение и затрите чем угодно.

CreateFile и \\\\.\\File еще никто не отменял вплоть до висты

scrat 14.11.2008 23:40

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

Qwazar 14.11.2008 23:41

Цитата:

Сообщение от _nic
По каким алгоритмам работают программы "бесследно" удаляющие файлы?Мне не приходит в голову ничего кроме как открыть файл и записать в него несколько раз мусор,а потом удалить.

Ну а в общих чертах так оно обычно и делается.

bons 14.11.2008 23:56

перезапись файла все равно оставляет магнитные следы предыдущих данных. Поэтому надежнее не просто затирать нулями а использовать спец алгоритмы для этого разработанные.
http://ru.wikipedia.org/wiki/Алгоритмы_уничтожения_инфо рмации


Время: 21:55