помогите разобраться.... Есть ЖД с файловой системой (NTFS либо FAT), необходимо получить доступ к жд (вроде как это делает CREATEFILE с первым параметром \\.\C:, где С: - имя логического диска) и проанализировать для начала метаданные (например в случае NTFS - записи поля MFT).... Вопрос в том с какими структурами или переменными придётся работать после CREATEFILE и вообще правильно ли я всё делаю?
СТруктуру файловых систем благо я знаю, а вот как ручками с ней работать... с этим проблема. Может кто ссылочку хорошую даст
появилась идея использовать FSCTL функции...... описание в msdn достаточно размытое и до конца не понятно. Может кто использовал эти функции?? Опять же встаёт вопрос... а если область MFT будет затёрта, тогда ведь эти функции не будут работать...
Cneg Спрашивай у гугла: "Криминалистический анализ файловых систем", это книга от специалиста по восстановлению данных в силовых органах(буржуйских). Название вроде верно, но не уверен
Cneg Ну просто ReadFile. Правда смещение и количество считанных байтов должно быть кратно размеру сектора. Вот функция, которая читает данные произвольной длины с произвольного смещения. Код (Text): function ReadPhysBytes(Offs: Int64; Len: DWORD; PhysDev: THandle; SecSize: DWORD): Pointer; var bw: DWORD; Buf: Pointer; AOff, ALen: Int64; begin result := nil; AOff := (Offs div SecSize) * SecSize; bw := SetFilePointer(PhysDev, DWORD(AOff), Pointer(DWORD(@AOff) + 4), FILE_BEGIN); if (bw = DWORD(-1)) then exit; ALen := (((Offs + Len) div SecSize) + 1) * SecSize - AOff; Buf := GetMemory(ALen); ReadFile(PhysDev, PChar(Buf)^, ALen, bw, nil); if bw = 0 then begin FreeMemory(Buf); exit; end; result := GetMemory(Len); CopyMemory(result, Pointer(DWORD(Buf) + Offs - AOff), Len); FreeMemory(Buf); end;
EvilsInterrupt книженцию такую приобрёл месяца 3 назад. Собственно кроме описания самих структур файловых систем там ничего более и нету. Все примеры приводятся с использованием УНИХ пакета программ The Sleuth Kit.(хотя книжка в целом достаточно хорошая) У меня же цель состоит в поиске скрытых данных (в потенциале), например при записи в файловую запись каталога каких либо данных (например в командной строке C:\ echo "Hello" > file.txt:field1) - т.е. добавление ещё одного поля $DATA...
n0name насчёт этой функции надо проверять.... вообще не очень нравится что обращается она именно к физическому диску, хотя в этом есть плюс т.к. непонятно что будут выдавать FSCTL функции в случае повреждения метаданных..А так можно будет самому проверять повреждены служебные структуры или нет.... Не секрет, откуда такая уверенность насчёт ReadFile?
n0name большая просьба писать всё-таки не на Delphi, а то для меня как для заурядного C++ Visual-иста очень уж неудобно читать этот листинг... Начинаешь пристально всматриваться. Но всё равно спасиб, жду соображений насчёт предыдущего мессага.
Cneg Документацию читать надо. ReadFile/WriteFile прекрасно работают как с физическим диском, так и с логическим.
:\ MSDN Это только пример. как минимум 512 байт. Тебя же никто не заставляет за раз считать всю информацию.
Cneg А ReadFile читает только текстовые файлы? Надо же. Загляни вот в документацию по CreateFile и посмотри секцию Remarks.
а никто не напишет соображений насчёт использования FSCTL функций? хочется как минимум 2 варианта иметь альтернативных...
n0name Не совсем - FSCTL_GET_VOLUME_BITMAP, FSCTL_GET_RETRIEVAL_POINTERS - они ведь сделаны для упрощения получения расположения файлов на диске, так что не такие уж они и левые.
на самом деле даже Руссинович в своё время выкладывал исходники на sysinternals.com, в которых использовал ряд таких функций - FSCTL_READ_MFT_RECORD, FSCTL_GET_VOLUME_BITMAP, FSCTL_GET_RETRIEVAL_POINTERS, FSCTL_MOVE_FILE (в ряде программ - NTFSInfo, Defragmentator и т.д.) Однако после того как его купил Microsoft это добро утеряно, исходников на сайте больше нет... Хотя не далее как вчера я таки нашёл у знакомого диск со старым сайтом руссиновича.... думаю дело скоро пойдёт...
IceStudent Ну это мало относится именно к анализу ФС. Скорее уже использование внутренних механизмов ОСи.
если кому интересно почитать исходники, могу скинутть ресурсы этого сайта (весит он порядка 20 мбайт)