Алгоритмы безопасного удаления файлов

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 14 Nov 2008.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    По каким алгоритмам работают программы "бесследно" удаляющие файлы?Мне не приходит в голову ничего кроме как открыть файл и записать в него несколько раз мусор,а потом удалить.
     
  2. PHPoozy

    PHPoozy Elder - Старейшина

    Joined:
    1 Jul 2008
    Messages:
    149
    Likes Received:
    31
    Reputations:
    -22
    папка это вить тож файл ".."
     
  3. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Ну и что ты предлогаешь?
     
  4. PHPoozy

    PHPoozy Elder - Старейшина

    Joined:
    1 Jul 2008
    Messages:
    149
    Likes Received:
    31
    Reputations:
    -22
    перезаписать папку из того что было
     
  5. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Разобрать структуру файловой системы - найти физ. сектор содержащий информацию и перезаписать. Че ту сложного?!


    Например для NTFS
    Code:
    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;
     
    На выходе этой функции мы имеем массив описывающий кластеры файла
     
    #5 spider-intruder, 14 Nov 2008
    Last edited: 14 Nov 2008
  6. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Мне тоже... Вариант прямого обращения к фс через асм и удаление цепочек дублей отбросим - не отравдывает.
    Хотя как по мне, то человек, которому нужна была подобная прога, затиркой (ы...) доволен. Так что сильно не парься.
     
  7. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    обращения к фс через асм - на кой хрен через асм простите )

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

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

    CreateFile и \\\\.\\File еще никто не отменял вплоть до висты
     
    #7 spider-intruder, 14 Nov 2008
    Last edited: 14 Nov 2008
  8. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    если кратко: при удалении в память,которую занимал файл не пишутся нули(очень долго займёт),просто вся память помечается как свободная и на её уже можно перезаписывать. Следовательно безопасное удаление должно в эту область памяти записывать что-либо(нули) и только потом производить стандартное удаление.
     
  9. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Ну а в общих чертах так оно обычно и делается.
     
  10. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    перезапись файла все равно оставляет магнитные следы предыдущих данных. Поэтому надежнее не просто затирать нулями а использовать спец алгоритмы для этого разработанные.
    http://ru.wikipedia.org/wiki/Алгоритмы_уничтожения_информации
     
    1 person likes this.
  11. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Господа где же тут зиродей - как так перезаписать файл :)
    Где же системное программирование - где подход. Раз уж заговорили про магнитные "остатки" Читайте инфу в бинарном и перезаписывайте N раз противоположными значениями :)

    Вступайте и КоНпелируйте! (это я блога эвилфрика начитался - не обращайте внимания)
     
    1 person likes this.
  12. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Записать в файл кучу мусора и удалить это конечно вариант, большинство программ для восстановления затертую информацию не найдут. И чем больше раз перезапишешь, тем лучше. Но от спецслужб в случае чего это не поможет, все равно восстановят =)
     
  13. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Ы, не то. NTFS - сцуко, в фоне делает копии файлов и путей - вот и облом.
    Физ расположение - это вы перегнули. только на идеальных НЕДЕФРАГМЕНТИРОВАННЫХ дисках протянет, но это бывает только на CD\DVD (их легче поломать и под загигалку :) )
     
  14. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Функция возвращает всю структуру расположения файлов на сколько мне известно.
    Распарсить структуру и перезаписать все что надо.
    Нормальный вайперы делают это именно на низком уровне .
    + никогда не помешает научиться работать с ФС на низком уровне

    2 0verbreaK

    У нас как бы демократия - охота мне вот я и читаю. Для меня это как БАШ орг

    А ваще чувак молодец. Психолог. Там пол блога он срется сам с собой под разными никами провоцируя не просвященных на флуд и провакационные посты выявляющие человеческую "суЧность". Если человек не такой как все то на него нападают как собаки! ЭВИЛ жив! Хотя и жжет сцуко не по детски :)
     
  15. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    А почему именно лутчше всего напрямую содержимое кластеров тереть,а не просто писать мусор в файл ведь во 2м случае ОС вроде как сам должна тот мусор в кластеры позапихивать.В чем прикол?
     
  16. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    по причине дефрагментации.
     
  17. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    потому что если ты будешь тереть информацию средствами ОС и если ФС журналируемая то ОС все же кое-что сохранит, хотя бы сам факт удаления.

    вероятно ты хотел сказать "фрагментации", но она тут все равно ни при чем.
     
    #17 bons, 17 Nov 2008
    Last edited: 17 Nov 2008
  18. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    ты хоть прочитал то что я писал? Журналируемая ФС сохранит факт удаления и имя удаленного файла. А это есть информация, которой быть не должно.