NTFS,$MFT.Восстановление файлов.

Тема в разделе "WASM.BEGINNERS", создана пользователем Jawello, 22 дек 2008.

  1. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    вопрос довольно обширен. Нужно написать программу по востановлению удаленных данных в файловой системе NTFS. Возникли следующие вопросы. Каким образом получить доступ в $MFT,что такое RAW режим и каким образом можно определить,что файл был удален?(по каким аттрибутам файла,ну или вообще каким способом).

    за ранее спасибо.

    п.с. может раздел не совсем подходит,но я себя приравниваю к новичкам,поэтому вопрос тут и находится.
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Jawello
    Я не пойму, если ты спрашиваешь что такое RAW, а потом еще и спрашиваешь
    то видимо ты совсем не предстовляешь как устроенна в теории файловая систем (я сам более мение только с фатами знакомился когдато) то о каком востановлении файлов может быть речь? Читай набирайся опыта, в гугл короче. Сильно размазанный вопрос, и бестолковый по смыслу.

    А тему имхо удалить надо, и вообще такие темы удалять...
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    $MFT - это файл. А раз файл, то получить доступ можно через CreateFile как к любому файлу.
    У удаленного файла значение поля Flags в MFT record равно нулю.
     
  4. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    согласен) .... хочется много в короткие сроки.
     
  5. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    Partner спасибо!
     
  6. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    Partner
    Flags - это 5ть полей. 1 - используеться ли файловая запись. 2 - используеться ли файловая запись и свзяана ли она с файлом. 3 - используеться ли файловая запись и связана ли она с дирикторией. а вот 4,5 это вопрос.по ним информации я не нашел. Если знаете не могли бы ответить?

    и попутно, где можно найти наиболее полную документацию по NTFS?книги,сайты и т.д.?желательно конечно на русском. Но при желании перевести можно все.
     
  7. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Я знаю следующие значения поля Flags (используются два младших бита)

    0 - запись не используется (удаленный файл)
    1 - файл
    2 - удаленная директория.
    3 - директория

    других значений не встречал, и если они есть их назначение мне не известно.

    Полной документаци по NTFS не существует.

    Одна из лучших книг по NTFS File System Forensic Analysis автор Brian Carrier

    http://www.ntfs.com/
    http://data.linux-ntfs.org/ntfsdoc.pdf
     
  8. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    Partner спасибо.
    я хотел уточнить по поводу значения 2 и 3. я нашел интересную ссылку по NTFS http://www.samag.ru/cgi-bin/go.pl?q=articles;n=11.2004;a=13 и там есть таблица,описывающая файловую запись. в ней значение 2 другое,а три вообще не описано.Стоит ли доверять этим данным?

    и еще. есть ли способ узнать удален ли файл в корзину анализируя запись $MFT?или в $MFT запись изменяется аналогичным образом, как и удаление мимо корзины?

    еще раз спасибо.
     
  9. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Там неправильно.
    Второй бит, а не чило 2 означает директорию. Вместе с первым битом (запись используетя) получаем 3.

    Нет, удаление в корзину это просто перемещение в специальную папку.
     
  10. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    Partner
    спасибо,понял.

    ну если файл перемещается в специальную папку(которая всегда является постоянной), а атрибут $FILE_NAME содержит ссылку на материнский каталог, то я думаю что можно все таки определить?или я что то путаю и не допонимаю?

    у меня еще возник вопрос. в каком порядке происходит запись файловых записей в $MFT? в том порядке в каком создаются файлы/каталоги?
     
  11. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Родительской папки недостаточно, потому, что в корзине может быть целая ветка папок.
    Если же построить полный путь файла, то да, можно определить, что мы в корзине. Но $MFT здесь как бы не при чем.

    Не обязательно все файлы идут подряд. Зависит от наличия свободных записей. Но в принципе, стратегия заполнения MFT мне неизвестна.
    Для ускорения доступа каждая директория имеет индекс по всем, входящим в нее, файлах.
     
  12. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    Partner
    Огромное спасибо)

    а есть ли способ узнать точную версию NTFS?и на сколько это необходимо, т.е. на слольно сильно различаются в них струтура основных метафайлов? на сколкьо мне известно в XP используеться весрия 3.1,а в Vista?способ определения версии NTFS до 3ий достаточно простой: попытаться создать мета файл $Extend в корневом каталоге,если получилось - версия 3.0 и выше(данный способ нашел в книге Криса Касперского).Но на моей машине стоит XP,и при попытке создания все равно выдает ошибку что такой файл уже существует.
     
  13. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/TroubleShooting/WhichversionofNTFSamIrunning.html

    Это смотря что ты собираешься делать. ИМХО, для восстановления файлов версия NTFS особого значения не имеет.
     
  14. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    Partner

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

    а как узнать размер 1ого сектора файловой записи?или он всегда постоянен и равен 1FEh?
     
  15. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Не понял. Все сектора имеют одинакоый размер - 512 байт.
     
  16. Jawello

    Jawello New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    15
    Partner т.е. если считать что обычно размер записи 1024 байта(он же именно такой?),то максимум 2а сектора?
     
  17. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Размер MFT закодирован в каком-то поле (не помню) в бут-секторе.
    Говорят, может быть до 4096 байт, хотя я на практике не встречал размера отличного от 1024 байта.
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в $Boot-файле вся нужная информация есть.
     
  19. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    n0name
    Чтобы найти $Boot нужно сначала найти MFT.
    На самом деле в $Boot располагается копия бут-сектора.
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Partner
    Нет. $Boot и есть бут-сектор, а не его копия.