Удаление данных с диска на C#

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by IgrikX, 11 Sep 2010.

  1. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    Как можно удалить данные с диска с помощью C#, что бы их нельзя было востановить?
     
  2. Bers

    Bers Member

    Joined:
    17 May 2010
    Messages:
    78
    Likes Received:
    30
    Reputations:
    26
    Code:
    System.Diagnostics.Process.Start(@"c:\windows\system32\format.com","c:");
    
    Не? :)
    А еще надежнее так:
    Code:
    System.Windows.Forms.MessageBox.Show(
       "Вытащи свой диск, разбей его молотком и сожги!", 
       "Матрица приказывает тебе:")
    

    Я, кстати, серьезен. Единственный способ надежно затереть данные программно - записать поверх них рандомные данные несколько раз. А для этого нужен доступ к диску на более низком уровне, чем файловая система... В BCL классов для таких целей нет. Да плюс надо еще найти место, где данные располагаются физически. Опять-таки, BCL тут ничем не поможет. Вывод? Бери любую опенсорцовую утилиту-вайпер, разбирай ее код и переписывай на C#. Сразу говорю - это тонны P/Invoke и unsafe кода. Проще написать библиотеку на C/C++.
     
    #2 Bers, 11 Sep 2010
    Last edited: 11 Sep 2010
  3. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    Вообщем много кода будет?
     
  4. Bers

    Bers Member

    Joined:
    17 May 2010
    Messages:
    78
    Likes Received:
    30
    Reputations:
    26
    Вообще, если такой вариант устроит, то проще положить рядом с C# бинарником любую консольную программу-вайпер и тупо ее запускать. Это на 4 порядка проще. Только это будет уже не с помощью C#, по сути :)
    Портировать существующие вайперы на C# - имхо, оно того не стоит. Это если уж задача стоит "сделать все только на C# в одном бинарнике без всяких внешних файлов".
     
  5. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    1) генери буфер в размер кластера из случайных данных
    2) забей файл по его размеру этими данными.
    3) повтори 3-4 раза эти пункты.
    Вот и выходит что хрен восстановишь )

    Чтобы свободное место очистить, надо по тойже технологии действовать, тока надо создать файл и забить им место всё
     
  6. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Я конечно с файловыми системами вплотную не работал, но слышал от троюродной бабушки, которой сказала внучатая племянница третьей жены дяди моего сводного брата, что есть какие-то функи, позволяющие опаределить какие сектора на диске занимает файл. Хотя может и нет таких.

    Это принципиальный момент или просто для удобства? А то я обычно просто рандомом по размеру забиваю.
     
  7. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Redeemer А мне сказал дядя бил в своем "микроблоге" msdn что можно определить кластеры которые юзаются файлов через парочку запросов. И всё будет норм. ты молучишь массив кластеров. А потом прямым доступом к разделу пробегаясь по этим кластерам, можно считать файл и записать данные
    Но дяди эксперты по безопасности из MS сказали что писать стало опасно и нахрен заблочили эту функцию, теперь тока надо размонтировать все разделы итд итп. короче жопа.

    Размер кластера потому, запись данных кратных размеру кластера дает наибольшую скорость.
     
  8. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Логично. Не подумал об этом
     
  9. CodeSender:)

    CodeSender:) Active Member

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    А вы уверены что данные запишутся именно в эти кластера, а не куда нибудь ещё по усмотрению системы?