Полное удаление файла

Discussion in 'WASM.WIN32' started by vg, Jul 22, 2007.

  1. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Нужно полностью удалить файл (например C:\1.txt), так чтобы на то место, где ранее находился файл произвести запись логических нулей (чисел вида 0х00) в каждый байт каждого сектора. Для NTFS и FAT32.
    Знаю, что на форуме есть темы где описывается запись(чтение) на физический диск через CreateFile("\\.\PHYSICALDRIVEX") или логический (\\.\C:), но как работать с конкретным файлом не понятно.

    Кто-нибудь знает(предполагает) необходимую логику действий? Какие API для этого понадобятся? Как правильно задавать путь для файла в CreateFile, так C:\1.txt или может \\.\C:\1.txt?
     
  2. asd

    asd New Member

    Blog Posts:
    0
    Joined:
    Mar 12, 2005
    Messages:
    952
    Location:
    Russia
    Гм. А если сначала перезависать файл нулями через обычные апишки а потом удалить?
     
  3. tinok

    tinok New Member

    Blog Posts:
    0
    Joined:
    Jun 2, 2007
    Messages:
    26
    Может, так:
    Code (Text):
    1. local temp: dword
    2. local zerobuffer[2048]:byte
    3.     invoke RtlZeroMemory, addr zerobuffer, sizeof zerobuffer
    4.     invoke CreateFile, ..., GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_WRITE_THROUGH or FILE_FLAG_DELETE_ON_CLOSE, 0
    5.     mov edi, eax
    6.     invoke GetFileSize, edi, nil
    7.     mov ecx, eax
    8.     shr ecx, 11    ; \ 2^11 = \2048
    9.     inc ecx
    10. @loop:
    11.     push ecx
    12.     invoke WriteFile, edi, addr zerobuffer, sizeof zerobuffer, addr temp, nil
    13.     pop  ecx
    14.     loop @loop
    Или что-то в этом роде...
     
  4. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Я об этом думал. Может быть. Но не уверен, что получится именно запись логических нулей во все очищаемые сектора. Кто-нибудь знает точно?
     
  5. AndNot

    AndNot New Member

    Blog Posts:
    0
    Joined:
    Jan 7, 2007
    Messages:
    49
    Запись не обязательно будет в те же сектора, скорее наоборот, в свободные, с правкой цепочек кластеров.
    Но фокус в том, что после удаления файла найти его прежнее содержимое будет проблематично, придется весь диск перелопатить, созерцая море мусора :)
    Но есть и "надежный" способ:
    http://www.wasm.ru/article.php?article=lockfileswork
    только ни на 9x, ни под ХРюном данный пример не сработал :dntknw: А разбираться времени нет. Но чем черт не шутит, попробуй :)
     
  6. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    Тебе шашечки или ехать? Просто перетирай файл, пока размер не увеличится, ты будешь писать точно поверх его прежних данных. Единственно - пиши сначала не нули, т.к. в sparce-файлах они не пишутся реально, а просто сохраняется информация о смещении и кол-ве нулей.
     
  7. Guest

    Guest Guest

    Blog Posts:
    0
    Была инфа что при высокой плотности носителя точно стереть нужное на нем место проблематично.
     
  8. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Не понял. Это тоже, что и tinok предложил, или нет? Можно пояснить?

    Что это за файлы?
     
  9. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    vg
    Да.

    Точнее, sparce files — разреженные файлы. Здесь и здесь описано. Коротко - файлы, в которых блоки, состоящие из одних нулей, не сохраняются на диск, а сохраняется только информация о них.

    im1111
    Это о "сжатых" томах с FAT32? Возможно, я знаю о том механизме сжатия лишь то, что такие тома нередко глючили. Но ведь какой-то POC (документ по безопасному и полному стиранию данных файла) всё же реализовывали и для FAT, поэтому здесь стоит смотреть те реализации.
     
  10. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    Кстати, о том документе. Я его не читал, но вот выдержка из справки WinHex'a по wipe securely:
     
  11. asmfan

    asmfan New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2006
    Messages:
    1,004
    Location:
    Abaddon
  12. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Исходя из выше изложенного можно предположить следующее(без учёта sparce-файлов)

    szFileName db "C:\1.txt", 0


    invoke RealDeleteFile,ADDR szFileName

    .
    .
    .

    RealDeleteFile proc pathfile :lol: WORD
    LOCAL zerobuffer[2048] :BYTE
    LOCAL filehandle :lol: WORD
    LOCAL writedbyte :lol: WORD

    invoke RtlZeroMemory,addr zerobuffer,sizeof zerobuffer
    invoke CreateFile,pathfile,GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
    mov filehandle,eax
    invoke GetFileSize,filehandle,0
    mov ecx,eax
    shr ecx,11
    inc ecx
    @loop:
    push ecx
    invoke WriteFile,filehandle,addr zerobuffer,sizeof zerobuffer,writedbyte,0
    pop ecx
    loop @loop
    invoke CloseHandle,filehandle
    ret
    RealDeleteFile endp

    Но содержимое файла остаётся без изменений.
    Где ошибка?
     
  13. Mental_Mirror

    Mental_Mirror New Member

    Blog Posts:
    0
    Joined:
    May 7, 2007
    Messages:
    431
    Просто открываешь файл и пишешь НЕ нули, как сказал IceStudent. Желательно рандомные данные, видимо для того, чтобы не нашли сами цепочки размещения данных (сектора) (цепочки кластеров). Ну и пишешь в несколько проходов. Потом делаешь размер файла равным нулю. Ну и само имя файла надо затереть обязательно. Готово! Так делает Eraser.
     
  14. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Это я знаю. С алгоритмами удаления данных я знаком.
    Хотелось бы для начала разобраться с записью нулей.
    Как это сделать?
     
  15. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    переименовать наверное?
    Отладить пробовал? Что возвращают CreateFile, WriteFile ?
     
  16. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    CreateFile - дескриптор заданного файла, WriteFile - не ноль.
     
  17. Mental_Mirror

    Mental_Mirror New Member

    Blog Posts:
    0
    Joined:
    May 7, 2007
    Messages:
    431
    SetFilePointer/SetEndOfFile, или сделать FileMapping с размером равным нулю. Но здесь надо тестить, хз как он там в итоге изменится....