Анализ файловой системы

Тема в разделе "WASM.WIN32", создана пользователем Cneg, 28 мар 2007.

  1. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    помогите разобраться.... Есть ЖД с файловой системой (NTFS либо FAT), необходимо получить доступ к жд (вроде как это делает CREATEFILE с первым параметром \\.\C:, где С: - имя логического диска) и проанализировать для начала метаданные (например в случае NTFS - записи поля MFT).... Вопрос в том с какими структурами или переменными придётся работать после CREATEFILE и вообще правильно ли я всё делаю?
     
  2. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    СТруктуру файловых систем благо я знаю, а вот как ручками с ней работать... с этим проблема. Может кто ссылочку хорошую даст
     
  3. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    появилась идея использовать FSCTL функции...... описание в msdn достаточно размытое и до конца не понятно. Может кто использовал эти функции?? Опять же встаёт вопрос... а если область MFT будет затёрта, тогда ведь эти функции не будут работать...
     
  4. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    в общем.... ПАМАГИТЕ!!!!
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Cneg
    Спрашивай у гугла: "Криминалистический анализ файловых систем", это книга от специалиста по восстановлению данных в силовых органах(буржуйских). Название вроде верно, но не уверен
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Cneg
    Ну просто ReadFile. Правда смещение и количество считанных байтов должно быть кратно размеру сектора. Вот функция, которая читает данные произвольной длины с произвольного смещения.
    Код (Text):
    1. function ReadPhysBytes(Offs: Int64; Len: DWORD; PhysDev: THandle; SecSize: DWORD): Pointer;
    2. var
    3.  bw: DWORD;
    4.  Buf: Pointer;
    5.  AOff, ALen: Int64;
    6. begin
    7.  result := nil;
    8.  AOff := (Offs div SecSize) * SecSize;
    9.  bw := SetFilePointer(PhysDev, DWORD(AOff), Pointer(DWORD(@AOff) + 4), FILE_BEGIN);
    10.  if (bw = DWORD(-1)) then exit;
    11.  ALen := (((Offs + Len) div SecSize) + 1) * SecSize - AOff;
    12.  Buf := GetMemory(ALen);
    13.  ReadFile(PhysDev, PChar(Buf)^, ALen, bw, nil);
    14.  if bw = 0 then
    15.   begin
    16.    FreeMemory(Buf);
    17.    exit;
    18.   end;
    19.  result := GetMemory(Len);
    20.  CopyMemory(result, Pointer(DWORD(Buf) + Offs - AOff), Len);
    21.  FreeMemory(Buf);
    22. end;
     
  7. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    EvilsInterrupt
    книженцию такую приобрёл месяца 3 назад. Собственно кроме описания самих структур файловых систем там ничего более и нету. Все примеры приводятся с использованием УНИХ пакета программ The Sleuth Kit.(хотя книжка в целом достаточно хорошая) У меня же цель состоит в поиске скрытых данных (в потенциале), например при записи в файловую запись каталога каких либо данных (например в командной строке C:\ echo "Hello" > file.txt:field1) - т.е. добавление ещё одного поля $DATA...
     
  8. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    n0name
    насчёт этой функции надо проверять.... вообще не очень нравится что обращается она именно к физическому диску, хотя в этом есть плюс т.к. непонятно что будут выдавать FSCTL функции в случае повреждения метаданных..А так можно будет самому проверять повреждены служебные структуры или нет.... Не секрет, откуда такая уверенность насчёт ReadFile?
     
  9. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    n0name
    большая просьба писать всё-таки не на Delphi, а то для меня как для заурядного C++ Visual-иста очень уж неудобно читать этот листинг... Начинаешь пристально всматриваться. Но всё равно спасиб, жду соображений насчёт предыдущего мессага.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Cneg
    Документацию читать надо. ReadFile/WriteFile прекрасно работают как с физическим диском, так и с логическим.
     
  11. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    IceStudent
    т.е. вы мне предлагаете считывать всю эту лабуду с диска как текстовый файл? эхххх....
     
  12. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    кроме того, этож какой размер буфера должен быть?
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    :\
    MSDN
    Это только пример.
    как минимум 512 байт. Тебя же никто не заставляет за раз считать всю информацию.
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Cneg
    А ReadFile читает только текстовые файлы? Надо же.
    Загляни вот в документацию по CreateFile и посмотри секцию Remarks.
     
  15. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    а никто не напишет соображений насчёт использования FSCTL функций? хочется как минимум 2 варианта иметь альтернативных...
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Они вообще левые.
     
  17. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    n0name
    Не совсем - FSCTL_GET_VOLUME_BITMAP, FSCTL_GET_RETRIEVAL_POINTERS - они ведь сделаны для упрощения получения расположения файлов на диске, так что не такие уж они и левые.
     
  18. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    на самом деле даже Руссинович в своё время выкладывал исходники на sysinternals.com, в которых использовал ряд таких функций - FSCTL_READ_MFT_RECORD, FSCTL_GET_VOLUME_BITMAP, FSCTL_GET_RETRIEVAL_POINTERS, FSCTL_MOVE_FILE (в ряде программ - NTFSInfo, Defragmentator и т.д.) Однако после того как его купил Microsoft это добро утеряно, исходников на сайте больше нет... Хотя не далее как вчера я таки нашёл у знакомого диск со старым сайтом руссиновича.... думаю дело скоро пойдёт...
     
  19. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    IceStudent
    Ну это мало относится именно к анализу ФС. Скорее уже использование внутренних механизмов ОСи.
     
  20. Cneg

    Cneg New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2007
    Сообщения:
    78
    если кому интересно почитать исходники, могу скинутть ресурсы этого сайта (весит он порядка 20 мбайт)